react-native-firework-sdk 2.10.1 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFragment.kt +18 -1
- package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/FWVideoFeed.kt +4 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModel.kt +0 -1
- package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModelDeserializer.kt +0 -3
- package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModelSerializer.kt +0 -2
- package/android/src/main/java/com/fireworksdk/bridge/models/FWSdkInitResultModel.kt +6 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWTrackPurchaseModel.kt +9 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWTrackPurchaseModelDeserializer.kt +45 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWTrackPurchaseModelSerializer.kt +34 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedItemDetailsModel.kt +1 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlaybackDetails.kt +1 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModel.kt +2 -1
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelDeserializer.kt +4 -1
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelSerializer.kt +2 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerLogoConfigurationModel.kt +8 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerLogoConfigurationModelDeserializer.kt +23 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerLogoConfigurationModelSerializer.kt +18 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWEventName.kt +2 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoPlayerLogoOption.kt +19 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/FWReactNativeSDK.kt +103 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWStoryBlockManager.kt +12 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWVideoFeedManager.kt +8 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FireworkSDKInterface.kt +2 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +22 -9
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt +74 -122
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWEventUtils.kt +34 -9
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWConfigUtil.kt +13 -0
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWFragmentUtil.kt +3 -3
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWGlobalDataUtil.kt +5 -2
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWModelUtils.kt +64 -0
- package/ios/Components/ReplayBadgeConfiguration.swift +12 -0
- package/ios/Components/StoryBlock.swift +31 -0
- package/ios/Components/StoryBlockConfiguration.swift +1 -0
- package/ios/Components/StoryBlockManager.m +24 -0
- package/ios/Components/StoryBlockManager.swift +6 -3
- package/ios/Components/VideoFeed.swift +18 -3
- package/ios/Components/VideoFeedConfiguration.swift +1 -0
- package/ios/Components/VideoFeedManager.m +4 -1
- package/ios/Components/VideoFeedManager.swift +6 -3
- package/ios/Components/VideoPlayerConfiguration.swift +1 -0
- package/ios/FWReactNativeSDK.swift +14 -0
- package/ios/FireworkSdk.xcodeproj/project.pbxproj +4 -0
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +17 -15
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule+EventTracking.swift +1 -11
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +1 -0
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +80 -81
- package/ios/Modules/FireworkSDKModule/SDKInitOptions.swift +9 -5
- package/ios/Modules/Shopping/ShoppingModule.swift +10 -74
- package/lib/commonjs/FireworkSDK.js +30 -25
- package/lib/commonjs/FireworkSDK.js.map +1 -1
- package/lib/commonjs/VideoShopping.js +6 -12
- package/lib/commonjs/VideoShopping.js.map +1 -1
- package/lib/commonjs/components/StoryBlock.js +54 -3
- package/lib/commonjs/components/StoryBlock.js.map +1 -1
- package/lib/commonjs/components/VideoFeed.js +46 -4
- package/lib/commonjs/components/VideoFeed.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/FWNativeErrorAction.js +14 -0
- package/lib/commonjs/models/FWNativeErrorAction.js.map +1 -0
- package/lib/commonjs/models/ReplayBadgeConfiguration.js +2 -0
- package/lib/commonjs/models/ReplayBadgeConfiguration.js.map +1 -0
- package/lib/commonjs/modules/FireworkSDKModule.js.map +1 -1
- package/lib/module/FireworkSDK.js +29 -25
- package/lib/module/FireworkSDK.js.map +1 -1
- package/lib/module/VideoShopping.js +6 -12
- package/lib/module/VideoShopping.js.map +1 -1
- package/lib/module/components/StoryBlock.js +53 -3
- package/lib/module/components/StoryBlock.js.map +1 -1
- package/lib/module/components/VideoFeed.js +42 -4
- package/lib/module/components/VideoFeed.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/FWNativeErrorAction.js +7 -0
- package/lib/module/models/FWNativeErrorAction.js.map +1 -0
- package/lib/module/models/ReplayBadgeConfiguration.js +2 -0
- package/lib/module/models/ReplayBadgeConfiguration.js.map +1 -0
- package/lib/module/modules/FireworkSDKModule.js.map +1 -1
- package/lib/typescript/VideoShopping.d.ts +2 -2
- package/lib/typescript/components/StoryBlock.d.ts +18 -1
- package/lib/typescript/components/VideoFeed.d.ts +7 -1
- package/lib/typescript/index.d.ts +2 -2
- package/lib/typescript/models/FWEvents.d.ts +26 -3
- package/lib/typescript/models/FWNativeErrorAction.d.ts +4 -0
- package/lib/typescript/models/FeedItemDetails.d.ts +6 -1
- package/lib/typescript/models/ReplayBadgeConfiguration.d.ts +7 -0
- package/lib/typescript/models/StoryBlockConfiguration.d.ts +6 -1
- package/lib/typescript/models/VideoFeedConfiguration.d.ts +6 -0
- package/lib/typescript/models/VideoPlayerConfiguration.d.ts +6 -1
- package/lib/typescript/modules/FireworkSDKModule.d.ts +1 -0
- package/package.json +1 -5
- package/react-native-firework-sdk.podspec +3 -5
- package/src/FireworkSDK.ts +27 -24
- package/src/VideoShopping.ts +9 -11
- package/src/components/StoryBlock.tsx +69 -7
- package/src/components/VideoFeed.tsx +57 -12
- package/src/index.ts +2 -0
- package/src/models/FWEvents.ts +28 -3
- package/src/models/FWNativeErrorAction.ts +4 -0
- package/src/models/FeedItemDetails.ts +7 -1
- package/src/models/ReplayBadgeConfiguration.ts +7 -0
- package/src/models/StoryBlockConfiguration.ts +6 -1
- package/src/models/VideoFeedConfiguration.ts +6 -0
- package/src/models/VideoPlayerConfiguration.ts +6 -1
- package/src/modules/FireworkSDKModule.ts +1 -0
- package/FireworkVideoUI.xcframework/Info.plist +0 -40
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/FireworkVideoUI +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Headers/FireworkVideoUI-Swift.h +0 -280
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Headers/FireworkVideoUI.h +0 -18
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Info.plist +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios.abi.json +0 -1313
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios.private.swiftinterface +0 -42
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios.swiftinterface +0 -42
- package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/module.modulemap +0 -11
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/FireworkVideoUI +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Headers/FireworkVideoUI-Swift.h +0 -556
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Headers/FireworkVideoUI.h +0 -18
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Info.plist +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios-simulator.abi.json +0 -1313
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +0 -42
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios-simulator.swiftinterface +0 -42
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/x86_64-apple-ios-simulator.abi.json +0 -1313
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +0 -42
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +0 -42
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/module.modulemap +0 -11
- package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/_CodeSignature/CodeResources +0 -245
- package/ios/FireworkVideoUI/FireworkVideoUI/FireworkVideoUI.docc/FireworkVideoUI.md +0 -13
- package/ios/FireworkVideoUI/FireworkVideoUI/FireworkVideoUI.h +0 -18
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/AppLanguageManager.swift +0 -154
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/Bundle+AppLanguage.swift +0 -73
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/NumberFormatter+AppLanguage.swift +0 -25
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/URLSession+AppLanguage.swift +0 -52
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UIImageView+AppLanguage.swift +0 -60
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UILabel+AppLanguage.swift +0 -98
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UITextField+AppLanguage.swift +0 -97
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UITextView+AppLanguage.swift +0 -97
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UIView+AppLanguage.swift +0 -71
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UIViewController+AppLanguage.swift +0 -48
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UIWindow+AppLanguage.swift +0 -26
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/LanguageUtil.swift +0 -43
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/LayoutFlip/Extensions/Foundation/NSObject+LayoutFlip.swift +0 -42
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/LayoutFlip/Extensions/UIKit/CALayer+LayoutFlip.swift +0 -149
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/LayoutFlip/Extensions/UIKit/UILabel+LayoutFlip.swift +0 -35
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/LayoutFlip/Extensions/UIKit/UIView+LayoutFlip.swift +0 -202
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/LayoutFlip/LayoutFlipManager.swift +0 -59
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/Utils/Extensions/Foundation/DispatchQueue+Once.swift +0 -32
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/Utils/Extensions/Foundation/String+Base64.swift +0 -18
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/Utils/Extensions/UIKit/UIView+UIHierarchy.swift +0 -46
- package/ios/FireworkVideoUI/FireworkVideoUI/Sources/Utils/Swizzle.swift +0 -37
- package/ios/FireworkVideoUI/FireworkVideoUI.xcodeproj/project.pbxproj +0 -766
- package/ios/FireworkVideoUI/FireworkVideoUI.xcworkspace/contents.xcworkspacedata +0 -10
- package/ios/FireworkVideoUI/FireworkVideoUI.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/FireworkVideoUI/FireworkVideoUITests/FireworkVideoUITests.swift +0 -37
- package/ios/FireworkVideoUI/Podfile +0 -15
- package/ios/FireworkVideoUI/Podfile.lock +0 -16
- package/ios/scripts/react_native_firework_sdk_pods.rb +0 -27
|
@@ -142,9 +142,9 @@ class VideoShopping {
|
|
|
142
142
|
FWLoggerUtil.log(`Receive ShoppingCTA event productId: ${event === null || event === void 0 ? void 0 : event.productId} unitId: ${event === null || event === void 0 ? void 0 : event.unitId} url: ${event === null || event === void 0 ? void 0 : event.url}`);
|
|
143
143
|
this.handleShoppingCTAEvent(event);
|
|
144
144
|
});
|
|
145
|
-
this.eventEmitter.addListener(FWEventName.ClickCartIcon,
|
|
145
|
+
this.eventEmitter.addListener(FWEventName.ClickCartIcon, event => {
|
|
146
146
|
FWLoggerUtil.log('Receive ClickCartIcon event');
|
|
147
|
-
this.handleClickCartIconEvent();
|
|
147
|
+
this.handleClickCartIconEvent(event);
|
|
148
148
|
});
|
|
149
149
|
this.eventEmitter.addListener(FWEventName.UpdateProductDetails, event => {
|
|
150
150
|
FWLoggerUtil.log(`Receive UpdateProductDetails event productIds: ${event === null || event === void 0 ? void 0 : event.productIds}`);
|
|
@@ -159,12 +159,6 @@ class VideoShopping {
|
|
|
159
159
|
FWLoggerUtil.log(`Receive CustomProductCardTap event url: ${event === null || event === void 0 ? void 0 : event.url}`);
|
|
160
160
|
|
|
161
161
|
if (event) {
|
|
162
|
-
if (!event.video) {
|
|
163
|
-
event.video = {
|
|
164
|
-
videoId: ''
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
162
|
if (event.callbackId) {
|
|
169
163
|
const callbackId = event.callbackId;
|
|
170
164
|
delete event.callbackId;
|
|
@@ -176,9 +170,9 @@ class VideoShopping {
|
|
|
176
170
|
};
|
|
177
171
|
}
|
|
178
172
|
}
|
|
179
|
-
}
|
|
180
173
|
|
|
181
|
-
|
|
174
|
+
this.handleCustomProductCardTapEvent(event);
|
|
175
|
+
}
|
|
182
176
|
});
|
|
183
177
|
}
|
|
184
178
|
/**
|
|
@@ -218,9 +212,9 @@ class VideoShopping {
|
|
|
218
212
|
}
|
|
219
213
|
}
|
|
220
214
|
|
|
221
|
-
async handleClickCartIconEvent() {
|
|
215
|
+
async handleClickCartIconEvent(event) {
|
|
222
216
|
if (this.onCustomClickCartIcon) {
|
|
223
|
-
this.onCustomClickCartIcon();
|
|
217
|
+
this.onCustomClickCartIcon(event);
|
|
224
218
|
}
|
|
225
219
|
}
|
|
226
220
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["VideoShopping.ts"],"names":["Platform","FWEventName","ShoppingModule","ShoppingModuleEventEmitter","FWLoggerUtil","FWGlobalState","VideoShopping","onCustomClickLinkButton","_onCustomClickLinkButton","value","setCustomClickLinkButtonEnabled","onCustomTapProductCard","_onCustomTapProductCard","setCustomTapProductCardEnabled","cartIconVisible","_cartIconVisible","getInstance","sdkInitCalled","setCartIconVisible","sdkInitCalledPromise","then","productInfoViewConfiguration","_productInfoViewConfiguration","valueHasChanged","updateNativeProductInfoViewConfiguration","setProductInfoViewConfiguration","eventEmitter","emit","ProductInfoViewConfigurationUpdated","log","_instance","constructor","addListener","ShoppingCTAButtonClick","event","productId","unitId","url","handleShoppingCTAEvent","ClickCartIcon","handleClickCartIconEvent","UpdateProductDetails","productIds","handleUpdateProductDetailsEvent","LogMessage","CustomLinkButtonClick","handleCustomLinkButtonClickEvent","CustomProductCardTap","video","videoId","callbackId","OS","playerHandler","pause","pausePlayer","resume","resumePlayer","handleCustomProductCardTapEvent","setCartItemCount","count","onShoppingCTA","result","updateShoppingCTAResult","clearCallbackId","onCustomClickCartIcon","onUpdateProductDetails","productList","map","product","length","updateVideoProducts"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, Platform } from 'react-native';\n\nimport { FWEventName } from './models/FWEventName';\nimport type {\n CustomClickLinkButtonEvent,\n CustomTapProductCardEvent,\n ShoppingCTAEvent,\n UpdateProductDetailsEvent,\n} from './models/FWEvents';\nimport type Product from './models/Product';\nimport type ProductInfoViewConfiguration from './models/ProductInfoViewConfiguration';\nimport ShoppingModule, {\n ShoppingModuleEventEmitter,\n} from './modules/ShoppingModule';\nimport FWLoggerUtil from './utils/FWLoggerUtil';\nimport type ShoppingCTAResult from './models/ShoppingCTAResult';\nimport FWGlobalState from './utils/FWGlobalState';\n\nexport type ShoppingCTACallback = (\n event: ShoppingCTAEvent\n) => Promise<ShoppingCTAResult> | ShoppingCTAResult;\n\nexport type CustomClickCartIconCallback = () => Promise<void> | void;\n\nexport type UpdateProductDetailsCallbackResult = Product[] | undefined | null;\nexport type UpdateProductDetailsCallback = (\n event: UpdateProductDetailsEvent\n) =>\n | Promise<UpdateProductDetailsCallbackResult>\n | UpdateProductDetailsCallbackResult;\n\nexport type CustomClickLinkButtonCallback = (\n event: CustomClickLinkButtonEvent\n) => Promise<void> | void;\n\nexport type CustomTapProductCardCallback = (\n event: CustomTapProductCardEvent\n) => Promise<void> | void;\n\n/**\n * The entry class of video shopping.\n */\nclass VideoShopping {\n private static _instance?: VideoShopping;\n\n /**\n * This callback is triggered when the user clicks the \"Add to cart\" or \"Shop now\" button.\n * The host app can return a ShoppingCTAResult object to tell SDK how to handle the result.\n */\n public onShoppingCTA?: ShoppingCTACallback;\n\n /**\n * This callback is triggered when the user clicks the shopping cart icon.\n *\n * The host app can customize the click event processing logic of\n * the shopping cart icon by setting the callback.\n */\n public onCustomClickCartIcon?: CustomClickCartIconCallback | undefined;\n\n /**\n * This callback is triggered when the video will be shown.\n *\n * The host app can return a Product list to update the latest product information.\n */\n public onUpdateProductDetails?: UpdateProductDetailsCallback;\n\n /**\n * This callback is triggered when the user clicks\n * the link button next to Add to cart button.\n *\n * The host app can customize the click event processing logic of\n * the link button by setting the callback.\n */\n public get onCustomClickLinkButton():\n | CustomClickLinkButtonCallback\n | undefined {\n return this._onCustomClickLinkButton;\n }\n public set onCustomClickLinkButton(\n value: CustomClickLinkButtonCallback | undefined\n ) {\n this._onCustomClickLinkButton = value;\n ShoppingModule.setCustomClickLinkButtonEnabled(!!value);\n }\n private _onCustomClickLinkButton?: CustomClickLinkButtonCallback | undefined;\n\n /**\n * This callback is triggered when the user clicks product card.\n *\n * The host app can customize the tap event processing logic of\n * the product card by setting the callback.\n */\n public get onCustomTapProductCard():\n | CustomTapProductCardCallback\n | undefined {\n return this._onCustomTapProductCard;\n }\n public set onCustomTapProductCard(\n value: CustomTapProductCardCallback | undefined\n ) {\n this._onCustomTapProductCard = value;\n ShoppingModule.setCustomTapProductCardEnabled(!!value);\n }\n private _onCustomTapProductCard?: CustomTapProductCardCallback | undefined;\n\n /**\n * Defaults to true.\n * You can hide the cart icon by setting this property to false.\n */\n public get cartIconVisible(): boolean {\n return this._cartIconVisible;\n }\n public set cartIconVisible(value: boolean) {\n this._cartIconVisible = value;\n if (FWGlobalState.getInstance().sdkInitCalled) {\n ShoppingModule.setCartIconVisible(value);\n } else {\n FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {\n ShoppingModule.setCartIconVisible(value);\n });\n }\n }\n private _cartIconVisible: boolean = true;\n\n /**\n * The configuration of product info view.\n * Please refer to {@link ProductInfoViewConfiguration} for more details.\n */\n public get productInfoViewConfiguration():\n | ProductInfoViewConfiguration\n | undefined {\n return this._productInfoViewConfiguration;\n }\n\n public set productInfoViewConfiguration(\n value: ProductInfoViewConfiguration | undefined\n ) {\n const valueHasChanged = this._productInfoViewConfiguration !== value;\n this._productInfoViewConfiguration = value;\n if (FWGlobalState.getInstance().sdkInitCalled) {\n this.updateNativeProductInfoViewConfiguration(value, valueHasChanged);\n } else {\n FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {\n this.updateNativeProductInfoViewConfiguration(value, valueHasChanged);\n });\n }\n }\n\n private updateNativeProductInfoViewConfiguration(\n value: ProductInfoViewConfiguration | undefined,\n valueHasChanged: Boolean\n ) {\n ShoppingModule.setProductInfoViewConfiguration(value ?? {}).then(() => {\n if (valueHasChanged) {\n this.eventEmitter.emit(FWEventName.ProductInfoViewConfigurationUpdated);\n FWLoggerUtil.log('eventEmitter ProductInfoViewConfigurationUpdated');\n }\n });\n }\n\n private _productInfoViewConfiguration?:\n | ProductInfoViewConfiguration\n | undefined;\n\n private get eventEmitter(): NativeEventEmitter {\n return ShoppingModuleEventEmitter;\n }\n\n public static getInstance() {\n FWLoggerUtil.log('VideoShopping constructor');\n if (!VideoShopping._instance) {\n VideoShopping._instance = new VideoShopping();\n }\n\n return VideoShopping._instance!;\n }\n\n private constructor() {\n this.eventEmitter.addListener(\n FWEventName.ShoppingCTAButtonClick,\n (event) => {\n FWLoggerUtil.log(\n `Receive ShoppingCTA event productId: ${event?.productId} unitId: ${event?.unitId} url: ${event?.url}`\n );\n this.handleShoppingCTAEvent(event);\n }\n );\n\n this.eventEmitter.addListener(FWEventName.ClickCartIcon, () => {\n FWLoggerUtil.log('Receive ClickCartIcon event');\n this.handleClickCartIconEvent();\n });\n\n this.eventEmitter.addListener(FWEventName.UpdateProductDetails, (event) => {\n FWLoggerUtil.log(\n `Receive UpdateProductDetails event productIds: ${event?.productIds}`\n );\n this.handleUpdateProductDetailsEvent(event);\n });\n\n this.eventEmitter.addListener(FWEventName.LogMessage, () => {});\n\n this.eventEmitter.addListener(\n FWEventName.CustomLinkButtonClick,\n (event) => {\n FWLoggerUtil.log(\n `Receive CustomLinkButtonClick event url: ${event?.url}`\n );\n this.handleCustomLinkButtonClickEvent(event);\n }\n );\n\n this.eventEmitter.addListener(FWEventName.CustomProductCardTap, (event) => {\n FWLoggerUtil.log(`Receive CustomProductCardTap event url: ${event?.url}`);\n if (event) {\n if (!event.video) {\n event.video = { videoId: '' };\n }\n\n if (event.callbackId) {\n const callbackId = event.callbackId;\n delete event.callbackId;\n if (Platform.OS === 'ios') {\n event.playerHandler = {\n pause: () => ShoppingModule.pausePlayer(callbackId),\n resume: () => ShoppingModule.resumePlayer(callbackId),\n };\n }\n }\n }\n\n this.handleCustomProductCardTapEvent(event ?? {});\n });\n }\n\n /**\n *\n * @param {number} count The number of items in the host app cart.\n * The count should be greater than or equal to 0.\n * We just use count to show or hide red indicator on the cart icon.\n * If cound > 0, we will show the red indicator on the cart icon.\n * Otherwise, we will hide the red indicator on the cart icon.\n */\n public async setCartItemCount(count: number): Promise<void> {\n if (!FWGlobalState.getInstance().sdkInitCalled) {\n await FWGlobalState.getInstance().sdkInitCalledPromise;\n }\n ShoppingModule.setCartItemCount(count);\n }\n\n private async handleShoppingCTAEvent(event: any) {\n const callbackId = event.callbackId;\n delete event.callbackId;\n\n if (this.onShoppingCTA) {\n const result = await this.onShoppingCTA(event as ShoppingCTAEvent);\n if (callbackId) {\n ShoppingModule.updateShoppingCTAResult(result, callbackId);\n }\n } else {\n if (callbackId) {\n if (Platform.OS === 'ios') {\n ShoppingModule.clearCallbackId(\n callbackId,\n FWEventName.ShoppingCTAButtonClick\n );\n }\n }\n }\n }\n\n private async handleClickCartIconEvent() {\n if (this.onCustomClickCartIcon) {\n this.onCustomClickCartIcon();\n }\n }\n\n private async handleUpdateProductDetailsEvent(event: any) {\n const callbackId = event.callbackId;\n delete event.callbackId;\n if (this.onUpdateProductDetails) {\n FWLoggerUtil.log(\n `Call onUpdateProductDetails callback productIds: ${event.productIds} callbackId: ${callbackId}`\n );\n const productList = await this.onUpdateProductDetails(\n event as UpdateProductDetailsEvent\n );\n\n const productIds = (productList || []).map(\n (product) => product.productId ?? ''\n );\n\n FWLoggerUtil.log(\n `Get result from onUpdateProductDetails callback productIds: ${productIds} productListLength: ${\n (productList || []).length\n }`\n );\n\n if (productList) {\n if (callbackId) {\n ShoppingModule.updateVideoProducts(productList, callbackId);\n }\n } else {\n if (callbackId) {\n if (Platform.OS === 'ios') {\n ShoppingModule.clearCallbackId(\n callbackId,\n FWEventName.UpdateProductDetails\n );\n }\n }\n }\n } else {\n FWLoggerUtil.log('onUpdateProductDetails callback is not set.');\n if (callbackId) {\n if (Platform.OS === 'ios') {\n ShoppingModule.clearCallbackId(\n callbackId,\n FWEventName.UpdateProductDetails\n );\n }\n }\n }\n }\n\n private async handleCustomLinkButtonClickEvent(\n event: CustomClickLinkButtonEvent\n ) {\n if (this.onCustomClickLinkButton) {\n this.onCustomClickLinkButton(event);\n }\n }\n\n private async handleCustomProductCardTapEvent(\n event: CustomTapProductCardEvent\n ) {\n if (this.onCustomTapProductCard) {\n this.onCustomTapProductCard(event);\n }\n }\n}\n\nexport default VideoShopping;\n"]}
|
|
1
|
+
{"version":3,"sources":["VideoShopping.ts"],"names":["Platform","FWEventName","ShoppingModule","ShoppingModuleEventEmitter","FWLoggerUtil","FWGlobalState","VideoShopping","onCustomClickLinkButton","_onCustomClickLinkButton","value","setCustomClickLinkButtonEnabled","onCustomTapProductCard","_onCustomTapProductCard","setCustomTapProductCardEnabled","cartIconVisible","_cartIconVisible","getInstance","sdkInitCalled","setCartIconVisible","sdkInitCalledPromise","then","productInfoViewConfiguration","_productInfoViewConfiguration","valueHasChanged","updateNativeProductInfoViewConfiguration","setProductInfoViewConfiguration","eventEmitter","emit","ProductInfoViewConfigurationUpdated","log","_instance","constructor","addListener","ShoppingCTAButtonClick","event","productId","unitId","url","handleShoppingCTAEvent","ClickCartIcon","handleClickCartIconEvent","UpdateProductDetails","productIds","handleUpdateProductDetailsEvent","LogMessage","CustomLinkButtonClick","handleCustomLinkButtonClickEvent","CustomProductCardTap","callbackId","OS","playerHandler","pause","pausePlayer","resume","resumePlayer","handleCustomProductCardTapEvent","setCartItemCount","count","onShoppingCTA","result","updateShoppingCTAResult","clearCallbackId","onCustomClickCartIcon","onUpdateProductDetails","productList","map","product","length","updateVideoProducts"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, Platform } from 'react-native';\n\nimport { FWEventName } from './models/FWEventName';\nimport type {\n CustomClickCartIconEvent,\n CustomClickLinkButtonEvent,\n CustomTapProductCardEvent,\n ShoppingCTAEvent,\n UpdateProductDetailsEvent,\n} from './models/FWEvents';\nimport type Product from './models/Product';\nimport type ProductInfoViewConfiguration from './models/ProductInfoViewConfiguration';\nimport ShoppingModule, {\n ShoppingModuleEventEmitter,\n} from './modules/ShoppingModule';\nimport FWLoggerUtil from './utils/FWLoggerUtil';\nimport type ShoppingCTAResult from './models/ShoppingCTAResult';\nimport FWGlobalState from './utils/FWGlobalState';\n\nexport type ShoppingCTACallback = (\n event: ShoppingCTAEvent\n) => Promise<ShoppingCTAResult> | ShoppingCTAResult;\n\nexport type CustomClickCartIconCallback = (\n event: CustomClickCartIconEvent\n) => Promise<void> | void;\n\nexport type UpdateProductDetailsCallbackResult = Product[] | undefined | null;\nexport type UpdateProductDetailsCallback = (\n event: UpdateProductDetailsEvent\n) =>\n | Promise<UpdateProductDetailsCallbackResult>\n | UpdateProductDetailsCallbackResult;\n\nexport type CustomClickLinkButtonCallback = (\n event: CustomClickLinkButtonEvent\n) => Promise<void> | void;\n\nexport type CustomTapProductCardCallback = (\n event: CustomTapProductCardEvent\n) => Promise<void> | void;\n\n/**\n * The entry class of video shopping.\n */\nclass VideoShopping {\n private static _instance?: VideoShopping;\n\n /**\n * This callback is triggered when the user clicks the \"Add to cart\" or \"Shop now\" button.\n * The host app can return a ShoppingCTAResult object to tell SDK how to handle the result.\n */\n public onShoppingCTA?: ShoppingCTACallback;\n\n /**\n * This callback is triggered when the user clicks the shopping cart icon.\n *\n * The host app can customize the click event processing logic of\n * the shopping cart icon by setting the callback.\n */\n public onCustomClickCartIcon?: CustomClickCartIconCallback | undefined;\n\n /**\n * This callback is triggered when the video will be shown.\n *\n * The host app can return a Product list to update the latest product information.\n */\n public onUpdateProductDetails?: UpdateProductDetailsCallback;\n\n /**\n * This callback is triggered when the user clicks\n * the link button next to Add to cart button.\n *\n * The host app can customize the click event processing logic of\n * the link button by setting the callback.\n */\n public get onCustomClickLinkButton():\n | CustomClickLinkButtonCallback\n | undefined {\n return this._onCustomClickLinkButton;\n }\n public set onCustomClickLinkButton(\n value: CustomClickLinkButtonCallback | undefined\n ) {\n this._onCustomClickLinkButton = value;\n ShoppingModule.setCustomClickLinkButtonEnabled(!!value);\n }\n private _onCustomClickLinkButton?: CustomClickLinkButtonCallback | undefined;\n\n /**\n * This callback is triggered when the user clicks product card.\n *\n * The host app can customize the tap event processing logic of\n * the product card by setting the callback.\n */\n public get onCustomTapProductCard():\n | CustomTapProductCardCallback\n | undefined {\n return this._onCustomTapProductCard;\n }\n public set onCustomTapProductCard(\n value: CustomTapProductCardCallback | undefined\n ) {\n this._onCustomTapProductCard = value;\n ShoppingModule.setCustomTapProductCardEnabled(!!value);\n }\n private _onCustomTapProductCard?: CustomTapProductCardCallback | undefined;\n\n /**\n * Defaults to true.\n * You can hide the cart icon by setting this property to false.\n */\n public get cartIconVisible(): boolean {\n return this._cartIconVisible;\n }\n public set cartIconVisible(value: boolean) {\n this._cartIconVisible = value;\n if (FWGlobalState.getInstance().sdkInitCalled) {\n ShoppingModule.setCartIconVisible(value);\n } else {\n FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {\n ShoppingModule.setCartIconVisible(value);\n });\n }\n }\n private _cartIconVisible: boolean = true;\n\n /**\n * The configuration of product info view.\n * Please refer to {@link ProductInfoViewConfiguration} for more details.\n */\n public get productInfoViewConfiguration():\n | ProductInfoViewConfiguration\n | undefined {\n return this._productInfoViewConfiguration;\n }\n\n public set productInfoViewConfiguration(\n value: ProductInfoViewConfiguration | undefined\n ) {\n const valueHasChanged = this._productInfoViewConfiguration !== value;\n this._productInfoViewConfiguration = value;\n if (FWGlobalState.getInstance().sdkInitCalled) {\n this.updateNativeProductInfoViewConfiguration(value, valueHasChanged);\n } else {\n FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {\n this.updateNativeProductInfoViewConfiguration(value, valueHasChanged);\n });\n }\n }\n\n private updateNativeProductInfoViewConfiguration(\n value: ProductInfoViewConfiguration | undefined,\n valueHasChanged: Boolean\n ) {\n ShoppingModule.setProductInfoViewConfiguration(value ?? {}).then(() => {\n if (valueHasChanged) {\n this.eventEmitter.emit(FWEventName.ProductInfoViewConfigurationUpdated);\n FWLoggerUtil.log('eventEmitter ProductInfoViewConfigurationUpdated');\n }\n });\n }\n\n private _productInfoViewConfiguration?:\n | ProductInfoViewConfiguration\n | undefined;\n\n private get eventEmitter(): NativeEventEmitter {\n return ShoppingModuleEventEmitter;\n }\n\n public static getInstance() {\n FWLoggerUtil.log('VideoShopping constructor');\n if (!VideoShopping._instance) {\n VideoShopping._instance = new VideoShopping();\n }\n\n return VideoShopping._instance!;\n }\n\n private constructor() {\n this.eventEmitter.addListener(\n FWEventName.ShoppingCTAButtonClick,\n (event) => {\n FWLoggerUtil.log(\n `Receive ShoppingCTA event productId: ${event?.productId} unitId: ${event?.unitId} url: ${event?.url}`\n );\n this.handleShoppingCTAEvent(event);\n }\n );\n\n this.eventEmitter.addListener(FWEventName.ClickCartIcon, (event) => {\n FWLoggerUtil.log('Receive ClickCartIcon event');\n this.handleClickCartIconEvent(event);\n });\n\n this.eventEmitter.addListener(FWEventName.UpdateProductDetails, (event) => {\n FWLoggerUtil.log(\n `Receive UpdateProductDetails event productIds: ${event?.productIds}`\n );\n this.handleUpdateProductDetailsEvent(event);\n });\n\n this.eventEmitter.addListener(FWEventName.LogMessage, () => {});\n\n this.eventEmitter.addListener(\n FWEventName.CustomLinkButtonClick,\n (event) => {\n FWLoggerUtil.log(\n `Receive CustomLinkButtonClick event url: ${event?.url}`\n );\n this.handleCustomLinkButtonClickEvent(event);\n }\n );\n\n this.eventEmitter.addListener(FWEventName.CustomProductCardTap, (event) => {\n FWLoggerUtil.log(`Receive CustomProductCardTap event url: ${event?.url}`);\n if (event) {\n if (event.callbackId) {\n const callbackId = event.callbackId;\n delete event.callbackId;\n if (Platform.OS === 'ios') {\n event.playerHandler = {\n pause: () => ShoppingModule.pausePlayer(callbackId),\n resume: () => ShoppingModule.resumePlayer(callbackId),\n };\n }\n }\n this.handleCustomProductCardTapEvent(event);\n }\n });\n }\n\n /**\n *\n * @param {number} count The number of items in the host app cart.\n * The count should be greater than or equal to 0.\n * We just use count to show or hide red indicator on the cart icon.\n * If cound > 0, we will show the red indicator on the cart icon.\n * Otherwise, we will hide the red indicator on the cart icon.\n */\n public async setCartItemCount(count: number): Promise<void> {\n if (!FWGlobalState.getInstance().sdkInitCalled) {\n await FWGlobalState.getInstance().sdkInitCalledPromise;\n }\n ShoppingModule.setCartItemCount(count);\n }\n\n private async handleShoppingCTAEvent(event: any) {\n const callbackId = event.callbackId;\n delete event.callbackId;\n\n if (this.onShoppingCTA) {\n const result = await this.onShoppingCTA(event as ShoppingCTAEvent);\n if (callbackId) {\n ShoppingModule.updateShoppingCTAResult(result, callbackId);\n }\n } else {\n if (callbackId) {\n if (Platform.OS === 'ios') {\n ShoppingModule.clearCallbackId(\n callbackId,\n FWEventName.ShoppingCTAButtonClick\n );\n }\n }\n }\n }\n\n private async handleClickCartIconEvent(event: any) {\n if (this.onCustomClickCartIcon) {\n this.onCustomClickCartIcon(event as CustomClickCartIconEvent);\n }\n }\n\n private async handleUpdateProductDetailsEvent(event: any) {\n const callbackId = event.callbackId;\n delete event.callbackId;\n if (this.onUpdateProductDetails) {\n FWLoggerUtil.log(\n `Call onUpdateProductDetails callback productIds: ${event.productIds} callbackId: ${callbackId}`\n );\n const productList = await this.onUpdateProductDetails(\n event as UpdateProductDetailsEvent\n );\n\n const productIds = (productList || []).map(\n (product) => product.productId ?? ''\n );\n\n FWLoggerUtil.log(\n `Get result from onUpdateProductDetails callback productIds: ${productIds} productListLength: ${\n (productList || []).length\n }`\n );\n\n if (productList) {\n if (callbackId) {\n ShoppingModule.updateVideoProducts(productList, callbackId);\n }\n } else {\n if (callbackId) {\n if (Platform.OS === 'ios') {\n ShoppingModule.clearCallbackId(\n callbackId,\n FWEventName.UpdateProductDetails\n );\n }\n }\n }\n } else {\n FWLoggerUtil.log('onUpdateProductDetails callback is not set.');\n if (callbackId) {\n if (Platform.OS === 'ios') {\n ShoppingModule.clearCallbackId(\n callbackId,\n FWEventName.UpdateProductDetails\n );\n }\n }\n }\n }\n\n private async handleCustomLinkButtonClickEvent(\n event: CustomClickLinkButtonEvent\n ) {\n if (this.onCustomClickLinkButton) {\n this.onCustomClickLinkButton(event);\n }\n }\n\n private async handleCustomProductCardTapEvent(\n event: CustomTapProductCardEvent\n ) {\n if (this.onCustomTapProductCard) {\n this.onCustomTapProductCard(event);\n }\n }\n}\n\nexport default VideoShopping;\n"]}
|
|
@@ -117,6 +117,20 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
117
117
|
}
|
|
118
118
|
};
|
|
119
119
|
|
|
120
|
+
const handleStoryBlockGetFeedId = event => {
|
|
121
|
+
FWLoggerUtil.log(`StoryBlock handleStoryBlockGetFeedId ${JSON.stringify(event.nativeEvent)}`);
|
|
122
|
+
const {
|
|
123
|
+
onStoryBlockGetFeedId
|
|
124
|
+
} = props;
|
|
125
|
+
const {
|
|
126
|
+
feedId
|
|
127
|
+
} = event.nativeEvent;
|
|
128
|
+
|
|
129
|
+
if (onStoryBlockGetFeedId) {
|
|
130
|
+
onStoryBlockGetFeedId(feedId !== null && feedId !== void 0 ? feedId : '');
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
120
134
|
const generateDynamicContentParametersString = () => {
|
|
121
135
|
const {
|
|
122
136
|
dynamicContentParameters
|
|
@@ -230,12 +244,14 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
230
244
|
const ctaHighlightDelayValue = storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : (_storyBlockConfigurat5 = storyBlockConfiguration.ctaHighlightDelay) === null || _storyBlockConfigurat5 === void 0 ? void 0 : (_storyBlockConfigurat6 = _storyBlockConfigurat5.value) === null || _storyBlockConfigurat6 === void 0 ? void 0 : _storyBlockConfigurat6.toFixed(5);
|
|
231
245
|
const shareBaseURL = storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : storyBlockConfiguration.shareBaseURL;
|
|
232
246
|
const buttonConfiguration = storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : storyBlockConfiguration.buttonConfiguration;
|
|
247
|
+
const videoPlayerLogoConfigurationJsonKey = gennerateJsonKey(storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : storyBlockConfiguration.videoPlayerLogoConfiguration);
|
|
233
248
|
const ctaWidth = storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : storyBlockConfiguration.ctaWidth;
|
|
234
249
|
const showVideoDetailTitle = storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : storyBlockConfiguration.showVideoDetailTitle;
|
|
235
250
|
const requiresAds = adConfiguration === null || adConfiguration === void 0 ? void 0 : adConfiguration.requiresAds;
|
|
236
251
|
const adsFetchTimeout = adConfiguration === null || adConfiguration === void 0 ? void 0 : adConfiguration.adsFetchTimeout;
|
|
237
252
|
const vastAttributesString = generateVastAttributesString();
|
|
238
253
|
const productInfoViewConfigurationJsonKey = gennerateJsonKey(FireworkSDK.getInstance().shopping.productInfoViewConfiguration);
|
|
254
|
+
const replayBadgeConfigurationJsonKey = gennerateJsonKey(storyBlockConfiguration === null || storyBlockConfiguration === void 0 ? void 0 : storyBlockConfiguration.replayBadgeConfiguration);
|
|
239
255
|
let key = `gShareBaseURL:${gShareBaseURL}`;
|
|
240
256
|
|
|
241
257
|
if (Platform.OS === 'ios') {
|
|
@@ -279,15 +295,22 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
279
295
|
key += `_buttonConfiguration.unmuteButton:${generateButtonInfoString(buttonConfiguration === null || buttonConfiguration === void 0 ? void 0 : buttonConfiguration.unmuteButton)}`;
|
|
280
296
|
key += `_buttonConfiguration.playButton:${generateButtonInfoString(buttonConfiguration === null || buttonConfiguration === void 0 ? void 0 : buttonConfiguration.playButton)}`;
|
|
281
297
|
key += `_buttonConfiguration.pauseButton:${generateButtonInfoString(buttonConfiguration === null || buttonConfiguration === void 0 ? void 0 : buttonConfiguration.pauseButton)}`;
|
|
298
|
+
|
|
299
|
+
if (Platform.OS === 'android') {
|
|
300
|
+
key += `_videoPlayerLogoConfiguration:${videoPlayerLogoConfigurationJsonKey}`;
|
|
301
|
+
}
|
|
302
|
+
|
|
282
303
|
key += `_showVideoDetailTitle:${showVideoDetailTitle}`;
|
|
283
304
|
key += `_requiresAds:${requiresAds}`;
|
|
284
305
|
key += `_adsFetchTimeout:${adsFetchTimeout}`;
|
|
285
306
|
key += `_vastAttributes:${vastAttributesString}`;
|
|
286
|
-
key += `
|
|
307
|
+
key += `_productInfoViewConfiguration:${productInfoViewConfigurationJsonKey}`;
|
|
308
|
+
key += `_replayBadgeConfiguration:${replayBadgeConfigurationJsonKey}`;
|
|
287
309
|
return key;
|
|
288
310
|
};
|
|
289
311
|
|
|
290
312
|
const key = generateKey();
|
|
313
|
+
console.log('story block key', key);
|
|
291
314
|
useImperativeHandle(forwardedRef, () => {
|
|
292
315
|
const sendCommand = command => {
|
|
293
316
|
const nativeNodeHandle = findNodeHandle(nativeComponentRef.current);
|
|
@@ -297,7 +320,14 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
297
320
|
commandId = commandId.toString();
|
|
298
321
|
}
|
|
299
322
|
|
|
300
|
-
|
|
323
|
+
let reactTag = findNodeHandle(nativeNodeHandle);
|
|
324
|
+
FWLoggerUtil.log(`StoryBlock sendCommand: ${command} commandId: ${commandId} nativeNodeHandle: ${nativeNodeHandle} reactTag: ${reactTag}`);
|
|
325
|
+
|
|
326
|
+
if (!nativeNodeHandle || !reactTag) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
UIManager.dispatchViewManagerCommand(reactTag, commandId, []);
|
|
301
331
|
};
|
|
302
332
|
|
|
303
333
|
return {
|
|
@@ -309,6 +339,20 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
309
339
|
},
|
|
310
340
|
openFullscreen: () => {
|
|
311
341
|
sendCommand('openFullscreen');
|
|
342
|
+
},
|
|
343
|
+
onViewportEntered: () => {
|
|
344
|
+
if (Platform.OS !== 'ios') {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
sendCommand('onViewportEntered');
|
|
349
|
+
},
|
|
350
|
+
onViewportLeft: () => {
|
|
351
|
+
if (Platform.OS !== 'ios') {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
sendCommand('onViewportLeft');
|
|
312
356
|
}
|
|
313
357
|
};
|
|
314
358
|
}, []);
|
|
@@ -346,6 +390,11 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
346
390
|
setTimeout(() => {
|
|
347
391
|
const viewId = findNodeHandle(nativeComponentRef.current);
|
|
348
392
|
FWLoggerUtil.log(`StoryBlock createFragment viewId: ${viewId}`);
|
|
393
|
+
|
|
394
|
+
if (!viewId) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
|
|
349
398
|
UIManager.dispatchViewManagerCommand(viewId, UIManager.getViewManagerConfig(NativeComponentName).Commands.create.toString(), [viewId]);
|
|
350
399
|
}, 500);
|
|
351
400
|
}
|
|
@@ -378,7 +427,8 @@ const StoryBlock = (props, forwardedRef) => {
|
|
|
378
427
|
onStoryBlockLoadFinished: handleStoryBlockLoadFinished,
|
|
379
428
|
onStoryBlockEmpty: handleStoryBlockEmpty,
|
|
380
429
|
onStoryBlockDidStartPictureInPicture: handleStoryBlockDidStartPictureInPicture,
|
|
381
|
-
onStoryBlockDidStopPictureInPicture: handleStoryBlockDidStopPictureInPicture
|
|
430
|
+
onStoryBlockDidStopPictureInPicture: handleStoryBlockDidStopPictureInPicture,
|
|
431
|
+
onStoryBlockGetFeedId: handleStoryBlockGetFeedId
|
|
382
432
|
}));
|
|
383
433
|
};
|
|
384
434
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["StoryBlock.tsx"],"names":["React","forwardRef","useEffect","useImperativeHandle","useReducer","useRef","useState","findNodeHandle","Platform","UIManager","FireworkSDK","FWEventName","FireworkSDKModuleEventEmitter","FWGlobalState","FWLoggerUtil","FWStoryBlock","gennerateJsonKey","NativeComponentName","StoryBlock","props","forwardedRef","nativeComponentRef","sdkInitCalled","setSdkInitCalled","getInstance","loadedRef","forceUpdate","x","handleStoryBlockLoadFinished","event","log","nativeEvent","name","onStoryBlockLoadFinished","onStoryBlockEmpty","reason","error","current","handleStoryBlockEmpty","handleStoryBlockDidStartPictureInPicture","JSON","stringify","onStoryBlockDidStartPictureInPicture","handleStoryBlockDidStopPictureInPicture","onStoryBlockDidStopPictureInPicture","generateDynamicContentParametersString","dynamicContentParameters","resultString","sortedKeyList","Object","keys","sort","key","value","valueString","join","length","generateVastAttributesString","adConfiguration","vastAttributes","attribute","generateButtonInfoString","buttonInfo","imageName","systemImageName","tintColor","getStoryBlockConfiguration","storyBlockConfiguration","enablePictureInPicture","resultStoryBlockConfiguration","generateKey","gShareBaseURL","shareBaseURL","appLanguage","videoLaunchBehavior","adBadgeConfiguration","adBadgeTextType","badgeTextType","backgroundColorOfAdBadge","backgroundColor","textColorOfAdBadge","textColor","androidFontIsCustomOfAdBadge","androidFontInfo","isCustom","androidFontTypefaceNameOfAdBadge","typefaceName","source","channel","playlist","hashtagFilterExpression","productIds","contentId","cornerRadius","dynamicContentParametersString","playerStyle","videoCompleteAction","showShareButton","showPlaybackButton","showMuteButton","showBranding","ctaDelayType","ctaDelay","type","ctaDelayValue","toFixed","ctaHighlightDelayType","ctaHighlightDelay","ctaHighlightDelayValue","buttonConfiguration","ctaWidth","showVideoDetailTitle","requiresAds","adsFetchTimeout","vastAttributesString","productInfoViewConfigurationJsonKey","shopping","productInfoViewConfiguration","OS","videoDetailButton","closeButton","muteButton","unmuteButton","playButton","pauseButton","sendCommand","command","nativeNodeHandle","commandId","getViewManagerConfig","Commands","toString","dispatchViewManagerCommand","play","pause","openFullscreen","subscriptionOfShareBaseURLUpdated","addListener","ShareBaseURLUpdated","subscriptionOfAdBadgeConfigurationUpdated","AdBadgeConfigurationUpdated","subscriptionOfVideoLaunchBehaviorUpdated","VideoLaunchBehaviorUpdated","subscriptionOfAppLanguageUpdated","AppLanguageUpdated","subscriptionOfProductInfoViewConfigurationUpdated","ProductInfoViewConfigurationUpdated","remove","setTimeout","viewId","create","sdkInitCalledPromise","then","style","otherProps","assign","borderRadius","undefined"],"mappings":"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","sourcesContent":["import type { ForwardRefRenderFunction } from 'react';\nimport React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useReducer,\n useRef,\n useState,\n} from 'react';\n\nimport {\n findNodeHandle,\n NativeSyntheticEvent,\n Platform,\n StyleProp,\n UIManager,\n ViewStyle,\n} from 'react-native';\n\nimport FireworkSDK from '../FireworkSDK';\nimport type AdConfiguration from '../models/AdConfiguration';\nimport type FWError from '../models/FWError';\nimport { FWEventName } from '../models/FWEventName';\nimport type { StoryBlockConfiguration } from '../models/StoryBlockConfiguration';\nimport type StoryBlockNativeConfiguration from '../models/StoryBlockNativeConfiguration';\nimport type { StoryBlockSource } from '../models/StoryBlockSource';\nimport { FireworkSDKModuleEventEmitter } from '../modules/FireworkSDKModule';\nimport FWGlobalState from '../utils/FWGlobalState';\nimport FWLoggerUtil from '../utils/FWLoggerUtil';\nimport FWStoryBlock from './FWStoryBlock';\nimport type ButtonInfo from '../models/ButtonInfo';\nimport gennerateJsonKey from '../utils/FWJsonUtil';\n\nconst NativeComponentName = 'FWStoryBlock';\n\nexport interface IStoryBlockMethods {\n /**\n * Play the story block.\n */\n play: () => void;\n /**\n * Pause the story block.\n */\n pause: () => void;\n /**\n * Open the fullscreen story block.\n * Only supported on Android.\n */\n openFullscreen: () => void;\n}\n\n/**\n * The props type of StoryBlock component.\n */\nexport interface IStoryBlockProps {\n /**\n * Standard React Native View Style.\n */\n style?: StyleProp<ViewStyle>;\n /**\n * One of four available story block sources.\n */\n source: StoryBlockSource;\n /**\n * Channel id of the story block. Required when the source is set as channel or playlist or dynamicContent.\n */\n channel?: string;\n /**\n * Playlist id of the story block. Please note channel id is necessary. Required when the source is set as playlist.\n */\n playlist?: string;\n /**\n * The dynamic content parameters of the story block. Required when the source is set as dynamicContent.\n */\n dynamicContentParameters?: { [key: string]: string[] };\n /**\n * Hashtag filter expression is an s-expression used to provide feeds filtered by hashtags with specified criteria.\n * Queries are specified with boolean predicates on what hashtags are there on the video.\n * For instance, (and sport food) (or sport food) (and sport (or food comedy)) sport are all valid expressions.\n * Non-UTF-8 characters are not allowed. If using boolean predicates, the expression needs to be wrapped with parenthesis.\n */\n hashtagFilterExpression?: string;\n /**\n * Product ids used to generate the sku feed\n */\n productIds?: string[];\n /**\n * The video or live stream id.\n */\n contentId?: string;\n /**\n * Specifies if Picture in Picture is enabled. Only supported on iOS.\n */\n enablePictureInPicture?: boolean;\n /**\n * The corner radius of story block.\n */\n cornerRadius?: number;\n /**\n * Ad configuration of the feed.\n */\n adConfiguration?: AdConfiguration;\n\n /* The configuration of the story block. */\n storyBlockConfiguration?: StoryBlockConfiguration;\n /**\n * The feed loading result callback. It means loading successfully when error equals to undefined.\n */\n onStoryBlockLoadFinished?: (error?: FWError) => void;\n /**\n * The callback is triggered when there are no items in the story block.\n * The callback is triggered in the following cases:\n * 1. Loading successfully but the back end returns an empty list.\n * 2. The load failed and list is empty.\n * onStoryBlockLoadFinished will also be triggered when onStoryBlockEmpty is triggered.\n * Only supported on Android.\n */\n onStoryBlockEmpty?: (error?: FWError) => void;\n /**\n * Start Picture in Picture callback. Only supported on iOS.\n */\n onStoryBlockDidStartPictureInPicture?: (error?: FWError) => void;\n /**\n * Stop Picture in Picture callback. Only supported on iOS.\n */\n onStoryBlockDidStopPictureInPicture?: (error?: FWError) => void;\n}\n\nconst StoryBlock: ForwardRefRenderFunction<\n IStoryBlockMethods,\n IStoryBlockProps\n> = (props: IStoryBlockProps, forwardedRef) => {\n const nativeComponentRef = useRef(null);\n const [sdkInitCalled, setSdkInitCalled] = useState<boolean>(\n FWGlobalState.getInstance().sdkInitCalled\n );\n const loadedRef = useRef<boolean>(false);\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n const handleStoryBlockLoadFinished = (event: NativeSyntheticEvent<any>) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockLoadFinished ${event.nativeEvent.name}`\n );\n\n const { onStoryBlockLoadFinished, onStoryBlockEmpty } = props;\n const { name, reason } = event.nativeEvent;\n\n if (onStoryBlockLoadFinished) {\n if (name) {\n let error: FWError = { name };\n if (reason) {\n error.reason = reason;\n }\n\n onStoryBlockLoadFinished(error);\n if (!loadedRef.current) {\n onStoryBlockEmpty?.(error);\n }\n } else {\n onStoryBlockLoadFinished();\n loadedRef.current = true;\n }\n }\n };\n\n const handleStoryBlockEmpty = (event: NativeSyntheticEvent<any>) => {\n FWLoggerUtil.log(`StoryBlock handleStoryBlockEmpty ${event.nativeEvent}`);\n\n const { onStoryBlockEmpty } = props;\n\n if (onStoryBlockEmpty) {\n onStoryBlockEmpty();\n }\n };\n\n const handleStoryBlockDidStartPictureInPicture = (\n event: NativeSyntheticEvent<any>\n ) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockDidStartPictureInPicture ${JSON.stringify(\n event.nativeEvent\n )}`\n );\n const { onStoryBlockDidStartPictureInPicture } = props;\n\n const { name, reason } = event.nativeEvent;\n\n if (onStoryBlockDidStartPictureInPicture) {\n if (name) {\n if (reason) {\n onStoryBlockDidStartPictureInPicture({ name, reason });\n } else {\n onStoryBlockDidStartPictureInPicture({ name });\n }\n } else {\n onStoryBlockDidStartPictureInPicture();\n }\n }\n };\n\n const handleStoryBlockDidStopPictureInPicture = (\n event: NativeSyntheticEvent<any>\n ) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockDidStopPictureInPicture ${JSON.stringify(\n event.nativeEvent\n )}`\n );\n const { onStoryBlockDidStopPictureInPicture } = props;\n\n const { name, reason } = event.nativeEvent;\n\n if (onStoryBlockDidStopPictureInPicture) {\n if (name) {\n if (reason) {\n onStoryBlockDidStopPictureInPicture({ name, reason });\n } else {\n onStoryBlockDidStopPictureInPicture({ name });\n }\n } else {\n onStoryBlockDidStopPictureInPicture();\n }\n }\n };\n\n const generateDynamicContentParametersString = (): string => {\n const { dynamicContentParameters } = props;\n\n if (!dynamicContentParameters) {\n return '';\n }\n\n let resultString = '';\n const sortedKeyList = Object.keys(dynamicContentParameters).sort();\n for (const key of sortedKeyList) {\n const value = dynamicContentParameters[key];\n const valueString = value.join(',');\n if (resultString.length > 0) {\n resultString += '_';\n }\n\n resultString += `${key}:${valueString}`;\n }\n\n return resultString;\n };\n\n const generateVastAttributesString = () => {\n const { adConfiguration } = props;\n const vastAttributes = adConfiguration?.vastAttributes;\n if (!vastAttributes) {\n return '';\n }\n\n let resultString = '';\n for (const attribute of vastAttributes) {\n if (resultString.length > 0) {\n resultString += '_';\n }\n resultString += `${attribute.name ?? ''}:${attribute.value}`;\n }\n\n return resultString;\n };\n\n const generateButtonInfoString = (buttonInfo?: ButtonInfo) => {\n return `imageName:${buttonInfo?.imageName}_systemImageName:${buttonInfo?.systemImageName}_tintColor:${buttonInfo?.tintColor}`;\n };\n\n const getStoryBlockConfiguration: () =>\n | StoryBlockNativeConfiguration\n | undefined = () => {\n const { storyBlockConfiguration, enablePictureInPicture } = props;\n let resultStoryBlockConfiguration:\n | StoryBlockNativeConfiguration\n | undefined = storyBlockConfiguration;\n if (typeof enablePictureInPicture === 'boolean') {\n if (!resultStoryBlockConfiguration) {\n resultStoryBlockConfiguration = {};\n }\n resultStoryBlockConfiguration = {\n ...resultStoryBlockConfiguration,\n enablePictureInPicture,\n };\n }\n return resultStoryBlockConfiguration;\n };\n const storyBlockConfiguration = getStoryBlockConfiguration();\n\n const generateKey = (): string => {\n const gShareBaseURL = FireworkSDK.getInstance().shareBaseURL;\n const appLanguage = FireworkSDK.getInstance().appLanguage;\n const videoLaunchBehavior = FireworkSDK.getInstance().videoLaunchBehavior;\n const adBadgeConfiguration = FireworkSDK.getInstance().adBadgeConfiguration;\n const adBadgeTextType = adBadgeConfiguration?.badgeTextType;\n const backgroundColorOfAdBadge = adBadgeConfiguration?.backgroundColor;\n const textColorOfAdBadge = adBadgeConfiguration?.textColor;\n const androidFontIsCustomOfAdBadge =\n adBadgeConfiguration?.androidFontInfo?.isCustom;\n const androidFontTypefaceNameOfAdBadge =\n adBadgeConfiguration?.androidFontInfo?.typefaceName;\n\n const {\n source,\n channel,\n playlist,\n hashtagFilterExpression,\n productIds,\n contentId,\n enablePictureInPicture,\n cornerRadius,\n adConfiguration,\n } = props;\n const dynamicContentParametersString =\n generateDynamicContentParametersString();\n\n const playerStyle = storyBlockConfiguration?.playerStyle;\n const videoCompleteAction = storyBlockConfiguration?.videoCompleteAction;\n const showShareButton = storyBlockConfiguration?.showShareButton;\n const showPlaybackButton = storyBlockConfiguration?.showPlaybackButton;\n const showMuteButton = storyBlockConfiguration?.showMuteButton;\n const showBranding = storyBlockConfiguration?.showBranding;\n const ctaDelayType = storyBlockConfiguration?.ctaDelay?.type;\n const ctaDelayValue = storyBlockConfiguration?.ctaDelay?.value?.toFixed(5);\n const ctaHighlightDelayType =\n storyBlockConfiguration?.ctaHighlightDelay?.type;\n const ctaHighlightDelayValue =\n storyBlockConfiguration?.ctaHighlightDelay?.value?.toFixed(5);\n const shareBaseURL = storyBlockConfiguration?.shareBaseURL;\n const buttonConfiguration = storyBlockConfiguration?.buttonConfiguration;\n const ctaWidth = storyBlockConfiguration?.ctaWidth;\n const showVideoDetailTitle = storyBlockConfiguration?.showVideoDetailTitle;\n\n const requiresAds = adConfiguration?.requiresAds;\n const adsFetchTimeout = adConfiguration?.adsFetchTimeout;\n const vastAttributesString = generateVastAttributesString();\n const productInfoViewConfigurationJsonKey = gennerateJsonKey(\n FireworkSDK.getInstance().shopping.productInfoViewConfiguration\n );\n\n let key = `gShareBaseURL:${gShareBaseURL}`;\n if (Platform.OS === 'ios') {\n key += `_appLanguage:${appLanguage}`;\n }\n key += `_videoLaunchBehavior:${videoLaunchBehavior}`;\n key += `_adBadgeTextType:${adBadgeTextType}`;\n key += `_backgroundColorOfAdBadge:${backgroundColorOfAdBadge}`;\n key += `_textColorOfAdBadge:${textColorOfAdBadge}`;\n if (Platform.OS === 'android') {\n key += `_androidFontIsCustomOfAdBadge${androidFontIsCustomOfAdBadge}`;\n key += `_androidFontTypefaceNameOfAdBadge${androidFontTypefaceNameOfAdBadge}`;\n }\n\n key += `_source:${source}`;\n key += `_channel:${channel}`;\n key += `_playlist:${playlist}`;\n key += `_dynamicContentParameters:${dynamicContentParametersString}`;\n key += `_hashtagFilterExpression:${hashtagFilterExpression}`;\n key += `productIds:${productIds?.join(',')}`;\n key += `_contentId:${contentId}`;\n key += `_enablePictureInPicture:${enablePictureInPicture}`;\n key += `_cornerRadius:${cornerRadius}`;\n\n key += `_shareBaseURL:${shareBaseURL}`;\n key += `_playerStyle:${playerStyle}`;\n key += `_videoCompleteAction:${videoCompleteAction}`;\n key += `_showShareButton:${showShareButton}`;\n key += `_showPlaybackButton:${showPlaybackButton}`;\n key += `_showMuteButton:${showMuteButton}`;\n key += `_showBranding:${showBranding}`;\n key += `_ctaDelayType:${ctaDelayType}`;\n key += `_ctaDelayValue:${ctaDelayValue}`;\n key += `_ctaHighlightDelayType:${ctaHighlightDelayType}`;\n key += `_ctaHighlightDelayValue:${ctaHighlightDelayValue}`;\n key += `_ctaWidth:${ctaWidth}`;\n key += `_buttonConfiguration.videoDetailButton:${generateButtonInfoString(\n buttonConfiguration?.videoDetailButton\n )}`;\n key += `_buttonConfiguration.closeButton:${generateButtonInfoString(\n buttonConfiguration?.closeButton\n )}`;\n key += `_buttonConfiguration.muteButton:${generateButtonInfoString(\n buttonConfiguration?.muteButton\n )}`;\n key += `_buttonConfiguration.unmuteButton:${generateButtonInfoString(\n buttonConfiguration?.unmuteButton\n )}`;\n key += `_buttonConfiguration.playButton:${generateButtonInfoString(\n buttonConfiguration?.playButton\n )}`;\n key += `_buttonConfiguration.pauseButton:${generateButtonInfoString(\n buttonConfiguration?.pauseButton\n )}`;\n key += `_showVideoDetailTitle:${showVideoDetailTitle}`;\n\n key += `_requiresAds:${requiresAds}`;\n key += `_adsFetchTimeout:${adsFetchTimeout}`;\n key += `_vastAttributes:${vastAttributesString}`;\n key += `_productInfoViewConfigurationJsonKey:${productInfoViewConfigurationJsonKey}`;\n\n return key;\n };\n\n const key = generateKey();\n\n useImperativeHandle(\n forwardedRef,\n () => {\n const sendCommand = (command: string) => {\n const nativeNodeHandle = findNodeHandle(nativeComponentRef.current);\n\n let commandId: string | number =\n UIManager.getViewManagerConfig(NativeComponentName).Commands[command];\n if (Platform.OS === 'android') {\n commandId = commandId.toString();\n }\n\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(nativeNodeHandle),\n commandId,\n []\n );\n };\n return {\n play: () => {\n sendCommand('play');\n },\n pause: () => {\n sendCommand('pause');\n },\n openFullscreen: () => {\n sendCommand('openFullscreen');\n },\n };\n },\n []\n );\n\n useEffect(() => {\n const subscriptionOfShareBaseURLUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.ShareBaseURLUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.ShareBaseURLUpdated');\n forceUpdate();\n }\n );\n const subscriptionOfAdBadgeConfigurationUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.AdBadgeConfigurationUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.AdBadgeConfigurationUpdated');\n forceUpdate();\n }\n );\n\n const subscriptionOfVideoLaunchBehaviorUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.VideoLaunchBehaviorUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.VideoLaunchBehaviorUpdated');\n forceUpdate();\n }\n );\n\n const subscriptionOfAppLanguageUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.AppLanguageUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.AppLanguageUpdated');\n forceUpdate();\n }\n );\n\n const subscriptionOfProductInfoViewConfigurationUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.ProductInfoViewConfigurationUpdated,\n () => {\n FWLoggerUtil.log(\n 'Receive FWEventName.ProductInfoViewConfigurationUpdated'\n );\n forceUpdate();\n }\n );\n\n return () => {\n subscriptionOfShareBaseURLUpdated.remove();\n subscriptionOfAdBadgeConfigurationUpdated.remove();\n subscriptionOfVideoLaunchBehaviorUpdated.remove();\n subscriptionOfAppLanguageUpdated.remove();\n subscriptionOfProductInfoViewConfigurationUpdated.remove();\n };\n }, []);\n\n useEffect(() => {\n if (Platform.OS === 'android') {\n setTimeout(() => {\n const viewId = findNodeHandle(nativeComponentRef.current);\n FWLoggerUtil.log(`StoryBlock createFragment viewId: ${viewId}`);\n UIManager.dispatchViewManagerCommand(\n viewId,\n UIManager.getViewManagerConfig(\n NativeComponentName\n ).Commands.create.toString(),\n [viewId]\n );\n }, 500);\n }\n }, [key]);\n\n useEffect(() => {\n FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {\n setSdkInitCalled(true);\n });\n }, []);\n\n if (!sdkInitCalled) {\n return null;\n }\n const { style, cornerRadius, ...otherProps } = props;\n return (\n <FWStoryBlock\n ref={nativeComponentRef}\n key={key}\n {...otherProps}\n cornerRadius={cornerRadius}\n style={Object.assign({ borderRadius: cornerRadius }, style)}\n storyBlockConfiguration={storyBlockConfiguration}\n enablePictureInPicture={undefined}\n onStoryBlockLoadFinished={handleStoryBlockLoadFinished}\n onStoryBlockEmpty={handleStoryBlockEmpty}\n onStoryBlockDidStartPictureInPicture={\n handleStoryBlockDidStartPictureInPicture\n }\n onStoryBlockDidStopPictureInPicture={\n handleStoryBlockDidStopPictureInPicture\n }\n />\n );\n};\n\nexport default forwardRef(StoryBlock);\n"]}
|
|
1
|
+
{"version":3,"sources":["StoryBlock.tsx"],"names":["React","forwardRef","useEffect","useImperativeHandle","useReducer","useRef","useState","findNodeHandle","Platform","UIManager","FireworkSDK","FWEventName","FireworkSDKModuleEventEmitter","FWGlobalState","FWLoggerUtil","FWStoryBlock","gennerateJsonKey","NativeComponentName","StoryBlock","props","forwardedRef","nativeComponentRef","sdkInitCalled","setSdkInitCalled","getInstance","loadedRef","forceUpdate","x","handleStoryBlockLoadFinished","event","log","nativeEvent","name","onStoryBlockLoadFinished","onStoryBlockEmpty","reason","error","current","handleStoryBlockEmpty","handleStoryBlockDidStartPictureInPicture","JSON","stringify","onStoryBlockDidStartPictureInPicture","handleStoryBlockDidStopPictureInPicture","onStoryBlockDidStopPictureInPicture","handleStoryBlockGetFeedId","onStoryBlockGetFeedId","feedId","generateDynamicContentParametersString","dynamicContentParameters","resultString","sortedKeyList","Object","keys","sort","key","value","valueString","join","length","generateVastAttributesString","adConfiguration","vastAttributes","attribute","generateButtonInfoString","buttonInfo","imageName","systemImageName","tintColor","getStoryBlockConfiguration","storyBlockConfiguration","enablePictureInPicture","resultStoryBlockConfiguration","generateKey","gShareBaseURL","shareBaseURL","appLanguage","videoLaunchBehavior","adBadgeConfiguration","adBadgeTextType","badgeTextType","backgroundColorOfAdBadge","backgroundColor","textColorOfAdBadge","textColor","androidFontIsCustomOfAdBadge","androidFontInfo","isCustom","androidFontTypefaceNameOfAdBadge","typefaceName","source","channel","playlist","hashtagFilterExpression","productIds","contentId","cornerRadius","dynamicContentParametersString","playerStyle","videoCompleteAction","showShareButton","showPlaybackButton","showMuteButton","showBranding","ctaDelayType","ctaDelay","type","ctaDelayValue","toFixed","ctaHighlightDelayType","ctaHighlightDelay","ctaHighlightDelayValue","buttonConfiguration","videoPlayerLogoConfigurationJsonKey","videoPlayerLogoConfiguration","ctaWidth","showVideoDetailTitle","requiresAds","adsFetchTimeout","vastAttributesString","productInfoViewConfigurationJsonKey","shopping","productInfoViewConfiguration","replayBadgeConfigurationJsonKey","replayBadgeConfiguration","OS","videoDetailButton","closeButton","muteButton","unmuteButton","playButton","pauseButton","console","sendCommand","command","nativeNodeHandle","commandId","getViewManagerConfig","Commands","toString","reactTag","dispatchViewManagerCommand","play","pause","openFullscreen","onViewportEntered","onViewportLeft","subscriptionOfShareBaseURLUpdated","addListener","ShareBaseURLUpdated","subscriptionOfAdBadgeConfigurationUpdated","AdBadgeConfigurationUpdated","subscriptionOfVideoLaunchBehaviorUpdated","VideoLaunchBehaviorUpdated","subscriptionOfAppLanguageUpdated","AppLanguageUpdated","subscriptionOfProductInfoViewConfigurationUpdated","ProductInfoViewConfigurationUpdated","remove","setTimeout","viewId","create","sdkInitCalledPromise","then","style","otherProps","assign","borderRadius","undefined"],"mappings":"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","sourcesContent":["import type { ForwardRefRenderFunction } from 'react';\nimport React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useReducer,\n useRef,\n useState,\n} from 'react';\n\nimport {\n findNodeHandle,\n NativeSyntheticEvent,\n Platform,\n StyleProp,\n UIManager,\n ViewStyle,\n} from 'react-native';\n\nimport FireworkSDK from '../FireworkSDK';\nimport type AdConfiguration from '../models/AdConfiguration';\nimport type FWError from '../models/FWError';\nimport { FWEventName } from '../models/FWEventName';\nimport type { StoryBlockConfiguration } from '../models/StoryBlockConfiguration';\nimport type StoryBlockNativeConfiguration from '../models/StoryBlockNativeConfiguration';\nimport type { StoryBlockSource } from '../models/StoryBlockSource';\nimport { FireworkSDKModuleEventEmitter } from '../modules/FireworkSDKModule';\nimport FWGlobalState from '../utils/FWGlobalState';\nimport FWLoggerUtil from '../utils/FWLoggerUtil';\nimport FWStoryBlock from './FWStoryBlock';\nimport type ButtonInfo from '../models/ButtonInfo';\nimport gennerateJsonKey from '../utils/FWJsonUtil';\n\nconst NativeComponentName = 'FWStoryBlock';\n\nexport interface IStoryBlockMethods {\n /**\n * Play the story block.\n */\n play: () => void;\n /**\n * Pause the story block.\n */\n pause: () => void;\n /**\n * Open the fullscreen story block.\n * Only supported on Android.\n */\n openFullscreen: () => void;\n /**\n * Triggered when the story block enters the viewport.\n * Only supported on iOS.\n * It is recommended that the host app is triggered when listening for scrolling.\n */\n onViewportEntered: () => void;\n /**\n * Triggered when the story block leaves the viewport.\n * Only supported on iOS.\n * It is recommended that the host app is triggered when listening for scrolling.\n */\n onViewportLeft: () => void;\n}\n\n/**\n * The props type of StoryBlock component.\n */\nexport interface IStoryBlockProps {\n /**\n * Standard React Native View Style.\n */\n style?: StyleProp<ViewStyle>;\n /**\n * One of four available story block sources.\n */\n source: StoryBlockSource;\n /**\n * Channel id of the story block. Required when the source is set as channel or playlist or dynamicContent.\n */\n channel?: string;\n /**\n * Playlist id of the story block. Please note channel id is necessary. Required when the source is set as playlist.\n */\n playlist?: string;\n /**\n * The dynamic content parameters of the story block. Required when the source is set as dynamicContent.\n */\n dynamicContentParameters?: { [key: string]: string[] };\n /**\n * Hashtag filter expression is an s-expression used to provide feeds filtered by hashtags with specified criteria.\n * Queries are specified with boolean predicates on what hashtags are there on the video.\n * For instance, (and sport food) (or sport food) (and sport (or food comedy)) sport are all valid expressions.\n * Non-UTF-8 characters are not allowed. If using boolean predicates, the expression needs to be wrapped with parenthesis.\n */\n hashtagFilterExpression?: string;\n /**\n * Product ids used to generate the sku feed\n */\n productIds?: string[];\n /**\n * The video or live stream id.\n */\n contentId?: string;\n /**\n * Specifies if Picture in Picture is enabled. Only supported on iOS.\n */\n enablePictureInPicture?: boolean;\n /**\n * The corner radius of story block.\n */\n cornerRadius?: number;\n /**\n * Ad configuration of the feed.\n */\n adConfiguration?: AdConfiguration;\n\n /* The configuration of the story block. */\n storyBlockConfiguration?: StoryBlockConfiguration;\n /**\n * The feed loading result callback. It means loading successfully when error equals to undefined.\n */\n onStoryBlockLoadFinished?: (error?: FWError) => void;\n /**\n * The callback is triggered when there are no items in the story block.\n * The callback is triggered in the following cases:\n * 1. Loading successfully but the back end returns an empty list.\n * 2. The load failed and list is empty.\n * onStoryBlockLoadFinished will also be triggered when onStoryBlockEmpty is triggered.\n */\n onStoryBlockEmpty?: (error?: FWError) => void;\n /**\n * Start Picture in Picture callback. Only supported on iOS.\n */\n onStoryBlockDidStartPictureInPicture?: (error?: FWError) => void;\n /**\n * Stop Picture in Picture callback. Only supported on iOS.\n */\n onStoryBlockDidStopPictureInPicture?: (error?: FWError) => void;\n /**\n *\n * The host app could use this callback to get feed id.\n * The feed id can be used for conversion tracking.\n */\n onStoryBlockGetFeedId?: (feedId: string) => void;\n}\n\nconst StoryBlock: ForwardRefRenderFunction<\n IStoryBlockMethods,\n IStoryBlockProps\n> = (props: IStoryBlockProps, forwardedRef) => {\n const nativeComponentRef = useRef(null);\n const [sdkInitCalled, setSdkInitCalled] = useState<boolean>(\n FWGlobalState.getInstance().sdkInitCalled\n );\n const loadedRef = useRef<boolean>(false);\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n const handleStoryBlockLoadFinished = (event: NativeSyntheticEvent<any>) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockLoadFinished ${event.nativeEvent.name}`\n );\n\n const { onStoryBlockLoadFinished, onStoryBlockEmpty } = props;\n const { name, reason } = event.nativeEvent;\n\n if (onStoryBlockLoadFinished) {\n if (name) {\n let error: FWError = { name };\n if (reason) {\n error.reason = reason;\n }\n\n onStoryBlockLoadFinished(error);\n if (!loadedRef.current) {\n onStoryBlockEmpty?.(error);\n }\n } else {\n onStoryBlockLoadFinished();\n loadedRef.current = true;\n }\n }\n };\n\n const handleStoryBlockEmpty = (event: NativeSyntheticEvent<any>) => {\n FWLoggerUtil.log(`StoryBlock handleStoryBlockEmpty ${event.nativeEvent}`);\n\n const { onStoryBlockEmpty } = props;\n\n if (onStoryBlockEmpty) {\n onStoryBlockEmpty();\n }\n };\n\n const handleStoryBlockDidStartPictureInPicture = (\n event: NativeSyntheticEvent<any>\n ) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockDidStartPictureInPicture ${JSON.stringify(\n event.nativeEvent\n )}`\n );\n const { onStoryBlockDidStartPictureInPicture } = props;\n\n const { name, reason } = event.nativeEvent;\n\n if (onStoryBlockDidStartPictureInPicture) {\n if (name) {\n if (reason) {\n onStoryBlockDidStartPictureInPicture({ name, reason });\n } else {\n onStoryBlockDidStartPictureInPicture({ name });\n }\n } else {\n onStoryBlockDidStartPictureInPicture();\n }\n }\n };\n\n const handleStoryBlockDidStopPictureInPicture = (\n event: NativeSyntheticEvent<any>\n ) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockDidStopPictureInPicture ${JSON.stringify(\n event.nativeEvent\n )}`\n );\n const { onStoryBlockDidStopPictureInPicture } = props;\n\n const { name, reason } = event.nativeEvent;\n\n if (onStoryBlockDidStopPictureInPicture) {\n if (name) {\n if (reason) {\n onStoryBlockDidStopPictureInPicture({ name, reason });\n } else {\n onStoryBlockDidStopPictureInPicture({ name });\n }\n } else {\n onStoryBlockDidStopPictureInPicture();\n }\n }\n };\n\n const handleStoryBlockGetFeedId = (event: NativeSyntheticEvent<any>) => {\n FWLoggerUtil.log(\n `StoryBlock handleStoryBlockGetFeedId ${JSON.stringify(\n event.nativeEvent\n )}`\n );\n const { onStoryBlockGetFeedId } = props;\n\n const { feedId } = event.nativeEvent;\n\n if (onStoryBlockGetFeedId) {\n onStoryBlockGetFeedId(feedId ?? '');\n }\n };\n\n const generateDynamicContentParametersString = (): string => {\n const { dynamicContentParameters } = props;\n\n if (!dynamicContentParameters) {\n return '';\n }\n\n let resultString = '';\n const sortedKeyList = Object.keys(dynamicContentParameters).sort();\n for (const key of sortedKeyList) {\n const value = dynamicContentParameters[key];\n const valueString = value.join(',');\n if (resultString.length > 0) {\n resultString += '_';\n }\n\n resultString += `${key}:${valueString}`;\n }\n\n return resultString;\n };\n\n const generateVastAttributesString = () => {\n const { adConfiguration } = props;\n const vastAttributes = adConfiguration?.vastAttributes;\n if (!vastAttributes) {\n return '';\n }\n\n let resultString = '';\n for (const attribute of vastAttributes) {\n if (resultString.length > 0) {\n resultString += '_';\n }\n resultString += `${attribute.name ?? ''}:${attribute.value}`;\n }\n\n return resultString;\n };\n\n const generateButtonInfoString = (buttonInfo?: ButtonInfo) => {\n return `imageName:${buttonInfo?.imageName}_systemImageName:${buttonInfo?.systemImageName}_tintColor:${buttonInfo?.tintColor}`;\n };\n\n const getStoryBlockConfiguration: () =>\n | StoryBlockNativeConfiguration\n | undefined = () => {\n const { storyBlockConfiguration, enablePictureInPicture } = props;\n let resultStoryBlockConfiguration:\n | StoryBlockNativeConfiguration\n | undefined = storyBlockConfiguration;\n if (typeof enablePictureInPicture === 'boolean') {\n if (!resultStoryBlockConfiguration) {\n resultStoryBlockConfiguration = {};\n }\n resultStoryBlockConfiguration = {\n ...resultStoryBlockConfiguration,\n enablePictureInPicture,\n };\n }\n return resultStoryBlockConfiguration;\n };\n const storyBlockConfiguration = getStoryBlockConfiguration();\n\n const generateKey = (): string => {\n const gShareBaseURL = FireworkSDK.getInstance().shareBaseURL;\n const appLanguage = FireworkSDK.getInstance().appLanguage;\n const videoLaunchBehavior = FireworkSDK.getInstance().videoLaunchBehavior;\n const adBadgeConfiguration = FireworkSDK.getInstance().adBadgeConfiguration;\n const adBadgeTextType = adBadgeConfiguration?.badgeTextType;\n const backgroundColorOfAdBadge = adBadgeConfiguration?.backgroundColor;\n const textColorOfAdBadge = adBadgeConfiguration?.textColor;\n const androidFontIsCustomOfAdBadge =\n adBadgeConfiguration?.androidFontInfo?.isCustom;\n const androidFontTypefaceNameOfAdBadge =\n adBadgeConfiguration?.androidFontInfo?.typefaceName;\n\n const {\n source,\n channel,\n playlist,\n hashtagFilterExpression,\n productIds,\n contentId,\n enablePictureInPicture,\n cornerRadius,\n adConfiguration,\n } = props;\n const dynamicContentParametersString =\n generateDynamicContentParametersString();\n\n const playerStyle = storyBlockConfiguration?.playerStyle;\n const videoCompleteAction = storyBlockConfiguration?.videoCompleteAction;\n const showShareButton = storyBlockConfiguration?.showShareButton;\n const showPlaybackButton = storyBlockConfiguration?.showPlaybackButton;\n const showMuteButton = storyBlockConfiguration?.showMuteButton;\n const showBranding = storyBlockConfiguration?.showBranding;\n const ctaDelayType = storyBlockConfiguration?.ctaDelay?.type;\n const ctaDelayValue = storyBlockConfiguration?.ctaDelay?.value?.toFixed(5);\n const ctaHighlightDelayType =\n storyBlockConfiguration?.ctaHighlightDelay?.type;\n const ctaHighlightDelayValue =\n storyBlockConfiguration?.ctaHighlightDelay?.value?.toFixed(5);\n const shareBaseURL = storyBlockConfiguration?.shareBaseURL;\n const buttonConfiguration = storyBlockConfiguration?.buttonConfiguration;\n const videoPlayerLogoConfigurationJsonKey = gennerateJsonKey(\n storyBlockConfiguration?.videoPlayerLogoConfiguration\n );\n const ctaWidth = storyBlockConfiguration?.ctaWidth;\n const showVideoDetailTitle = storyBlockConfiguration?.showVideoDetailTitle;\n\n const requiresAds = adConfiguration?.requiresAds;\n const adsFetchTimeout = adConfiguration?.adsFetchTimeout;\n const vastAttributesString = generateVastAttributesString();\n const productInfoViewConfigurationJsonKey = gennerateJsonKey(\n FireworkSDK.getInstance().shopping.productInfoViewConfiguration\n );\n const replayBadgeConfigurationJsonKey = gennerateJsonKey(\n storyBlockConfiguration?.replayBadgeConfiguration\n );\n\n let key = `gShareBaseURL:${gShareBaseURL}`;\n if (Platform.OS === 'ios') {\n key += `_appLanguage:${appLanguage}`;\n }\n key += `_videoLaunchBehavior:${videoLaunchBehavior}`;\n key += `_adBadgeTextType:${adBadgeTextType}`;\n key += `_backgroundColorOfAdBadge:${backgroundColorOfAdBadge}`;\n key += `_textColorOfAdBadge:${textColorOfAdBadge}`;\n if (Platform.OS === 'android') {\n key += `_androidFontIsCustomOfAdBadge${androidFontIsCustomOfAdBadge}`;\n key += `_androidFontTypefaceNameOfAdBadge${androidFontTypefaceNameOfAdBadge}`;\n }\n\n key += `_source:${source}`;\n key += `_channel:${channel}`;\n key += `_playlist:${playlist}`;\n key += `_dynamicContentParameters:${dynamicContentParametersString}`;\n key += `_hashtagFilterExpression:${hashtagFilterExpression}`;\n key += `productIds:${productIds?.join(',')}`;\n key += `_contentId:${contentId}`;\n key += `_enablePictureInPicture:${enablePictureInPicture}`;\n key += `_cornerRadius:${cornerRadius}`;\n\n key += `_shareBaseURL:${shareBaseURL}`;\n key += `_playerStyle:${playerStyle}`;\n key += `_videoCompleteAction:${videoCompleteAction}`;\n key += `_showShareButton:${showShareButton}`;\n key += `_showPlaybackButton:${showPlaybackButton}`;\n key += `_showMuteButton:${showMuteButton}`;\n key += `_showBranding:${showBranding}`;\n key += `_ctaDelayType:${ctaDelayType}`;\n key += `_ctaDelayValue:${ctaDelayValue}`;\n key += `_ctaHighlightDelayType:${ctaHighlightDelayType}`;\n key += `_ctaHighlightDelayValue:${ctaHighlightDelayValue}`;\n key += `_ctaWidth:${ctaWidth}`;\n key += `_buttonConfiguration.videoDetailButton:${generateButtonInfoString(\n buttonConfiguration?.videoDetailButton\n )}`;\n key += `_buttonConfiguration.closeButton:${generateButtonInfoString(\n buttonConfiguration?.closeButton\n )}`;\n key += `_buttonConfiguration.muteButton:${generateButtonInfoString(\n buttonConfiguration?.muteButton\n )}`;\n key += `_buttonConfiguration.unmuteButton:${generateButtonInfoString(\n buttonConfiguration?.unmuteButton\n )}`;\n key += `_buttonConfiguration.playButton:${generateButtonInfoString(\n buttonConfiguration?.playButton\n )}`;\n key += `_buttonConfiguration.pauseButton:${generateButtonInfoString(\n buttonConfiguration?.pauseButton\n )}`;\n if (Platform.OS === 'android') {\n key += `_videoPlayerLogoConfiguration:${videoPlayerLogoConfigurationJsonKey}`;\n }\n key += `_showVideoDetailTitle:${showVideoDetailTitle}`;\n\n key += `_requiresAds:${requiresAds}`;\n key += `_adsFetchTimeout:${adsFetchTimeout}`;\n key += `_vastAttributes:${vastAttributesString}`;\n key += `_productInfoViewConfiguration:${productInfoViewConfigurationJsonKey}`;\n key += `_replayBadgeConfiguration:${replayBadgeConfigurationJsonKey}`;\n\n return key;\n };\n\n const key = generateKey();\n\n console.log('story block key', key);\n\n useImperativeHandle(\n forwardedRef,\n () => {\n const sendCommand = (command: string) => {\n const nativeNodeHandle = findNodeHandle(nativeComponentRef.current);\n\n let commandId: string | number =\n UIManager.getViewManagerConfig(NativeComponentName).Commands[command];\n if (Platform.OS === 'android') {\n commandId = commandId.toString();\n }\n let reactTag: number | null = findNodeHandle(nativeNodeHandle);\n FWLoggerUtil.log(\n `StoryBlock sendCommand: ${command} commandId: ${commandId} nativeNodeHandle: ${nativeNodeHandle} reactTag: ${reactTag}`\n );\n if (!nativeNodeHandle || !reactTag) {\n return;\n }\n UIManager.dispatchViewManagerCommand(reactTag, commandId, []);\n };\n return {\n play: () => {\n sendCommand('play');\n },\n pause: () => {\n sendCommand('pause');\n },\n openFullscreen: () => {\n sendCommand('openFullscreen');\n },\n onViewportEntered: () => {\n if (Platform.OS !== 'ios') {\n return;\n }\n sendCommand('onViewportEntered');\n },\n onViewportLeft: () => {\n if (Platform.OS !== 'ios') {\n return;\n }\n sendCommand('onViewportLeft');\n },\n };\n },\n []\n );\n\n useEffect(() => {\n const subscriptionOfShareBaseURLUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.ShareBaseURLUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.ShareBaseURLUpdated');\n forceUpdate();\n }\n );\n const subscriptionOfAdBadgeConfigurationUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.AdBadgeConfigurationUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.AdBadgeConfigurationUpdated');\n forceUpdate();\n }\n );\n\n const subscriptionOfVideoLaunchBehaviorUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.VideoLaunchBehaviorUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.VideoLaunchBehaviorUpdated');\n forceUpdate();\n }\n );\n\n const subscriptionOfAppLanguageUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.AppLanguageUpdated,\n () => {\n FWLoggerUtil.log('Receive FWEventName.AppLanguageUpdated');\n forceUpdate();\n }\n );\n\n const subscriptionOfProductInfoViewConfigurationUpdated =\n FireworkSDKModuleEventEmitter.addListener(\n FWEventName.ProductInfoViewConfigurationUpdated,\n () => {\n FWLoggerUtil.log(\n 'Receive FWEventName.ProductInfoViewConfigurationUpdated'\n );\n forceUpdate();\n }\n );\n\n return () => {\n subscriptionOfShareBaseURLUpdated.remove();\n subscriptionOfAdBadgeConfigurationUpdated.remove();\n subscriptionOfVideoLaunchBehaviorUpdated.remove();\n subscriptionOfAppLanguageUpdated.remove();\n subscriptionOfProductInfoViewConfigurationUpdated.remove();\n };\n }, []);\n\n useEffect(() => {\n if (Platform.OS === 'android') {\n setTimeout(() => {\n const viewId = findNodeHandle(nativeComponentRef.current);\n FWLoggerUtil.log(`StoryBlock createFragment viewId: ${viewId}`);\n if (!viewId) {\n return;\n }\n UIManager.dispatchViewManagerCommand(\n viewId,\n UIManager.getViewManagerConfig(\n NativeComponentName\n ).Commands.create.toString(),\n [viewId]\n );\n }, 500);\n }\n }, [key]);\n\n useEffect(() => {\n FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {\n setSdkInitCalled(true);\n });\n }, []);\n\n if (!sdkInitCalled) {\n return null;\n }\n const { style, cornerRadius, ...otherProps } = props;\n return (\n <FWStoryBlock\n ref={nativeComponentRef}\n key={key}\n {...otherProps}\n cornerRadius={cornerRadius}\n style={Object.assign({ borderRadius: cornerRadius }, style)}\n storyBlockConfiguration={storyBlockConfiguration}\n enablePictureInPicture={undefined}\n onStoryBlockLoadFinished={handleStoryBlockLoadFinished}\n onStoryBlockEmpty={handleStoryBlockEmpty}\n onStoryBlockDidStartPictureInPicture={\n handleStoryBlockDidStartPictureInPicture\n }\n onStoryBlockDidStopPictureInPicture={\n handleStoryBlockDidStopPictureInPicture\n }\n onStoryBlockGetFeedId={handleStoryBlockGetFeedId}\n />\n );\n};\n\nexport default forwardRef(StoryBlock);\n"]}
|
|
@@ -6,8 +6,10 @@ import React from 'react';
|
|
|
6
6
|
import { findNodeHandle, Platform, UIManager } from 'react-native';
|
|
7
7
|
import FireworkSDK from '../FireworkSDK';
|
|
8
8
|
import { FWEventName } from '../models/FWEventName';
|
|
9
|
+
import { FWNativeErrorAction } from '../models/FWNativeErrorAction';
|
|
9
10
|
import { FireworkSDKModuleEventEmitter } from '../modules/FireworkSDKModule';
|
|
10
11
|
import FWGlobalState from '../utils/FWGlobalState';
|
|
12
|
+
import gennerateJsonKey from '../utils/FWJsonUtil';
|
|
11
13
|
import FWLoggerUtil from '../utils/FWLoggerUtil';
|
|
12
14
|
import FWVideoFeed from './FWVideoFeed';
|
|
13
15
|
const NativeComponentName = 'FWVideoFeed';
|
|
@@ -37,7 +39,14 @@ class VideoFeed extends React.Component {
|
|
|
37
39
|
commandId = commandId.toString();
|
|
38
40
|
}
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
let reactTag = findNodeHandle(nativeNodeHandle);
|
|
43
|
+
FWLoggerUtil.log(`StoryBlock refresh commandId: ${commandId} nativeNodeHandle: ${nativeNodeHandle} reactTag: ${reactTag}`);
|
|
44
|
+
|
|
45
|
+
if (!nativeNodeHandle || !reactTag) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
UIManager.dispatchViewManagerCommand(reactTag, commandId, []);
|
|
41
50
|
});
|
|
42
51
|
|
|
43
52
|
_defineProperty(this, "_onVideoFeedLoadFinished", event => {
|
|
@@ -48,7 +57,8 @@ class VideoFeed extends React.Component {
|
|
|
48
57
|
} = this.props;
|
|
49
58
|
const {
|
|
50
59
|
name,
|
|
51
|
-
reason
|
|
60
|
+
reason,
|
|
61
|
+
action
|
|
52
62
|
} = event.nativeEvent;
|
|
53
63
|
|
|
54
64
|
if (onVideoFeedLoadFinished) {
|
|
@@ -63,8 +73,14 @@ class VideoFeed extends React.Component {
|
|
|
63
73
|
|
|
64
74
|
onVideoFeedLoadFinished(error);
|
|
65
75
|
|
|
66
|
-
if (
|
|
67
|
-
|
|
76
|
+
if (Platform.OS === 'android') {
|
|
77
|
+
if (action === FWNativeErrorAction.loadingFirstPage || !this._loaded) {
|
|
78
|
+
onVideoFeedEmpty === null || onVideoFeedEmpty === void 0 ? void 0 : onVideoFeedEmpty(error);
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
if (!this._loaded) {
|
|
82
|
+
onVideoFeedEmpty === null || onVideoFeedEmpty === void 0 ? void 0 : onVideoFeedEmpty(error);
|
|
83
|
+
}
|
|
68
84
|
}
|
|
69
85
|
} else {
|
|
70
86
|
onVideoFeedLoadFinished();
|
|
@@ -140,6 +156,20 @@ class VideoFeed extends React.Component {
|
|
|
140
156
|
}
|
|
141
157
|
});
|
|
142
158
|
|
|
159
|
+
_defineProperty(this, "_onVideoFeedGetFeedId", event => {
|
|
160
|
+
FWLoggerUtil.log(`VideoFeed onVideoFeedGetFeedId ${JSON.stringify(event.nativeEvent)}`);
|
|
161
|
+
const {
|
|
162
|
+
onVideoFeedGetFeedId
|
|
163
|
+
} = this.props;
|
|
164
|
+
const {
|
|
165
|
+
feedId
|
|
166
|
+
} = event.nativeEvent;
|
|
167
|
+
|
|
168
|
+
if (onVideoFeedGetFeedId) {
|
|
169
|
+
onVideoFeedGetFeedId(feedId !== null && feedId !== void 0 ? feedId : '');
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
|
|
143
173
|
this.state = {
|
|
144
174
|
sdkInitCalled: FWGlobalState.getInstance().sdkInitCalled
|
|
145
175
|
};
|
|
@@ -268,12 +298,15 @@ class VideoFeed extends React.Component {
|
|
|
268
298
|
const shareBaseURL = videoPlayerConfiguration === null || videoPlayerConfiguration === void 0 ? void 0 : videoPlayerConfiguration.shareBaseURL;
|
|
269
299
|
const ctaWidth = videoPlayerConfiguration === null || videoPlayerConfiguration === void 0 ? void 0 : videoPlayerConfiguration.ctaWidth;
|
|
270
300
|
const buttonConfiguration = videoPlayerConfiguration === null || videoPlayerConfiguration === void 0 ? void 0 : videoPlayerConfiguration.buttonConfiguration;
|
|
301
|
+
const videoPlayerLogoConfigurationJsonKey = gennerateJsonKey(videoPlayerConfiguration === null || videoPlayerConfiguration === void 0 ? void 0 : videoPlayerConfiguration.videoPlayerLogoConfiguration);
|
|
271
302
|
const showVideoDetailTitle = videoPlayerConfiguration === null || videoPlayerConfiguration === void 0 ? void 0 : videoPlayerConfiguration.showVideoDetailTitle;
|
|
272
303
|
const requiresAds = adConfiguration === null || adConfiguration === void 0 ? void 0 : adConfiguration.requiresAds;
|
|
273
304
|
const adsFetchTimeout = adConfiguration === null || adConfiguration === void 0 ? void 0 : adConfiguration.adsFetchTimeout;
|
|
274
305
|
|
|
275
306
|
const vastAttributesString = this._generateVastAttributesString();
|
|
276
307
|
|
|
308
|
+
const replayBadgeVideoFeedConfigurationJsonKey = gennerateJsonKey(videoFeedConfiguration === null || videoFeedConfiguration === void 0 ? void 0 : videoFeedConfiguration.replayBadge);
|
|
309
|
+
const replayBadgeVideoPlayerConfigurationJsonKey = gennerateJsonKey(videoPlayerConfiguration === null || videoPlayerConfiguration === void 0 ? void 0 : videoPlayerConfiguration.replayBadgeConfiguration);
|
|
277
310
|
let key = `gShareBaseURL:${gShareBaseURL}`;
|
|
278
311
|
|
|
279
312
|
if (Platform.OS === 'ios') {
|
|
@@ -345,12 +378,16 @@ class VideoFeed extends React.Component {
|
|
|
345
378
|
key += `_buttonConfiguration.unmuteButton:${this._generateButtonInfoString(buttonConfiguration === null || buttonConfiguration === void 0 ? void 0 : buttonConfiguration.unmuteButton)}`;
|
|
346
379
|
key += `_buttonConfiguration.playButton:${this._generateButtonInfoString(buttonConfiguration === null || buttonConfiguration === void 0 ? void 0 : buttonConfiguration.playButton)}`;
|
|
347
380
|
key += `_buttonConfiguration.pauseButton:${this._generateButtonInfoString(buttonConfiguration === null || buttonConfiguration === void 0 ? void 0 : buttonConfiguration.pauseButton)}`;
|
|
381
|
+
key += `_videoPlayerLogoConfiguration:${videoPlayerLogoConfigurationJsonKey}`;
|
|
348
382
|
key += `_showVideoDetailTitle:${showVideoDetailTitle}`;
|
|
349
383
|
}
|
|
350
384
|
|
|
351
385
|
key += `_requiresAds:${requiresAds}`;
|
|
352
386
|
key += `_adsFetchTimeout:${adsFetchTimeout}`;
|
|
353
387
|
key += `_vastAttributes:${vastAttributesString}`;
|
|
388
|
+
key += `_replayBadgeVideoFeedConfiguration:${replayBadgeVideoFeedConfigurationJsonKey}`;
|
|
389
|
+
key += `_replayBadgeVideoPlayerConfiguration:${replayBadgeVideoPlayerConfigurationJsonKey}`;
|
|
390
|
+
console.log('video feed key', key);
|
|
354
391
|
return /*#__PURE__*/React.createElement(FWVideoFeed, _extends({
|
|
355
392
|
key: key
|
|
356
393
|
}, this.props, {
|
|
@@ -362,6 +399,7 @@ class VideoFeed extends React.Component {
|
|
|
362
399
|
onVideoFeedEmpty: this._onVideoFeedEmpty,
|
|
363
400
|
onVideoFeedDidStartPictureInPicture: this._onVideoFeedDidStartPictureInPicture,
|
|
364
401
|
onVideoFeedDidStopPictureInPicture: this._onVideoFeedDidStopPictureInPicture,
|
|
402
|
+
onVideoFeedGetFeedId: this._onVideoFeedGetFeedId,
|
|
365
403
|
mode: mode !== null && mode !== void 0 ? mode : 'row'
|
|
366
404
|
}));
|
|
367
405
|
}
|