react-native-firework-sdk 2.2.5 → 2.3.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.
Files changed (222) hide show
  1. package/FireworkVideoUI.xcframework/Info.plist +5 -5
  2. package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/FireworkVideoUI +0 -0
  3. package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Info.plist +0 -0
  4. package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios.abi.json +2 -9
  5. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/FireworkVideoUI +0 -0
  6. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Info.plist +0 -0
  7. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios-simulator.abi.json +2 -9
  8. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/x86_64-apple-ios-simulator.abi.json +2 -9
  9. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/_CodeSignature/CodeResources +9 -9
  10. package/android/build.gradle +9 -39
  11. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  12. package/android/gradle.properties +7 -5
  13. package/android/proguard-rules.pro +5 -26
  14. package/android/src/main/AndroidManifest.xml +0 -3
  15. package/android/src/main/java/com/fireworksdk/bridge/FireworkSDKPackage.kt +1 -1
  16. package/android/src/main/java/com/fireworksdk/bridge/components/base/FWBaseFragment.kt +10 -0
  17. package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFragment.kt +157 -0
  18. package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFrameLayout.kt +19 -0
  19. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/FWVideoFeed.kt +15 -5
  20. package/android/src/main/java/com/fireworksdk/bridge/models/FWAdBadgeConfigModel.kt +6 -7
  21. package/android/src/main/java/com/fireworksdk/bridge/models/FWAdBadgeConfigModelDeserializer.kt +5 -1
  22. package/android/src/main/java/com/fireworksdk/bridge/models/FWAdBadgeConfigModelSerializer.kt +22 -0
  23. package/android/src/main/java/com/fireworksdk/bridge/models/FWFontInfoModel.kt +3 -5
  24. package/android/src/main/java/com/fireworksdk/bridge/models/FWFontInfoModelDeserializer.kt +2 -1
  25. package/android/src/main/java/com/fireworksdk/bridge/models/FWFontInfoModelSerializer.kt +18 -0
  26. package/android/src/main/java/com/fireworksdk/bridge/models/FWGradientDrawableModel.kt +8 -0
  27. package/android/src/main/java/com/fireworksdk/bridge/models/FWGradientDrawableModelDeserializer.kt +35 -0
  28. package/android/src/main/java/com/fireworksdk/bridge/models/FWGradientDrawableModelSerializer.kt +27 -0
  29. package/android/src/main/java/com/fireworksdk/bridge/models/FWLiveStreamEventDetailsModel.kt +1 -5
  30. package/android/src/main/java/com/fireworksdk/bridge/models/FWLiveStreamMessageDetailsModel.kt +1 -5
  31. package/android/src/main/java/com/fireworksdk/bridge/models/FWProductInfoViewConfiguration.kt +5 -15
  32. package/android/src/main/java/com/fireworksdk/bridge/models/FWProductInfoViewConfigurationDeserializer.kt +2 -9
  33. package/android/src/main/java/com/fireworksdk/bridge/models/FWProductInfoViewConfigurationSerializer.kt +42 -0
  34. package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModel.kt +3 -5
  35. package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModelDeserializer.kt +2 -1
  36. package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModelSerializer.kt +20 -0
  37. package/android/src/main/java/com/fireworksdk/bridge/models/FWShoppingCtaResult.kt +3 -12
  38. package/android/src/main/java/com/fireworksdk/bridge/models/FWShoppingCtaResultDeserializer.kt +2 -13
  39. package/android/src/main/java/com/fireworksdk/bridge/models/FWShoppingCtaResultSerializer.kt +18 -0
  40. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModel.kt +8 -9
  41. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelDeserializer.kt +17 -6
  42. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelSerializer.kt +59 -0
  43. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedItemDetailsModel.kt +1 -5
  44. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedPropsModel.kt +14 -15
  45. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedPropsModelDeserializer.kt +14 -4
  46. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedPropsModelSerializer.kt +56 -0
  47. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlaybackDetails.kt +11 -8
  48. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModel.kt +11 -12
  49. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelDeserializer.kt +11 -7
  50. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelSerializer.kt +63 -0
  51. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoShoppingProduct.kt +4 -11
  52. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoShoppingProductSerializer.kt +82 -0
  53. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWBadgeTextType.kt +18 -0
  54. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWCtaButtonTextValue.kt +18 -0
  55. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWCtaDelayType.kt +18 -0
  56. package/android/src/main/java/com/fireworksdk/bridge/models/{FWEventName.kt → enums/FWEventName.kt} +1 -1
  57. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWGradientDrawableOrientation.kt +24 -0
  58. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWPlayerLaunchBehavior.kt +18 -0
  59. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWPlayerStyle.kt +18 -0
  60. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWShoppingCtaResultRes.kt +19 -0
  61. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWSystemTypeface.kt +21 -0
  62. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoCompleteAction.kt +18 -0
  63. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoFeedMode.kt +19 -0
  64. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoFeedSource.kt +22 -0
  65. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoFeedTitlePosition.kt +19 -0
  66. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoPlayerCTAWidth.kt +19 -0
  67. package/android/src/main/java/com/fireworksdk/bridge/reactnative/FWReactNativeSDK.kt +22 -0
  68. package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWStoryBlockManager.kt +61 -32
  69. package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWVideoFeedManager.kt +3 -2
  70. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWNavigatorInterface.kt +0 -1
  71. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWVideoShoppingInterface.kt +0 -1
  72. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FireworkSDKInterface.kt +0 -2
  73. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWLiveStreamModule.kt +2 -2
  74. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWNavigatorModule.kt +0 -6
  75. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +25 -32
  76. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt +24 -47
  77. package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWEventUtils.kt +17 -44
  78. package/android/src/main/java/com/fireworksdk/bridge/utils/FWBundleUtils.kt +46 -21
  79. package/android/src/main/java/com/fireworksdk/bridge/utils/FWConfigUtil.kt +165 -86
  80. package/android/src/main/java/com/fireworksdk/bridge/utils/FWFragmentUtil.kt +51 -0
  81. package/android/src/main/java/com/fireworksdk/bridge/utils/FWGlobalDataUtil.kt +1 -5
  82. package/android/src/main/java/com/fireworksdk/bridge/utils/FWLanguageUtil.kt +77 -80
  83. package/android/src/main/java/com/fireworksdk/bridge/utils/FWLiveStreamUtil.kt +17 -0
  84. package/android/src/main/java/com/fireworksdk/bridge/utils/FWSingletonHolder.kt +25 -0
  85. package/android/src/main/java/com/fireworksdk/bridge/utils/FWStatusBarUtil.kt +28 -0
  86. package/android/src/main/res/layout/fw_bridge_story_block.xml +5 -12
  87. package/ios/Components/VideoFeed.swift +39 -19
  88. package/ios/Components/VideoFeedConfiguration.swift +4 -5
  89. package/ios/Components/VideoFeedManager.swift +1 -1
  90. package/ios/Components/VideoPlayerConfiguration.swift +17 -0
  91. package/ios/FireworkSdk.xcodeproj/project.pbxproj +197 -205
  92. package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/Bundle+AppLanguage.swift +23 -8
  93. package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/URLSession+AppLanguage.swift +1 -18
  94. package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UIImageView+AppLanguage.swift +4 -1
  95. package/ios/Models/NativeToRN/FireworkEventName.swift +0 -1
  96. package/ios/Models/NativeToRN/FireworkSDK+Json.swift +1 -1
  97. package/ios/Modules/FWNavigatorModule/FWNavigatorModule.swift +6 -157
  98. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +1 -21
  99. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +1 -2
  100. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +1 -12
  101. package/ios/Modules/LiveStream/LiveStreamModule.m +1 -1
  102. package/ios/Modules/LiveStream/LiveStreamModule.swift +4 -2
  103. package/ios/Modules/Shopping/FWCartViewController.swift +0 -75
  104. package/ios/Modules/Shopping/ShoppingModule.m +1 -3
  105. package/ios/Modules/Shopping/ShoppingModule.swift +12 -47
  106. package/ios/Utils/Extensions/Swizzle/UINavigationController+FWSwizzle.swift +1 -1
  107. package/lib/commonjs/FireworkSDK.js +31 -15
  108. package/lib/commonjs/FireworkSDK.js.map +1 -1
  109. package/lib/commonjs/LiveStream.js.map +1 -1
  110. package/lib/commonjs/VideoShopping.js +43 -30
  111. package/lib/commonjs/VideoShopping.js.map +1 -1
  112. package/lib/commonjs/components/StoryBlock.js +55 -15
  113. package/lib/commonjs/components/StoryBlock.js.map +1 -1
  114. package/lib/commonjs/components/VideoFeed.js +112 -24
  115. package/lib/commonjs/components/VideoFeed.js.map +1 -1
  116. package/lib/commonjs/index.js.map +1 -1
  117. package/lib/commonjs/models/GradientDrawable.js +2 -0
  118. package/lib/commonjs/models/GradientDrawable.js.map +1 -0
  119. package/lib/commonjs/models/StoryBlockConfiguration.js +6 -0
  120. package/lib/commonjs/models/StoryBlockConfiguration.js.map +1 -0
  121. package/lib/commonjs/models/VideoPlayerCTADelay.js +2 -0
  122. package/lib/commonjs/models/VideoPlayerCTADelay.js.map +1 -0
  123. package/lib/commonjs/models/VideoPlayerCTAStyle.js +6 -0
  124. package/lib/commonjs/models/VideoPlayerCTAStyle.js.map +1 -0
  125. package/lib/commonjs/models/VideoPlayerCTAWidth.js +2 -0
  126. package/lib/commonjs/models/VideoPlayerCTAWidth.js.map +1 -0
  127. package/lib/commonjs/models/VideoPlayerCompleteAction.js +2 -0
  128. package/lib/commonjs/models/VideoPlayerCompleteAction.js.map +1 -0
  129. package/lib/commonjs/models/VideoPlayerStyle.js +2 -0
  130. package/lib/commonjs/models/VideoPlayerStyle.js.map +1 -0
  131. package/lib/commonjs/modules/LiveStreamModule.js.map +1 -1
  132. package/lib/commonjs/modules/ShoppingModule.js.map +1 -1
  133. package/lib/commonjs/utils/FWGlobalState.js +47 -0
  134. package/lib/commonjs/utils/FWGlobalState.js.map +1 -0
  135. package/lib/module/FireworkSDK.js +30 -14
  136. package/lib/module/FireworkSDK.js.map +1 -1
  137. package/lib/module/LiveStream.js.map +1 -1
  138. package/lib/module/VideoShopping.js +43 -29
  139. package/lib/module/VideoShopping.js.map +1 -1
  140. package/lib/module/components/StoryBlock.js +54 -15
  141. package/lib/module/components/StoryBlock.js.map +1 -1
  142. package/lib/module/components/VideoFeed.js +113 -24
  143. package/lib/module/components/VideoFeed.js.map +1 -1
  144. package/lib/module/index.js.map +1 -1
  145. package/lib/module/models/GradientDrawable.js +2 -0
  146. package/lib/module/models/GradientDrawable.js.map +1 -0
  147. package/lib/module/models/StoryBlockConfiguration.js +2 -0
  148. package/lib/module/models/StoryBlockConfiguration.js.map +1 -0
  149. package/lib/module/models/VideoPlayerCTADelay.js +2 -0
  150. package/lib/module/models/VideoPlayerCTADelay.js.map +1 -0
  151. package/lib/module/models/VideoPlayerCTAStyle.js +2 -0
  152. package/lib/module/models/VideoPlayerCTAStyle.js.map +1 -0
  153. package/lib/module/models/VideoPlayerCTAWidth.js +2 -0
  154. package/lib/module/models/VideoPlayerCTAWidth.js.map +1 -0
  155. package/lib/module/models/VideoPlayerCompleteAction.js +2 -0
  156. package/lib/module/models/VideoPlayerCompleteAction.js.map +1 -0
  157. package/lib/module/models/VideoPlayerStyle.js +2 -0
  158. package/lib/module/models/VideoPlayerStyle.js.map +1 -0
  159. package/lib/module/modules/LiveStreamModule.js.map +1 -1
  160. package/lib/module/modules/ShoppingModule.js.map +1 -1
  161. package/lib/module/utils/FWGlobalState.js +39 -0
  162. package/lib/module/utils/FWGlobalState.js.map +1 -0
  163. package/lib/typescript/FireworkSDK.d.ts +7 -7
  164. package/lib/typescript/LiveStream.d.ts +2 -2
  165. package/lib/typescript/VideoShopping.d.ts +17 -18
  166. package/lib/typescript/components/StoryBlock.d.ts +2 -0
  167. package/lib/typescript/components/VideoFeed.d.ts +7 -3
  168. package/lib/typescript/index.d.ts +10 -3
  169. package/lib/typescript/models/AdBadgeConfiguration.d.ts +9 -2
  170. package/lib/typescript/models/FWEvents.d.ts +9 -9
  171. package/lib/typescript/models/GradientDrawable.d.ts +5 -0
  172. package/lib/typescript/models/IOSFontInfo.d.ts +2 -0
  173. package/lib/typescript/models/ProductInfoViewConfiguration.d.ts +1 -1
  174. package/lib/typescript/models/StoryBlockConfiguration.d.ts +37 -0
  175. package/lib/typescript/models/VideoFeedConfiguration.d.ts +25 -4
  176. package/lib/typescript/models/VideoPlaybackDetails.d.ts +1 -0
  177. package/lib/typescript/models/VideoPlayerCTADelay.d.ts +11 -0
  178. package/lib/typescript/models/VideoPlayerCTAStyle.d.ts +21 -0
  179. package/lib/typescript/models/VideoPlayerCTAWidth.d.ts +1 -0
  180. package/lib/typescript/models/VideoPlayerCompleteAction.d.ts +1 -0
  181. package/lib/typescript/models/VideoPlayerConfiguration.d.ts +9 -34
  182. package/lib/typescript/models/VideoPlayerStyle.d.ts +1 -0
  183. package/lib/typescript/modules/LiveStreamModule.d.ts +1 -1
  184. package/lib/typescript/modules/ShoppingModule.d.ts +2 -3
  185. package/lib/typescript/utils/FWGlobalState.d.ts +10 -0
  186. package/package.json +5 -3
  187. package/react-native-firework-sdk.podspec +2 -1
  188. package/src/FireworkSDK.ts +47 -19
  189. package/src/LiveStream.ts +4 -2
  190. package/src/VideoShopping.ts +47 -39
  191. package/src/components/StoryBlock.tsx +66 -9
  192. package/src/components/VideoFeed.tsx +147 -23
  193. package/src/index.ts +14 -6
  194. package/src/models/AdBadgeConfiguration.ts +10 -2
  195. package/src/models/FWEvents.ts +11 -11
  196. package/src/models/GradientDrawable.ts +14 -0
  197. package/src/models/IOSFontInfo.ts +2 -0
  198. package/src/models/ProductInfoViewConfiguration.ts +1 -1
  199. package/src/models/StoryBlockConfiguration.ts +38 -0
  200. package/src/models/VideoFeedConfiguration.ts +25 -4
  201. package/src/models/VideoPlaybackDetails.ts +1 -0
  202. package/src/models/VideoPlayerCTADelay.ts +11 -0
  203. package/src/models/VideoPlayerCTAStyle.ts +22 -0
  204. package/src/models/VideoPlayerCTAWidth.ts +1 -0
  205. package/src/models/VideoPlayerCompleteAction.ts +1 -0
  206. package/src/models/VideoPlayerConfiguration.ts +9 -36
  207. package/src/models/VideoPlayerStyle.ts +1 -0
  208. package/src/modules/LiveStreamModule.ts +1 -1
  209. package/src/modules/ShoppingModule.ts +2 -3
  210. package/src/utils/FWGlobalState.ts +31 -0
  211. package/android/publish.gradle +0 -66
  212. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/StoryBlockFragment.kt +0 -129
  213. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/StoryBlockFrameLayout.kt +0 -90
  214. package/android/src/main/java/com/fireworksdk/bridge/constants/FWVideoPlayerConstant.kt +0 -39
  215. package/android/src/main/java/com/fireworksdk/bridge/models/FWSystemTypeface.kt +0 -9
  216. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedModel.kt +0 -7
  217. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedSource.kt +0 -10
  218. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedTitlePosition.kt +0 -7
  219. package/android/src/main/java/com/fireworksdk/bridge/reactnative/pages/FWContainerActivity.kt +0 -53
  220. package/android/src/main/res/layout/fw_bridge_fragment_container.xml +0 -8
  221. package/ios/Modules/FWNavigatorModule/FWNavigatorContainerViewController.swift +0 -33
  222. package/ios/Modules/FWNavigatorModule/FWNavigatorProtocol.swift +0 -18
@@ -21,11 +21,18 @@ import LiveStreamModule from './modules/LiveStreamModule';
21
21
  import ShoppingModule from './modules/ShoppingModule';
22
22
  import FWLoggerUtil from './utils/FWLoggerUtil';
23
23
  import VideoShopping from './VideoShopping';
24
-
25
- export type SDKInitCallback = (event: SDKInitEvent) => void;
26
- export type CustomCTAClickCallback = (event: CustomCTAClickEvent) => void;
27
- export type VideoPlaybackCallback = (event: VideoPlaybackEvent) => void;
28
- export type VideoFeedClickCallback = (event: VideoFeedClickEvent) => void;
24
+ import FWGlobalState from './utils/FWGlobalState';
25
+
26
+ export type SDKInitCallback = (event: SDKInitEvent) => Promise<void> | void;
27
+ export type CustomCTAClickCallback = (
28
+ event: CustomCTAClickEvent
29
+ ) => Promise<void> | void;
30
+ export type VideoPlaybackCallback = (
31
+ event: VideoPlaybackEvent
32
+ ) => Promise<void> | void;
33
+ export type VideoFeedClickCallback = (
34
+ event: VideoFeedClickEvent
35
+ ) => Promise<void> | void;
29
36
 
30
37
  /**
31
38
  * Firework SDK.
@@ -91,7 +98,11 @@ class FireworkSDK {
91
98
  const valueHasChanged =
92
99
  this._adBadgeConfiguration?.badgeTextType !== value?.badgeTextType ||
93
100
  this._adBadgeConfiguration?.backgroundColor !== value?.backgroundColor ||
94
- this._adBadgeConfiguration?.textColor !== value?.textColor;
101
+ this._adBadgeConfiguration?.textColor !== value?.textColor ||
102
+ this._adBadgeConfiguration?.androidFontInfo?.isCustom !==
103
+ value?.androidFontInfo?.isCustom ||
104
+ this._adBadgeConfiguration?.androidFontInfo?.typefaceName !==
105
+ value?.androidFontInfo?.typefaceName;
95
106
  this._adBadgeConfiguration = value;
96
107
  if (valueHasChanged) {
97
108
  this.eventEmitter.emit(FWEventName.AdBadgeConfigurationUpdated);
@@ -166,6 +177,7 @@ class FireworkSDK {
166
177
 
167
178
  private constructor() {
168
179
  FWLoggerUtil.log('FireworkSDK constructor');
180
+
169
181
  this.eventEmitter.addListener(FWEventName.SDKInit, (event) => {
170
182
  FWLoggerUtil.log(`Receive SDKInit event ${event?.error}`);
171
183
 
@@ -230,9 +242,11 @@ class FireworkSDK {
230
242
  if (videoLaunchBehaviorUpdated) {
231
243
  this.eventEmitter.emit(FWEventName.VideoLaunchBehaviorUpdated);
232
244
  }
233
- FireworkSDKModule.init(options);
234
- ShoppingModule.init();
235
- LiveStreamModule.init();
245
+ await FireworkSDKModule.init(options);
246
+ await ShoppingModule.init();
247
+ await LiveStreamModule.init();
248
+
249
+ FWGlobalState.getInstance().resolveSdkInitCalled();
236
250
  }
237
251
 
238
252
  /**
@@ -240,7 +254,13 @@ class FireworkSDK {
240
254
  * @param {string} url
241
255
  * @param {VideoPlayerConfiguration} config
242
256
  */
243
- public openVideoPlayer(url: string, config?: VideoPlayerConfiguration) {
257
+ public async openVideoPlayer(
258
+ url: string,
259
+ config?: VideoPlayerConfiguration
260
+ ): Promise<void> {
261
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
262
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
263
+ }
244
264
  FireworkSDKModule.openVideoPlayer(url, config ?? {});
245
265
  }
246
266
 
@@ -248,28 +268,36 @@ class FireworkSDK {
248
268
  * Records the user purchase. Only supported on iOS.
249
269
  * @param {TrackPurchaseParameters} parameters
250
270
  */
251
- public trackPurchase(parameters: TrackPurchaseParameters) {
271
+ public async trackPurchase(
272
+ parameters: TrackPurchaseParameters
273
+ ): Promise<void> {
252
274
  if (Platform.OS === 'ios') {
275
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
276
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
277
+ }
253
278
  FireworkSDKModule.trackPurchase(parameters);
254
279
  }
255
280
  }
256
281
 
257
282
  /**
258
- * Change App level language. Only supported on iOS.
283
+ * Change App level language.
259
284
  * @param {string | undefined | null} language Such as en, ar and en-US
260
285
  * If language is null or undefined or empty string, SDK will use system language.
261
286
  * @returns {Promise<boolean>} The result of changing app language.
262
287
  */
263
288
  public async changeAppLanguage(language?: string | null): Promise<boolean> {
264
- if (Platform.OS === 'ios') {
265
- const result = await FireworkSDKModule.changeAppLanguage(language);
266
- if (result) {
267
- this.updateInternalAppLanguage(language);
289
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
290
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
291
+ }
292
+ const result = await FireworkSDKModule.changeAppLanguage(language);
293
+ if (result) {
294
+ const languageChanged = this._appLanguage !== language;
295
+ if (Platform.OS === 'ios' && languageChanged) {
296
+ await this.navigator.stopFloatingPlayer();
268
297
  }
269
- return result;
298
+ this.updateInternalAppLanguage(language);
270
299
  }
271
-
272
- return false;
300
+ return result;
273
301
  }
274
302
 
275
303
  private updateInternalAppLanguage(language?: string | null) {
package/src/LiveStream.ts CHANGED
@@ -4,10 +4,12 @@ import type { LiveStreamChatEvent, LiveStreamEvent } from './models/FWEvents';
4
4
  import { LiveStreamModuleEventEmitter } from './modules/LiveStreamModule';
5
5
  import FWLoggerUtil from './utils/FWLoggerUtil';
6
6
 
7
- export type onLiveStreamEventCallback = (event: LiveStreamEvent) => void;
7
+ export type onLiveStreamEventCallback = (
8
+ event: LiveStreamEvent
9
+ ) => Promise<void> | void;
8
10
  export type onLiveStreamChatEventCallback = (
9
11
  event: LiveStreamChatEvent
10
- ) => void;
12
+ ) => Promise<void> | void;
11
13
 
12
14
  /**
13
15
  * The entry class of live stream.
@@ -13,20 +13,24 @@ import ShoppingModule, {
13
13
  } from './modules/ShoppingModule';
14
14
  import FWLoggerUtil from './utils/FWLoggerUtil';
15
15
  import type ShoppingCTAResult from './models/ShoppingCTAResult';
16
+ import FWGlobalState from './utils/FWGlobalState';
16
17
 
17
18
  export type ShoppingCTACallback = (
18
19
  event: ShoppingCTAEvent
19
- ) => Promise<ShoppingCTAResult>;
20
+ ) => Promise<ShoppingCTAResult> | ShoppingCTAResult;
20
21
 
21
- export type CustomClickCartIconCallback = () => Promise<void>;
22
+ export type CustomClickCartIconCallback = () => Promise<void> | void;
22
23
 
24
+ export type UpdateProductDetailsCallbackResult = Product[] | undefined | null;
23
25
  export type UpdateProductDetailsCallback = (
24
26
  event: UpdateProductDetailsEvent
25
- ) => Promise<Product[] | undefined | null>;
27
+ ) =>
28
+ | Promise<UpdateProductDetailsCallbackResult>
29
+ | UpdateProductDetailsCallbackResult;
26
30
 
27
31
  export type CustomClickLinkButtonCallback = (
28
32
  event: CustomClickLinkButtonEvent
29
- ) => Promise<void>;
33
+ ) => Promise<void> | void;
30
34
 
31
35
  /**
32
36
  * The entry class of video shopping.
@@ -46,18 +50,7 @@ class VideoShopping {
46
50
  * The host app can customize the click event processing logic of
47
51
  * the shopping cart icon by setting the callback.
48
52
  */
49
- public get onCustomClickCartIcon(): CustomClickCartIconCallback | undefined {
50
- return this._onCustomClickCartIcon;
51
- }
52
- public set onCustomClickCartIcon(
53
- value: CustomClickCartIconCallback | undefined
54
- ) {
55
- this._onCustomClickCartIcon = value;
56
- if (Platform.OS === 'ios') {
57
- ShoppingModule.setCustomClickCartIconEnabled(!!value);
58
- }
59
- }
60
- private _onCustomClickCartIcon?: CustomClickCartIconCallback | undefined;
53
+ public onCustomClickCartIcon?: CustomClickCartIconCallback | undefined;
61
54
 
62
55
  /**
63
56
  * This callback is triggered when the video will be shown.
@@ -66,6 +59,26 @@ class VideoShopping {
66
59
  */
67
60
  public onUpdateProductDetails?: UpdateProductDetailsCallback;
68
61
 
62
+ /**
63
+ * This callback is triggered when the user clicks
64
+ * the link button next to Add to cart button.
65
+ *
66
+ * The host app can customize the click event processing logic of
67
+ * the link button by setting the callback.
68
+ */
69
+ public get onCustomClickLinkButton():
70
+ | CustomClickLinkButtonCallback
71
+ | undefined {
72
+ return this._onCustomClickLinkButton;
73
+ }
74
+ public set onCustomClickLinkButton(
75
+ value: CustomClickLinkButtonCallback | undefined
76
+ ) {
77
+ this._onCustomClickLinkButton = value;
78
+ ShoppingModule.setCustomClickLinkButtonEnabled(!!value);
79
+ }
80
+ private _onCustomClickLinkButton?: CustomClickLinkButtonCallback | undefined;
81
+
69
82
  /**
70
83
  * Defaults to true.
71
84
  * You can hide the cart icon by setting this property to false.
@@ -75,7 +88,13 @@ class VideoShopping {
75
88
  }
76
89
  public set cartIconVisible(value: boolean) {
77
90
  this._cartIconVisible = value;
78
- ShoppingModule.setCartIconVisible(value);
91
+ if (FWGlobalState.getInstance().sdkInitCalled) {
92
+ ShoppingModule.setCartIconVisible(value);
93
+ } else {
94
+ FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {
95
+ ShoppingModule.setCartIconVisible(value);
96
+ });
97
+ }
79
98
  }
80
99
  private _cartIconVisible: boolean = true;
81
100
 
@@ -93,33 +112,19 @@ class VideoShopping {
93
112
  value: ProductInfoViewConfiguration | undefined
94
113
  ) {
95
114
  this._productInfoViewConfiguration = value;
96
- ShoppingModule.setProductInfoViewConfiguration(value ?? {});
115
+ if (FWGlobalState.getInstance().sdkInitCalled) {
116
+ ShoppingModule.setProductInfoViewConfiguration(value ?? {});
117
+ } else {
118
+ FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {
119
+ ShoppingModule.setProductInfoViewConfiguration(value ?? {});
120
+ });
121
+ }
97
122
  }
98
123
 
99
124
  private _productInfoViewConfiguration?:
100
125
  | ProductInfoViewConfiguration
101
126
  | undefined;
102
127
 
103
- /**
104
- * This callback is triggered when the user clicks
105
- * the link button next to Add to cart button.
106
- *
107
- * The host app can customize the click event processing logic of
108
- * the link button by setting the callback.
109
- */
110
- public get onCustomClickLinkButton():
111
- | CustomClickLinkButtonCallback
112
- | undefined {
113
- return this._onCustomClickLinkButton;
114
- }
115
- public set onCustomClickLinkButton(
116
- value: CustomClickLinkButtonCallback | undefined
117
- ) {
118
- this._onCustomClickLinkButton = value;
119
- ShoppingModule.setCustomClickLinkButtonEnabled(!!value);
120
- }
121
- private _onCustomClickLinkButton?: CustomClickLinkButtonCallback | undefined;
122
-
123
128
  private get eventEmitter(): NativeEventEmitter {
124
129
  return ShoppingModuleEventEmitter;
125
130
  }
@@ -177,7 +182,10 @@ class VideoShopping {
177
182
  * If cound > 0, we will show the red indicator on the cart icon.
178
183
  * Otherwise, we will hide the red indicator on the cart icon.
179
184
  */
180
- public setCartItemCount(count: number) {
185
+ public async setCartItemCount(count: number): Promise<void> {
186
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
187
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
188
+ }
181
189
  ShoppingModule.setCartItemCount(count);
182
190
  }
183
191
 
@@ -22,8 +22,10 @@ import FireworkSDK from '../FireworkSDK';
22
22
  import type AdConfiguration from '../models/AdConfiguration';
23
23
  import type FWError from '../models/FWError';
24
24
  import { FWEventName } from '../models/FWEventName';
25
+ import type { StoryBlockConfiguration } from '../models/StoryBlockConfiguration';
25
26
  import type { StoryBlockSource } from '../models/StoryBlockSource';
26
27
  import { FireworkSDKModuleEventEmitter } from '../modules/FireworkSDKModule';
28
+ import FWGlobalState from '../utils/FWGlobalState';
27
29
  import FWLoggerUtil from '../utils/FWLoggerUtil';
28
30
  import FWStoryBlock from './FWStoryBlock';
29
31
 
@@ -79,6 +81,10 @@ export interface IStoryBlockProps {
79
81
  * Ad configuration of the feed. Only supported on iOS.
80
82
  */
81
83
  adConfiguration?: AdConfiguration;
84
+
85
+ /* The configuration of the story block.
86
+ Only supported on Android.*/
87
+ storyBlockConfiguration?: StoryBlockConfiguration;
82
88
  /**
83
89
  * The feed loading result callback. It means loading successfully when error equals to undefined.
84
90
  */
@@ -91,6 +97,9 @@ const StoryBlock: ForwardRefRenderFunction<
91
97
  > = (props: IStoryBlockProps, forwardedRef) => {
92
98
  const nativeComponentRef = useRef(null);
93
99
  const [isFullscreenState, setIsFullscreenState] = useState<boolean>(false);
100
+ const [sdkInitCalled, setSdkInitCalled] = useState<boolean>(
101
+ FWGlobalState.getInstance().sdkInitCalled
102
+ );
94
103
  const [, forceUpdate] = useReducer((x) => x + 1, 0);
95
104
 
96
105
  const handleStoryBlockLoadFinished = (event: NativeSyntheticEvent<any>) => {
@@ -114,11 +123,11 @@ const StoryBlock: ForwardRefRenderFunction<
114
123
  }
115
124
  };
116
125
 
117
- const handleStoryBlockFullscreenStateChanged = (
126
+ const handleStoryBlockFullScreenStateChanged = (
118
127
  event: NativeSyntheticEvent<any>
119
128
  ) => {
120
129
  FWLoggerUtil.log(
121
- `StoryBlock handleStoryBlockFullscreenStateChanged ${event.nativeEvent.isFullScreen}`
130
+ `StoryBlock handleStoryBlockFullScreenStateChanged ${event.nativeEvent.isFullScreen}`
122
131
  );
123
132
  const { isFullScreen } = event.nativeEvent;
124
133
  setIsFullscreenState(isFullScreen);
@@ -167,13 +176,17 @@ const StoryBlock: ForwardRefRenderFunction<
167
176
  const generateKey = (): string => {
168
177
  const gShareBaseURL = FireworkSDK.getInstance().shareBaseURL ?? '';
169
178
  const appLanguage = FireworkSDK.getInstance().appLanguage ?? '';
179
+ const videoLaunchBehavior =
180
+ FireworkSDK.getInstance().videoLaunchBehavior ?? '';
170
181
  const adBadgeConfiguration =
171
182
  FireworkSDK.getInstance().adBadgeConfiguration ?? {};
172
183
  const adBadgeTextType = adBadgeConfiguration.badgeTextType ?? '';
173
184
  const backgroundColorOfAdBadge = adBadgeConfiguration.backgroundColor ?? '';
174
185
  const textColorOfAdBadge = adBadgeConfiguration.textColor ?? '';
175
- const videoLaunchBehavior =
176
- FireworkSDK.getInstance().videoLaunchBehavior ?? 'default';
186
+ const androidFontIsCustomOfAdBadge =
187
+ adBadgeConfiguration.androidFontInfo?.isCustom?.toString() ?? '';
188
+ const androidFontTypefaceNameOfAdBadge =
189
+ adBadgeConfiguration.androidFontInfo?.typefaceName ?? '';
177
190
 
178
191
  const {
179
192
  source,
@@ -182,11 +195,30 @@ const StoryBlock: ForwardRefRenderFunction<
182
195
  hashtagFilterExpression = '',
183
196
  enablePictureInPicture = false,
184
197
  adConfiguration,
198
+ storyBlockConfiguration,
185
199
  } = props;
186
200
  const dynamicContentParametersString =
187
201
  generateDynamicContentParametersString();
188
202
 
189
- const requiresAds = adConfiguration?.requiresAds ?? false;
203
+ const videoCompleteAction =
204
+ storyBlockConfiguration?.videoCompleteAction ?? '';
205
+ const showShareButton =
206
+ storyBlockConfiguration?.showShareButton?.toString() ?? '';
207
+ const showPlaybackButton =
208
+ storyBlockConfiguration?.showPlaybackButton?.toString() ?? '';
209
+ const showBranding =
210
+ storyBlockConfiguration?.showBranding?.toString() ?? '';
211
+ const ctaDelayType = storyBlockConfiguration?.ctaDelay?.type ?? '';
212
+ const ctaDelayValue =
213
+ storyBlockConfiguration?.ctaDelay?.value?.toFixed(5) ?? '';
214
+ const ctaHighlightDelayType =
215
+ storyBlockConfiguration?.ctaHighlightDelay?.type ?? '';
216
+ const ctaHighlightDelayValue =
217
+ storyBlockConfiguration?.ctaHighlightDelay?.value?.toFixed(5) ?? '';
218
+ const shareBaseURL = storyBlockConfiguration?.shareBaseURL ?? '';
219
+ const ctaWidth = storyBlockConfiguration?.ctaWidth ?? '';
220
+
221
+ const requiresAds = adConfiguration?.requiresAds?.toString() ?? '';
190
222
  const adsFetchTimeout = adConfiguration?.adsFetchTimeout ?? 10;
191
223
  const vastAttributesString = generateVastAttributesString();
192
224
 
@@ -194,10 +226,14 @@ const StoryBlock: ForwardRefRenderFunction<
194
226
  if (Platform.OS === 'ios') {
195
227
  key += `_appLanguage:${appLanguage}`;
196
228
  }
229
+ key += `_videoLaunchBehavior:${videoLaunchBehavior}`;
197
230
  key += `_adBadgeTextType:${adBadgeTextType}`;
198
231
  key += `_backgroundColorOfAdBadge:${backgroundColorOfAdBadge}`;
199
232
  key += `_textColorOfAdBadge:${textColorOfAdBadge}`;
200
- key += `_videoLaunchBehavior:${videoLaunchBehavior}`;
233
+ if (Platform.OS === 'android') {
234
+ key += `_androidFontIsCustomOfAdBadge${androidFontIsCustomOfAdBadge}`;
235
+ key += `_androidFontTypefaceNameOfAdBadge${androidFontTypefaceNameOfAdBadge}`;
236
+ }
201
237
 
202
238
  key += `_source:${source}`;
203
239
  key += `_channel:${channel}`;
@@ -206,6 +242,19 @@ const StoryBlock: ForwardRefRenderFunction<
206
242
  key += `_hashtagFilterExpression:${hashtagFilterExpression}`;
207
243
  key += `_enablePictureInPicture:${enablePictureInPicture}`;
208
244
 
245
+ key += `_shareBaseURL:${shareBaseURL}`;
246
+ if (Platform.OS === 'android') {
247
+ key += `_videoCompleteAction:${videoCompleteAction}`;
248
+ key += `_showShareButton:${showShareButton}`;
249
+ key += `_showPlaybackButton:${showPlaybackButton}`;
250
+ key += `_showBranding:${showBranding}`;
251
+ key += `_ctaDelayType:${ctaDelayType}`;
252
+ key += `_ctaDelayValue:${ctaDelayValue}`;
253
+ key += `_ctaHighlightDelayType:${ctaHighlightDelayType}`;
254
+ key += `_ctaHighlightDelayValue:${ctaHighlightDelayValue}`;
255
+ key += `_ctaWidth:${ctaWidth}`;
256
+ }
257
+
209
258
  key += `_requiresAds:${requiresAds}`;
210
259
  key += `_adsFetchTimeout:${adsFetchTimeout}`;
211
260
  key += `_vastAttributes:${vastAttributesString}`;
@@ -307,6 +356,12 @@ const StoryBlock: ForwardRefRenderFunction<
307
356
  }
308
357
  }, [key]);
309
358
 
359
+ useEffect(() => {
360
+ FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {
361
+ setSdkInitCalled(true);
362
+ });
363
+ }, []);
364
+
310
365
  useEffect(() => {
311
366
  if (Platform.OS === 'android') {
312
367
  const onBackPress = () => {
@@ -328,7 +383,10 @@ const StoryBlock: ForwardRefRenderFunction<
328
383
  return;
329
384
  }, [isFullscreenState]);
330
385
 
331
- const { style } = props;
386
+ if (!sdkInitCalled) {
387
+ return null;
388
+ }
389
+
332
390
  return (
333
391
  <FWStoryBlock
334
392
  ref={nativeComponentRef}
@@ -336,9 +394,8 @@ const StoryBlock: ForwardRefRenderFunction<
336
394
  {...props}
337
395
  onStoryBlockLoadFinished={handleStoryBlockLoadFinished}
338
396
  onStoryBlockFullScreenStateChanged={
339
- handleStoryBlockFullscreenStateChanged
397
+ handleStoryBlockFullScreenStateChanged
340
398
  }
341
- style={Object.assign({}, style, { zIndex: -1 })}
342
399
  />
343
400
  );
344
401
  };