react-native-firework-sdk 1.2.0-beta.9 → 1.2.2

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 (96) hide show
  1. package/android/src/main/AndroidManifest.xml +0 -8
  2. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedItemDetailsModel.kt +6 -1
  3. package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWVideoFeedManager.kt +18 -2
  4. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWNavigatorInterface.kt +3 -1
  5. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWVideoShoppingInterface.kt +2 -2
  6. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FireworkSDKInterface.kt +2 -1
  7. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWNavigatorModule.kt +23 -21
  8. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +4 -19
  9. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt +28 -9
  10. package/android/src/main/java/com/fireworksdk/bridge/reactnative/pages/FWContainerActivity.kt +22 -10
  11. package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWDataUtils.kt +125 -0
  12. package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWEventUtils.kt +39 -9
  13. package/android/src/main/java/com/fireworksdk/bridge/utils/FWBundleUtils.kt +86 -0
  14. package/android/src/main/java/com/fireworksdk/bridge/utils/FWVideoPlayerUtils.kt +0 -1
  15. package/ios/FireworkSdk.xcodeproj/project.pbxproj +0 -4
  16. package/ios/Models/NativeToRN/FireworkSDK+Json.swift +24 -9
  17. package/ios/Modules/FWNavigatorModule/FWNavigatorContainerViewController.swift +3 -11
  18. package/ios/Modules/FWNavigatorModule/FWNavigatorModule.m +3 -2
  19. package/ios/Modules/FWNavigatorModule/FWNavigatorModule.swift +46 -8
  20. package/ios/Modules/FWNavigatorModule/FWNavigatorProtocol.swift +4 -3
  21. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +14 -6
  22. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +2 -1
  23. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +12 -4
  24. package/ios/Modules/Shopping/CartViewController.swift +6 -1
  25. package/ios/Modules/Shopping/ShoppingModule.m +1 -2
  26. package/ios/Modules/Shopping/ShoppingModule.swift +10 -12
  27. package/lib/commonjs/FWNavigator.js +17 -14
  28. package/lib/commonjs/FWNavigator.js.map +1 -1
  29. package/lib/commonjs/FireworkSDK.js +24 -12
  30. package/lib/commonjs/FireworkSDK.js.map +1 -1
  31. package/lib/commonjs/VideoShopping.js +3 -16
  32. package/lib/commonjs/VideoShopping.js.map +1 -1
  33. package/lib/commonjs/components/VideoFeed.js.map +1 -1
  34. package/lib/commonjs/index.js +0 -14
  35. package/lib/commonjs/index.js.map +1 -1
  36. package/lib/commonjs/models/NewNativeContainerProps.js +2 -0
  37. package/lib/commonjs/models/NewNativeContainerProps.js.map +1 -0
  38. package/lib/commonjs/modules/FWNavigatorModule.js.map +1 -1
  39. package/lib/commonjs/modules/FireworkSDKModule.js.map +1 -1
  40. package/lib/commonjs/modules/ShoppingModule.js.map +1 -1
  41. package/lib/module/FWNavigator.js +18 -15
  42. package/lib/module/FWNavigator.js.map +1 -1
  43. package/lib/module/FireworkSDK.js +23 -11
  44. package/lib/module/FireworkSDK.js.map +1 -1
  45. package/lib/module/VideoShopping.js +3 -16
  46. package/lib/module/VideoShopping.js.map +1 -1
  47. package/lib/module/components/VideoFeed.js.map +1 -1
  48. package/lib/module/index.js +0 -7
  49. package/lib/module/index.js.map +1 -1
  50. package/lib/module/models/NewNativeContainerProps.js +2 -0
  51. package/lib/module/models/NewNativeContainerProps.js.map +1 -0
  52. package/lib/module/modules/FWNavigatorModule.js.map +1 -1
  53. package/lib/module/modules/FireworkSDKModule.js.map +1 -1
  54. package/lib/module/modules/ShoppingModule.js.map +1 -1
  55. package/lib/typescript/FWNavigator.d.ts +14 -8
  56. package/lib/typescript/FireworkSDK.d.ts +11 -6
  57. package/lib/typescript/VideoShopping.d.ts +2 -9
  58. package/lib/typescript/components/VideoFeed.d.ts +5 -5
  59. package/lib/typescript/index.d.ts +2 -1
  60. package/lib/typescript/models/FeedItemDetails.d.ts +25 -3
  61. package/lib/typescript/models/NewNativeContainerProps.d.ts +6 -0
  62. package/lib/typescript/modules/FWNavigatorModule.d.ts +4 -1
  63. package/lib/typescript/modules/FireworkSDKModule.d.ts +2 -1
  64. package/lib/typescript/modules/ShoppingModule.d.ts +2 -2
  65. package/package.json +1 -1
  66. package/src/FWNavigator.tsx +21 -12
  67. package/src/FireworkSDK.ts +24 -20
  68. package/src/VideoShopping.ts +5 -17
  69. package/src/components/VideoFeed.tsx +5 -8
  70. package/src/index.tsx +2 -15
  71. package/src/models/FeedItemDetails.ts +23 -3
  72. package/src/models/NewNativeContainerProps.ts +4 -0
  73. package/src/modules/FWNavigatorModule.ts +2 -1
  74. package/src/modules/FireworkSDKModule.ts +2 -1
  75. package/src/modules/ShoppingModule.ts +5 -2
  76. package/android/src/main/java/com/fireworksdk/bridge/reactnative/pages/FWCustomCTALinkContentContainerActivity.kt +0 -55
  77. package/android/src/main/java/com/fireworksdk/bridge/reactnative/pages/FWVideoShoppingCartActivity.kt +0 -43
  78. package/ios/Modules/FireworkSDKModule/FWCustomCTALinkContentContainerViewController.swift +0 -31
  79. package/lib/commonjs/components/CartContainer.js +0 -35
  80. package/lib/commonjs/components/CartContainer.js.map +0 -1
  81. package/lib/commonjs/components/CustomCTALinkContentContainer.js +0 -43
  82. package/lib/commonjs/components/CustomCTALinkContentContainer.js.map +0 -1
  83. package/lib/commonjs/components/NavigationContainer.js +0 -40
  84. package/lib/commonjs/components/NavigationContainer.js.map +0 -1
  85. package/lib/module/components/CartContainer.js +0 -18
  86. package/lib/module/components/CartContainer.js.map +0 -1
  87. package/lib/module/components/CustomCTALinkContentContainer.js +0 -26
  88. package/lib/module/components/CustomCTALinkContentContainer.js.map +0 -1
  89. package/lib/module/components/NavigationContainer.js +0 -23
  90. package/lib/module/components/NavigationContainer.js.map +0 -1
  91. package/lib/typescript/components/CartContainer.d.ts +0 -3
  92. package/lib/typescript/components/CustomCTALinkContentContainer.d.ts +0 -6
  93. package/lib/typescript/components/NavigationContainer.d.ts +0 -6
  94. package/src/components/CartContainer.tsx +0 -20
  95. package/src/components/CustomCTALinkContentContainer.tsx +0 -28
  96. package/src/components/NavigationContainer.tsx +0 -24
@@ -37,7 +37,6 @@
37
37
  8975239E2817DEF80070EBB6 /* FireworkSDKModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 897523832817DEF80070EBB6 /* FireworkSDKModule.m */; };
38
38
  8975239F2817DEF80070EBB6 /* LiveStreamModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897523852817DEF80070EBB6 /* LiveStreamModule.swift */; };
39
39
  897523A02817DEF80070EBB6 /* LiveStreamModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 897523862817DEF80070EBB6 /* LiveStreamModule.m */; };
40
- 89BA1734283619FE00C2287A /* FWCustomCTALinkContentContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BA1733283619FE00C2287A /* FWCustomCTALinkContentContainerViewController.swift */; };
41
40
  /* End PBXBuildFile section */
42
41
 
43
42
  /* Begin PBXCopyFilesBuildPhase section */
@@ -86,7 +85,6 @@
86
85
  897523832817DEF80070EBB6 /* FireworkSDKModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FireworkSDKModule.m; sourceTree = "<group>"; };
87
86
  897523852817DEF80070EBB6 /* LiveStreamModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveStreamModule.swift; sourceTree = "<group>"; };
88
87
  897523862817DEF80070EBB6 /* LiveStreamModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveStreamModule.m; sourceTree = "<group>"; };
89
- 89BA1733283619FE00C2287A /* FWCustomCTALinkContentContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FWCustomCTALinkContentContainerViewController.swift; sourceTree = "<group>"; };
90
88
  /* End PBXFileReference section */
91
89
 
92
90
  /* Begin PBXFrameworksBuildPhase section */
@@ -214,7 +212,6 @@
214
212
  897523812817DEF80070EBB6 /* AdBadgeConfiguration.swift */,
215
213
  897523822817DEF80070EBB6 /* FireworkSDKModule+CTA.swift */,
216
214
  897523832817DEF80070EBB6 /* FireworkSDKModule.m */,
217
- 89BA1733283619FE00C2287A /* FWCustomCTALinkContentContainerViewController.swift */,
218
215
  );
219
216
  path = FireworkSDKModule;
220
217
  sourceTree = "<group>";
@@ -304,7 +301,6 @@
304
301
  8975239A2817DEF80070EBB6 /* FireworkSDKModule+EventTracking.swift in Sources */,
305
302
  8975239E2817DEF80070EBB6 /* FireworkSDKModule.m in Sources */,
306
303
  897523962817DEF80070EBB6 /* ProductInfoViewConfiguration.swift in Sources */,
307
- 89BA1734283619FE00C2287A /* FWCustomCTALinkContentContainerViewController.swift in Sources */,
308
304
  8975238D2817DEF80070EBB6 /* RCTConvert+VideoFeed.swift in Sources */,
309
305
  8975238C2817DEF80070EBB6 /* RCTConvert+Shopping.swift in Sources */,
310
306
  897523602817DEEE0070EBB6 /* VideoFeed.swift in Sources */,
@@ -55,25 +55,40 @@ extension VideoFeedError {
55
55
 
56
56
  extension FeedEventDetails {
57
57
  var jsObject: [String: Any] {
58
+ var result: [String: Any] = [
59
+ "index": index,
60
+ "id": id,
61
+ "duration": duration,
62
+ ]
63
+ if let title = caption {
64
+ result["title"] = title
65
+ }
66
+
58
67
  var sourceStr: String = ""
59
68
  switch(source) {
60
69
  case .discover:
61
70
  sourceStr = "discover"
62
- case .channel(channelID: _):
71
+ case .channel(channelID: let channelID):
63
72
  sourceStr = "channel"
64
- case .channelPlaylist(channelID: _, playlistID: _):
73
+ result["channel"] = channelID
74
+ case .channelPlaylist(channelID: let channelID, playlistID: let playlistID):
65
75
  sourceStr = "playlist"
66
- case .playlistGroup(groupID: _):
76
+ result["channel"] = channelID
77
+ result["playlist"] = playlistID
78
+ case .playlistGroup(groupID: let playlistGroupID):
67
79
  sourceStr = "playlistGroup"
80
+ result["playlistGroup"] = playlistGroupID
81
+ case .dynamicContent(channelID: let channelID, parameters: let parameters):
82
+ sourceStr = "dynamicContent"
83
+ result["channel"] = channelID
84
+ result["dynamicContentParameters"] = parameters
68
85
  default:
69
86
  break
70
87
  }
71
- return [
72
- "index": index,
73
- "id": id,
74
- "duration": duration,
75
- "source": sourceStr
76
- ]
88
+
89
+ result["source"] = sourceStr;
90
+
91
+ return result
77
92
  }
78
93
  }
79
94
 
@@ -8,16 +8,8 @@
8
8
  import UIKit
9
9
 
10
10
  class FWNavigatorContainerViewController: UIViewController {
11
- var callbackId: String!
12
-
13
- init(callbackId: String) {
14
- self.callbackId = callbackId
15
- super.init(nibName: nil, bundle: nil)
16
- }
17
-
18
- required init?(coder: NSCoder) {
19
- super.init(coder: coder)
20
- }
11
+ var moduleName: String = ""
12
+ var properties: [String: Any] = [:]
21
13
 
22
14
  override func viewDidLoad() {
23
15
  super.viewDidLoad()
@@ -25,7 +17,7 @@ class FWNavigatorContainerViewController: UIViewController {
25
17
  }
26
18
 
27
19
  private func loadContent() {
28
- let rctRootView = RCTRootView.init(bridge: RCTBridge.current(), moduleName: "FWNavigationContainer", initialProperties: ["callbackId": callbackId ?? ""])
20
+ let rctRootView = RCTRootView.init(bridge: RCTBridge.current(), moduleName: moduleName, initialProperties: properties)
29
21
  view.addSubview(rctRootView)
30
22
  rctRootView.translatesAutoresizingMaskIntoConstraints = false
31
23
 
@@ -2,7 +2,7 @@
2
2
  // FWNavigatorModule.m
3
3
  // react-native-firework-sdk
4
4
  //
5
- // Created by 熊韦华 on 2022/4/22.
5
+ // Created by Big Bear Xiong on 2022/4/22.
6
6
  //
7
7
 
8
8
  // The FireworkNavigatorModule exposes instances of Objective-C (native) classes to JavaScript (JS) as JS objects
@@ -11,7 +11,8 @@
11
11
 
12
12
  @interface RCT_EXTERN_REMAP_MODULE(FWNavigatorModule, FWNavigatorModule, NSObject)
13
13
 
14
- RCT_EXTERN_METHOD(pushNativeContainer:(NSString *)callbackId resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
14
+ RCT_EXTERN_METHOD(pushNativeContainer:(NSDictionary *)props resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
15
15
  RCT_EXTERN_METHOD(popNativeContainer:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
16
+ RCT_EXTERN_METHOD(canPopNativeContainer:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
16
17
 
17
18
  @end
@@ -2,7 +2,7 @@
2
2
  // File.swift
3
3
  // react-native-firework-sdk
4
4
  //
5
- // Created by 熊韦华 on 2022/4/21.
5
+ // Created by Big Bear Xiong on 2022/4/21.
6
6
  //
7
7
 
8
8
  import FireworkVideo
@@ -18,7 +18,7 @@ class FWNavigatorModule: RCTEventEmitter, FWNavigator {
18
18
  }
19
19
 
20
20
  @objc(pushNativeContainer:resolver:rejecter:)
21
- func pushNativeContainer(_ callbackId: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
21
+ func pushNativeContainer(_ props: NSDictionary?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
22
22
  #if DEBUG
23
23
  let formatter = DateFormatter()
24
24
  formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
@@ -26,7 +26,12 @@ class FWNavigatorModule: RCTEventEmitter, FWNavigator {
26
26
  #endif
27
27
 
28
28
  DispatchQueue.main.async {
29
- guard let callbackId = callbackId else {
29
+ guard let props = props as? [String: Any] else {
30
+ resolver(false)
31
+ return
32
+ }
33
+
34
+ guard let appComponentName = gAppComponentName else {
30
35
  resolver(false)
31
36
  return
32
37
  }
@@ -40,12 +45,14 @@ class FWNavigatorModule: RCTEventEmitter, FWNavigator {
40
45
  self.sendEvent(withName: FWEventName.LogMessage.rawValue, body: ["message": "[iOS] Before creating containerViewController \(formatter.string(from: Date()))"])
41
46
  #endif
42
47
 
43
- let containerViewController = FWNavigatorContainerViewController(callbackId: callbackId)
48
+ let containerViewController = FWNavigatorContainerViewController()
44
49
 
45
50
  #if DEBUG
46
51
  self.sendEvent(withName: FWEventName.LogMessage.rawValue, body: ["message": "[iOS] After creating containerViewController \(formatter.string(from: Date()))"])
47
52
  #endif
48
53
 
54
+ containerViewController.moduleName = appComponentName
55
+ containerViewController.properties = props
49
56
  containerViewController.modalPresentationStyle = .fullScreen
50
57
 
51
58
  #if DEBUG
@@ -63,15 +70,46 @@ class FWNavigatorModule: RCTEventEmitter, FWNavigator {
63
70
  }
64
71
 
65
72
  @objc(popNativeContainer:rejecter:)
66
- func popNativeContainer(resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
73
+ func popNativeContainer(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
67
74
  DispatchQueue.main.async {
68
- guard let presentedVC = RCTPresentedViewController() else {
75
+ if let navigatorContainerVC = RCTPresentedViewController() as? FWNavigatorContainerViewController,
76
+ navigatorContainerVC.presentingViewController != nil {
77
+ navigatorContainerVC.dismiss(animated: true) {
78
+ resolver(true)
79
+ }
80
+ } else if let cartViewController = gCartViewController {
81
+ cartViewController.navigationController?.popViewController(animated: true)
82
+ gCartViewController = nil
83
+ resolver(true)
84
+ } else if let presentedVC = RCTPresentedViewController(),
85
+ let presentingVC = presentedVC.presentingViewController {
86
+ if presentedVC.modalPresentationStyle == .custom,
87
+ presentingVC is FireworkVideo.PlayerViewController {
88
+ // For consistency with Android SDK behavior
89
+ (presentingVC.presentingViewController ?? presentingVC).dismiss(animated: true) {
90
+ resolver(true)
91
+ }
92
+ } else {
93
+ presentedVC.dismiss(animated: true) {
94
+ resolver(true)
95
+ }
96
+ }
97
+ } else {
69
98
  resolver(false)
70
- return
71
99
  }
100
+ }
101
+ }
72
102
 
73
- presentedVC.dismiss(animated: true) {
103
+ @objc(canPopNativeContainer:rejecter:)
104
+ func canPopNativeContainer(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
105
+ DispatchQueue.main.async {
106
+ if let presentedVC = RCTPresentedViewController(),
107
+ presentedVC.presentingViewController != nil {
108
+ resolver(true)
109
+ } else if let _ = gCartViewController {
74
110
  resolver(true)
111
+ } else {
112
+ resolver(false)
75
113
  }
76
114
  }
77
115
  }
@@ -2,12 +2,13 @@
2
2
  // FWNavigatorProtocol.swift
3
3
  // react-native-firework-sdk
4
4
  //
5
- // Created by 熊韦华 on 2022/4/21.
5
+ // Created by Big Bear Xiong on 2022/4/21.
6
6
  //
7
7
 
8
8
  import Foundation
9
9
 
10
10
  protocol FWNavigator {
11
- func pushNativeContainer(_ callbackId: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock)
12
- func popNativeContainer(resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock)
11
+ func pushNativeContainer(_ props: NSDictionary?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock)
12
+ func popNativeContainer(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock)
13
+ func canPopNativeContainer(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock)
13
14
  }
@@ -18,15 +18,23 @@ extension FireworkSDKModule: FireworkVideoCTADelegate {
18
18
 
19
19
  sendEvent(withName: FWEventName.CustomCTAClick.rawValue, body: ["url": url.absoluteString])
20
20
 
21
- if customCTALinkContentRenderEnabled, let presentedVC = RCTPresentedViewController() {
22
- let customCTALinkContentContainerVC = FWCustomCTALinkContentContainerViewController()
23
- customCTALinkContentContainerVC.modalPresentationStyle = .fullScreen
24
- customCTALinkContentContainerVC.url = url.absoluteString
25
- presentedVC.present(customCTALinkContentContainerVC, animated: true) {
21
+ var customCTALinkContentPageEnabled = false
22
+ if let moduleName = gAppComponentName,
23
+ let initialRouteName = customCTALinkContentPageRouteName,
24
+ let presentedVC = RCTPresentedViewController() {
25
+ customCTALinkContentPageEnabled = true
26
+ let containerViewController = FWNavigatorContainerViewController()
27
+ containerViewController.moduleName = moduleName
28
+ containerViewController.properties = [
29
+ "initialRouteName": initialRouteName,
30
+ "initialParams": ["url": url.absoluteString]
31
+ ]
32
+ containerViewController.modalPresentationStyle = .fullScreen
33
+ presentedVC.present(containerViewController, animated: true) {
26
34
 
27
35
  }
28
36
  }
29
37
 
30
- return customCTAClickEnabled || customCTALinkContentRenderEnabled
38
+ return customCTAClickEnabled || customCTALinkContentPageEnabled
31
39
  }
32
40
  }
@@ -13,9 +13,10 @@
13
13
  _RCT_EXTERN_REMAP_METHOD(init, initializeSDK:(NSString * __nullable)userId, NO)
14
14
  RCT_EXTERN_METHOD(openVideoPlayer:(NSString *)url config:(NSDictionary *)config)
15
15
  RCT_EXTERN_METHOD(setCustomCTAClickEnabled:(BOOL)enabled)
16
- RCT_EXTERN_METHOD(setCustomCTALinkContentRenderEnabled:(BOOL)enabled)
16
+ RCT_EXTERN_METHOD(setCustomCTALinkContentPageRouteName:(NSString *)name resolver: (RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
17
17
  RCT_EXTERN_METHOD(setShareBaseURL:(NSString *)url resolver: (RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
18
18
  RCT_EXTERN_METHOD(setVideoPlaybackEventEnabled:(BOOL)enabled)
19
19
  RCT_EXTERN_METHOD(setAdBadgeConfiguration:(NSDictionary *)config resolver: (RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
20
+ RCT_EXTERN_METHOD(setAppComponentName:(NSString *)name resolver: (RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
20
21
 
21
22
  @end
@@ -11,13 +11,14 @@ import FireworkVideo
11
11
 
12
12
  var gShareBaseURL: String?
13
13
  var gAdBadgeConfiguration: AdBadgeConfiguration?
14
+ var gAppComponentName: String?
14
15
 
15
16
  @objc(FireworkSDKModule)
16
17
  class FireworkSDKModule: RCTEventEmitter, FireworkVideoSDKDelegate {
17
18
  // var shareBaseURL: String?
18
19
  var customCTAClickEnabled: Bool = false
19
20
 
20
- var customCTALinkContentRenderEnabled: Bool = false
21
+ var customCTALinkContentPageRouteName: String?
21
22
 
22
23
  /// Decide whether to send video playback event to RN.
23
24
  var enableVideoPlayBackEvent: Bool = false
@@ -73,9 +74,10 @@ class FireworkSDKModule: RCTEventEmitter, FireworkVideoSDKDelegate {
73
74
  customCTAClickEnabled = enabled
74
75
  }
75
76
 
76
- @objc(setCustomCTALinkContentRenderEnabled:)
77
- func setCustomCTALinkContentRenderEnabled(_ enabled: Bool) {
78
- customCTALinkContentRenderEnabled = enabled
77
+ @objc(setCustomCTALinkContentPageRouteName:resolver:rejecter:)
78
+ func setCustomCTALinkContentPageRouteName(_ name: String, resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) {
79
+ customCTALinkContentPageRouteName = name
80
+ resolver([:])
79
81
  }
80
82
 
81
83
  @objc(setShareBaseURL:resolver:rejecter:)
@@ -94,6 +96,12 @@ class FireworkSDKModule: RCTEventEmitter, FireworkVideoSDKDelegate {
94
96
  gAdBadgeConfiguration = RCTConvert.adBadgeConfiguration(config)
95
97
  resolver([:])
96
98
  }
99
+
100
+ @objc(setAppComponentName:resolver:rejecter:)
101
+ func setAppComponentName(_ name: String, resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) {
102
+ gAppComponentName = name
103
+ resolver([:])
104
+ }
97
105
 
98
106
  // MARK: - FireworkVideoSDKDelegate
99
107
  func fireworkVideoDidLoadSuccessfully() {
@@ -9,6 +9,7 @@ import UIKit
9
9
  import FireworkVideo
10
10
 
11
11
  class CartViewController: UIViewController, CartViewRepresentable {
12
+ var properties: [String: Any] = [:]
12
13
  var indicator: UIActivityIndicatorView? = nil
13
14
  var callbackId: Int!
14
15
  var directShowCartPage = false
@@ -52,6 +53,10 @@ class CartViewController: UIViewController, CartViewRepresentable {
52
53
  guard let cbId = noti.userInfo?["cbid"] as? Int, callbackId == cbId else {
53
54
  return
54
55
  }
56
+
57
+ if let properties = noti.userInfo?["properties"] as? [String: Any] {
58
+ self.properties = properties
59
+ }
55
60
 
56
61
  if isViewLoaded {
57
62
  directShowCustomCartView()
@@ -84,7 +89,7 @@ class CartViewController: UIViewController, CartViewRepresentable {
84
89
  private func directShowCustomCartView() {
85
90
  indicator?.stopAnimating()
86
91
 
87
- let rctRootView = RCTRootView.init(bridge: RCTBridge.current(), moduleName: "FWShoppingCartPage", initialProperties: nil)
92
+ let rctRootView = RCTRootView.init(bridge: RCTBridge.current(), moduleName: gAppComponentName ?? "", initialProperties: properties)
88
93
  view.addSubview(rctRootView)
89
94
  rctRootView.translatesAutoresizingMaskIntoConstraints = false
90
95
 
@@ -15,7 +15,6 @@ RCT_EXTERN_METHOD(setCartItemCount:(int)itemCounts)
15
15
  RCT_EXTERN_METHOD(updateVideoProducts:(NSArray *)products cbId:(nonnull NSNumber *)cbid)
16
16
  RCT_EXTERN_METHOD(updateProductViewConfig:(NSDictionary *)config cbId:(nonnull NSNumber *)cbid)
17
17
  RCT_EXTERN_METHOD(updateAddToCartStatus:(NSString *)res tips:(nullable NSString *)tips cbId:(nonnull NSNumber *)cbid)
18
- RCT_EXTERN_METHOD(jumpToCartPage:(nonnull NSNumber *)cbid)
19
- RCT_EXTERN_METHOD(exitCartPage)
18
+ RCT_EXTERN_METHOD(jumpToCartPage:(nonnull NSNumber *)cbid props:(NSDictionary *)props)
20
19
 
21
20
  @end
@@ -8,6 +8,8 @@
8
8
  import Foundation
9
9
  import FireworkVideo
10
10
 
11
+ var gCartViewController: CartViewController?;
12
+
11
13
  @objc(ShoppingModule)
12
14
  class ShoppingModule: RCTEventEmitter, FireworkVideoShoppingDelegate, CartViewControllerProviding {
13
15
 
@@ -112,21 +114,17 @@ class ShoppingModule: RCTEventEmitter, FireworkVideoShoppingDelegate, CartViewCo
112
114
  }
113
115
 
114
116
  @objc
115
- func jumpToCartPage(_ cbId: NSNumber) {
117
+ func jumpToCartPage(_ cbId: NSNumber, props: NSDictionary) {
116
118
  DispatchQueue.main.async {
117
- let noti = Notification(name: Notification.Name(rawValue: "showCustomCartView"), object: nil, userInfo: ["cbid": Int(truncating: cbId)])
119
+ let properties: [String: Any] = (props as? [String: Any]) ?? [:]
120
+ let noti = Notification(name: Notification.Name(rawValue: "showCustomCartView"), object: nil, userInfo: [
121
+ "cbid": Int(truncating: cbId),
122
+ "properties": properties
123
+ ])
118
124
  NotificationCenter.default.post(noti)
119
125
  }
120
126
  }
121
127
 
122
- @objc
123
- func exitCartPage() {
124
- DispatchQueue.main.async {
125
- self.cartViewController?.navigationController?.popViewController(animated: true)
126
- self.cartViewController = nil
127
- }
128
- }
129
-
130
128
  // MARK: - FireworkVideoShoppingDelegate
131
129
  func fireworkShopping(_ fireworkShopping: FireworkVideoShopping, willDisplayProductInfo productInfoViewConfigurator: ProductInfoViewConfigurable, forVideo video: VideoDetails) {
132
130
  let callbackId = ShoppingModule.generateCallbackId()
@@ -154,8 +152,8 @@ class ShoppingModule: RCTEventEmitter, FireworkVideoShoppingDelegate, CartViewCo
154
152
  let callbackId = ShoppingModule.generateCallbackId()
155
153
  sendEvent(withName: ShoppingEventName.ClickCartIcon.rawValue, body: ["callbackId": callbackId])
156
154
 
157
- cartViewController = CartViewController(callbackId: callbackId)
158
- return cartViewController!
155
+ gCartViewController = CartViewController(callbackId: callbackId)
156
+ return gCartViewController!
159
157
  }
160
158
  }
161
159
 
@@ -32,29 +32,23 @@ class FWNavigator {
32
32
  }
33
33
 
34
34
  constructor() {
35
- _defineProperty(this, "_currentCallbackId", 0);
36
-
37
- _defineProperty(this, "navigatorPages", new Map());
38
-
39
35
  _FWNavigatorModule.FWNavigatorModuleEventEmitter.addListener(_FWEventName.FWEventName.LogMessage, () => {});
40
36
  }
41
37
  /**
42
- * Push RN page from native page. The RN page is embedded in a native container.
43
- * @param {React.ReactNode} page The RN page.
44
- * @returns {Promise<boolean>} The result of pushing RN page from native page
38
+ * Push a new native container. We will render your app component in new native container.
39
+ * Please set your app component name through FireworkSDK.getInstance().appComponentName before calling this method
40
+ * @param {FWNativeContainerProps} props We will pass the props to your app component.
41
+ * @returns {Promise<boolean>} The result of pushing RN page from native page.
45
42
  */
46
43
 
47
44
 
48
- pushNativeContainer(page) {
49
- _FWLoggerUtil.default.log(`Enter pushNativeContainer`);
45
+ pushNativeContainer(props) {
46
+ _FWLoggerUtil.default.log(`Enter pushNewNativeContainer`);
50
47
 
51
- this._currentCallbackId = this._currentCallbackId + 1;
52
- const callbackId = `${this._currentCallbackId}`;
53
- this.navigatorPages.set(callbackId, page);
54
- return _FWNavigatorModule.default.pushNativeContainer(callbackId);
48
+ return _FWNavigatorModule.default.pushNativeContainer(props);
55
49
  }
56
50
  /**
57
- * Pop top-most native container. The native container embed the RN page.
51
+ * Pop top-most native container.
58
52
  * @returns {Promise<boolean>} The result of poping top-most native container.
59
53
  */
60
54
 
@@ -62,6 +56,15 @@ class FWNavigator {
62
56
  popNativeContainer() {
63
57
  return _FWNavigatorModule.default.popNativeContainer();
64
58
  }
59
+ /**
60
+ * Indicate if we can pop top-most native container.
61
+ * @returns {Promise<boolean>} If the result is true, we could call popNativeContainer to pop top-most native container.
62
+ */
63
+
64
+
65
+ canPopNativeContainer() {
66
+ return _FWNavigatorModule.default.canPopNativeContainer();
67
+ }
65
68
 
66
69
  }
67
70
 
@@ -1 +1 @@
1
- {"version":3,"sources":["FWNavigator.tsx"],"names":["FWNavigator","getInstance","_instance","constructor","Map","FWNavigatorModuleEventEmitter","addListener","FWEventName","LogMessage","pushNativeContainer","page","FWLoggerUtil","log","_currentCallbackId","callbackId","navigatorPages","set","FWNavigatorModule","popNativeContainer"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;;;;;;;;;AAEA;AACA;AACA;AACA,MAAMA,WAAN,CAAkB;AAKS,SAAXC,WAAW,GAAgB;AACvC,QAAI,CAACD,WAAW,CAACE,SAAjB,EAA4B;AAC1BF,MAAAA,WAAW,CAACE,SAAZ,GAAwB,IAAIF,WAAJ,EAAxB;AACD;;AACD,WAAOA,WAAW,CAACE,SAAnB;AACD;;AAEOC,EAAAA,WAAW,GAAG;AAAA,gDAVe,CAUf;;AAAA,4CATE,IAAIC,GAAJ,EASF;;AACpBC,qDAA8BC,WAA9B,CAA0CC,yBAAYC,UAAtD,EAAkE,MAAM,CAAE,CAA1E;AACD;AAED;AACF;AACA;AACA;AACA;;;AACSC,EAAAA,mBAAmB,CAACC,IAAD,EAA0C;AAClEC,0BAAaC,GAAb,CAAkB,2BAAlB;;AACA,SAAKC,kBAAL,GAA0B,KAAKA,kBAAL,GAA0B,CAApD;AACA,UAAMC,UAAU,GAAI,GAAE,KAAKD,kBAAmB,EAA9C;AACA,SAAKE,cAAL,CAAoBC,GAApB,CAAwBF,UAAxB,EAAoCJ,IAApC;AACA,WAAOO,2BAAkBR,mBAAlB,CAAsCK,UAAtC,CAAP;AACD;AAED;AACF;AACA;AACA;;;AACSI,EAAAA,kBAAkB,GAAqB;AAC5C,WAAOD,2BAAkBC,kBAAlB,EAAP;AACD;;AAnCe;;gBAAZlB,W;;eAsCSA,W","sourcesContent":["import { FWEventName } from './models/FWEventName';\nimport FWNavigatorModule, {\n FWNavigatorModuleEventEmitter,\n} from './modules/FWNavigatorModule';\nimport FWLoggerUtil from './utils/FWLoggerUtil';\n\n/**\n * You can use this class for pushing RN page from the native page.\n */\nclass FWNavigator {\n private static _instance?: FWNavigator;\n private _currentCallbackId: number = 0;\n public navigatorPages = new Map<string, React.ReactNode>();\n\n public static getInstance(): FWNavigator {\n if (!FWNavigator._instance) {\n FWNavigator._instance = new FWNavigator();\n }\n return FWNavigator._instance!;\n }\n\n private constructor() {\n FWNavigatorModuleEventEmitter.addListener(FWEventName.LogMessage, () => {});\n }\n\n /**\n * Push RN page from native page. The RN page is embedded in a native container.\n * @param {React.ReactNode} page The RN page.\n * @returns {Promise<boolean>} The result of pushing RN page from native page\n */\n public pushNativeContainer(page: React.ReactNode): Promise<boolean> {\n FWLoggerUtil.log(`Enter pushNativeContainer`);\n this._currentCallbackId = this._currentCallbackId + 1;\n const callbackId = `${this._currentCallbackId}`;\n this.navigatorPages.set(callbackId, page);\n return FWNavigatorModule.pushNativeContainer(callbackId);\n }\n\n /**\n * Pop top-most native container. The native container embed the RN page.\n * @returns {Promise<boolean>} The result of poping top-most native container.\n */\n public popNativeContainer(): Promise<boolean> {\n return FWNavigatorModule.popNativeContainer();\n }\n}\n\nexport default FWNavigator;\n"]}
1
+ {"version":3,"sources":["FWNavigator.tsx"],"names":["FWNavigator","getInstance","_instance","constructor","FWNavigatorModuleEventEmitter","addListener","FWEventName","LogMessage","pushNativeContainer","props","FWLoggerUtil","log","FWNavigatorModule","popNativeContainer","canPopNativeContainer"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;;;;;;;;;AAMA;AACA;AACA;AACA,MAAMA,WAAN,CAAkB;AAGS,SAAXC,WAAW,GAAgB;AACvC,QAAI,CAACD,WAAW,CAACE,SAAjB,EAA4B;AAC1BF,MAAAA,WAAW,CAACE,SAAZ,GAAwB,IAAIF,WAAJ,EAAxB;AACD;;AACD,WAAOA,WAAW,CAACE,SAAnB;AACD;;AAEOC,EAAAA,WAAW,GAAG;AACpBC,qDAA8BC,WAA9B,CAA0CC,yBAAYC,UAAtD,EAAkE,MAAM,CAAE,CAA1E;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACSC,EAAAA,mBAAmB,CAACC,KAAD,EAAkD;AAC1EC,0BAAaC,GAAb,CAAkB,8BAAlB;;AAEA,WAAOC,2BAAkBJ,mBAAlB,CAAsCC,KAAtC,CAAP;AACD;AAED;AACF;AACA;AACA;;;AACSI,EAAAA,kBAAkB,GAAqB;AAC5C,WAAOD,2BAAkBC,kBAAlB,EAAP;AACD;AAED;AACF;AACA;AACA;;;AACSC,EAAAA,qBAAqB,GAAqB;AAC/C,WAAOF,2BAAkBE,qBAAlB,EAAP;AACD;;AAxCe;;gBAAZd,W;;eA2CSA,W","sourcesContent":["import { FWEventName } from './models/FWEventName';\nimport FWNavigatorModule, {\n FWNavigatorModuleEventEmitter,\n} from './modules/FWNavigatorModule';\nimport FWLoggerUtil from './utils/FWLoggerUtil';\n\ntype FWNativeContainerProps = {\n [key: string]: any;\n};\n\n/**\n * You can use this class for pushing RN page from the native page.\n */\nclass FWNavigator {\n private static _instance?: FWNavigator;\n\n public static getInstance(): FWNavigator {\n if (!FWNavigator._instance) {\n FWNavigator._instance = new FWNavigator();\n }\n return FWNavigator._instance!;\n }\n\n private constructor() {\n FWNavigatorModuleEventEmitter.addListener(FWEventName.LogMessage, () => {});\n }\n\n /**\n * Push a new native container. We will render your app component in new native container.\n * Please set your app component name through FireworkSDK.getInstance().appComponentName before calling this method\n * @param {FWNativeContainerProps} props We will pass the props to your app component.\n * @returns {Promise<boolean>} The result of pushing RN page from native page.\n */\n public pushNativeContainer(props: FWNativeContainerProps): Promise<boolean> {\n FWLoggerUtil.log(`Enter pushNewNativeContainer`);\n\n return FWNavigatorModule.pushNativeContainer(props);\n }\n\n /**\n * Pop top-most native container.\n * @returns {Promise<boolean>} The result of poping top-most native container.\n */\n public popNativeContainer(): Promise<boolean> {\n return FWNavigatorModule.popNativeContainer();\n }\n\n /**\n * Indicate if we can pop top-most native container.\n * @returns {Promise<boolean>} If the result is true, we could call popNativeContainer to pop top-most native container.\n */\n public canPopNativeContainer(): Promise<boolean> {\n return FWNavigatorModule.canPopNativeContainer();\n }\n}\n\nexport default FWNavigator;\n"]}
@@ -57,19 +57,16 @@ class FireworkSDK {
57
57
  }
58
58
 
59
59
  /**
60
- * The custom render method of CTA link content.
61
- * We will show a native container to display the element returned by the render method.
60
+ * The custom CTA link content page route name.
62
61
  */
63
- get customCTALinkContentRender() {
64
- return this._customCTALinkContentRender;
62
+ get customCTALinkContentPageRouteName() {
63
+ return this._customCTALinkContentPageRouteName;
65
64
  }
66
65
 
67
- set customCTALinkContentRender(value) {
68
- _FWLoggerUtil.default.log(`Set customCTALinkContentRender ${!!value}`);
66
+ set customCTALinkContentPageRouteName(value) {
67
+ this._customCTALinkContentPageRouteName = value;
69
68
 
70
- this._customCTALinkContentRender = value;
71
-
72
- _FireworkSDKModule.default.setCustomCTALinkContentRenderEnabled(value ? true : false);
69
+ _FireworkSDKModule.default.setCustomCTALinkContentPageRouteName(value !== null && value !== void 0 ? value : '');
73
70
  }
74
71
 
75
72
  /**
@@ -95,7 +92,7 @@ class FireworkSDK {
95
92
  set shareBaseURL(value) {
96
93
  this._shareBaseURL = value;
97
94
 
98
- _FireworkSDKModule.default.setShareBaseURL(value).then(() => {
95
+ _FireworkSDKModule.default.setShareBaseURL(value !== null && value !== void 0 ? value : '').then(() => {
99
96
  this.eventEmitter.emit(_FWEventName.FWEventName.ShareBaseURLUpdated);
100
97
  });
101
98
  }
@@ -110,11 +107,24 @@ class FireworkSDK {
110
107
  set adBadgeConfiguration(value) {
111
108
  this._adBadgeConfiguration = value;
112
109
 
113
- _FireworkSDKModule.default.setAdBadgeConfiguration(value).then(() => {
110
+ _FireworkSDKModule.default.setAdBadgeConfiguration(value !== null && value !== void 0 ? value : {}).then(() => {
114
111
  this.eventEmitter.emit(_FWEventName.FWEventName.AdBadgeConfigurationUpdated);
115
112
  });
116
113
  }
117
114
 
115
+ /**
116
+ * The app component name.
117
+ */
118
+ get appComponentName() {
119
+ return this._appComponentName;
120
+ }
121
+
122
+ set appComponentName(value) {
123
+ this._appComponentName = value;
124
+
125
+ _FireworkSDKModule.default.setAppComponentName(value !== null && value !== void 0 ? value : '');
126
+ }
127
+
118
128
  get eventEmitter() {
119
129
  return _FireworkSDKModule.FireworkSDKModuleEventEmitter;
120
130
  }
@@ -163,7 +173,7 @@ class FireworkSDK {
163
173
 
164
174
  _defineProperty(this, "_onCustomCTAClick", void 0);
165
175
 
166
- _defineProperty(this, "_customCTALinkContentRender", void 0);
176
+ _defineProperty(this, "_customCTALinkContentPageRouteName", void 0);
167
177
 
168
178
  _defineProperty(this, "_onVideoPlayback", void 0);
169
179
 
@@ -171,6 +181,8 @@ class FireworkSDK {
171
181
 
172
182
  _defineProperty(this, "_adBadgeConfiguration", void 0);
173
183
 
184
+ _defineProperty(this, "_appComponentName", void 0);
185
+
174
186
  this.eventEmitter.addListener(_FWEventName.FWEventName.SDKInit, event => {
175
187
  _FWLoggerUtil.default.log(`Receive SDKInit event ${event === null || event === void 0 ? void 0 : event.error}`);
176
188
 
@@ -1 +1 @@
1
- {"version":3,"sources":["FireworkSDK.ts"],"names":["FireworkSDK","onCustomCTAClick","_onCustomCTAClick","value","FWLoggerUtil","log","FireworkSDKModule","setCustomCTAClickEnabled","customCTALinkContentRender","_customCTALinkContentRender","setCustomCTALinkContentRenderEnabled","onVideoPlayback","_onVideoPlayback","setVideoPlaybackEventEnabled","shareBaseURL","_shareBaseURL","setShareBaseURL","then","eventEmitter","emit","FWEventName","ShareBaseURLUpdated","adBadgeConfiguration","_adBadgeConfiguration","setAdBadgeConfiguration","AdBadgeConfigurationUpdated","FireworkSDKModuleEventEmitter","shopping","VideoShopping","getInstance","liveStream","LiveStream","navigator","FWNavigator","_instance","constructor","addListener","SDKInit","event","error","onSDKInit","LogMessage","logNativeMessage","message","CustomCTAClick","url","VideoPlayback","eventName","VideoFeedClick","info","id","onVideoFeedClick","init","userId","ShoppingModule","LiveStreamModule","openVideoPlayer","config"],"mappings":"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","sourcesContent":["import type { NativeEventEmitter } from 'react-native';\nimport LiveStream from './LiveStream';\n\nimport type AdBadgeConfiguration from './models/AdBadgeConfiguration';\nimport { FWEventName } from './models/FWEventName';\nimport type {\n CustomCTAClickEvent,\n SDKInitEvent,\n VideoFeedClickEvent,\n VideoPlaybackEvent,\n} from './models/FWEvents';\nimport type VideoPlayerConfiguration from './models/VideoPlayerConfiguration';\nimport FireworkSDKModule, {\n FireworkSDKModuleEventEmitter,\n} from './modules/FireworkSDKModule';\nimport LiveStreamModule from './modules/LiveStreamModule';\nimport ShoppingModule from './modules/ShoppingModule';\nimport VideoShopping from './VideoShopping';\nimport FWNavigator from './FWNavigator';\nimport FWLoggerUtil from './utils/FWLoggerUtil';\n\nexport type SDKInitCallback = (event: SDKInitEvent) => void;\nexport type CustomCTAClickCallback = (event: CustomCTAClickEvent) => void;\nexport type CustomCTALinkContentRender = (\n event: CustomCTAClickEvent\n) => React.ReactNode | null;\nexport type VideoPlaybackCallback = (event: VideoPlaybackEvent) => void;\nexport type VideoFeedClickCallback = (event: VideoFeedClickEvent) => void;\n\n/**\n * Entry class of Firework SDK, which supports the sdk initialization and global configuration.\n */\nclass FireworkSDK {\n private static _instance?: FireworkSDK;\n\n /**\n * The callback of SDK initialization.\n */\n public onSDKInit?: SDKInitCallback;\n\n /**\n * the callback of clicking Video Feed.\n */\n public onVideoFeedClick?: VideoFeedClickCallback;\n\n /**\n * The callback of clicking custom CTA.\n */\n public get onCustomCTAClick(): CustomCTAClickCallback | undefined {\n return this._onCustomCTAClick;\n }\n public set onCustomCTAClick(value: CustomCTAClickCallback | undefined) {\n FWLoggerUtil.log(`Set onCustomCTAClick callback ${!!value}`);\n this._onCustomCTAClick = value;\n FireworkSDKModule.setCustomCTAClickEnabled(value ? true : false);\n }\n private _onCustomCTAClick: CustomCTAClickCallback | undefined;\n\n /**\n * The custom render method of CTA link content.\n * We will show a native container to display the element returned by the render method.\n */\n public get customCTALinkContentRender():\n | CustomCTALinkContentRender\n | undefined {\n return this._customCTALinkContentRender;\n }\n public set customCTALinkContentRender(\n value: CustomCTALinkContentRender | undefined\n ) {\n FWLoggerUtil.log(`Set customCTALinkContentRender ${!!value}`);\n this._customCTALinkContentRender = value;\n FireworkSDKModule.setCustomCTALinkContentRenderEnabled(\n value ? true : false\n );\n }\n private _customCTALinkContentRender: CustomCTALinkContentRender | undefined;\n\n /**\n * The callback of video playback.\n */\n public get onVideoPlayback(): VideoPlaybackCallback | undefined {\n return this._onVideoPlayback;\n }\n public set onVideoPlayback(value: VideoPlaybackCallback | undefined) {\n this._onVideoPlayback = value;\n FireworkSDKModule.setVideoPlaybackEventEnabled(value ? true : false);\n }\n private _onVideoPlayback?: VideoPlaybackCallback | undefined;\n\n /**\n * The share base URL of videos.\n */\n public get shareBaseURL(): string | undefined {\n return this._shareBaseURL;\n }\n public set shareBaseURL(value: string | undefined) {\n this._shareBaseURL = value;\n FireworkSDKModule.setShareBaseURL(value).then(() => {\n this.eventEmitter.emit(FWEventName.ShareBaseURLUpdated);\n });\n }\n private _shareBaseURL: string | undefined;\n\n /**\n * The configuration for ad badges.\n */\n public get adBadgeConfiguration(): AdBadgeConfiguration | undefined {\n return this._adBadgeConfiguration;\n }\n public set adBadgeConfiguration(value: AdBadgeConfiguration | undefined) {\n this._adBadgeConfiguration = value;\n FireworkSDKModule.setAdBadgeConfiguration(value).then(() => {\n this.eventEmitter.emit(FWEventName.AdBadgeConfigurationUpdated);\n });\n }\n private _adBadgeConfiguration?: AdBadgeConfiguration | undefined;\n\n private get eventEmitter(): NativeEventEmitter {\n return FireworkSDKModuleEventEmitter;\n }\n\n /**\n * Get VideoShopping object.\n */\n public get shopping(): VideoShopping {\n return VideoShopping.getInstance();\n }\n\n /**\n * Get LiveStream object.\n */\n public get liveStream(): LiveStream {\n return LiveStream.getInstance();\n }\n\n /**\n * Get FWNavigator object.\n */\n public get navigator(): FWNavigator {\n return FWNavigator.getInstance();\n }\n\n /**\n * Get global single instance of FireworkSDK class.\n * @returns FireworkSDK\n */\n public static getInstance() {\n if (!FireworkSDK._instance) {\n FireworkSDK._instance = new FireworkSDK();\n }\n\n return FireworkSDK._instance!;\n }\n\n private constructor() {\n this.eventEmitter.addListener(FWEventName.SDKInit, (event) => {\n FWLoggerUtil.log(`Receive SDKInit event ${event?.error}`);\n\n if (this.onSDKInit) {\n this.onSDKInit(event ?? {});\n }\n });\n\n this.eventEmitter.addListener(FWEventName.LogMessage, (event) => {\n FWLoggerUtil.logNativeMessage(event.message);\n });\n\n this.eventEmitter.addListener(FWEventName.CustomCTAClick, (event) => {\n FWLoggerUtil.log(`Receive CustomCTAClick url ${event?.url}`);\n\n if (this.onCustomCTAClick) {\n this.onCustomCTAClick(event ?? {});\n }\n });\n\n this.eventEmitter.addListener(FWEventName.VideoPlayback, (event) => {\n FWLoggerUtil.log(`Receive VideoPlayback event ${event?.eventName}`);\n\n if (this.onVideoPlayback) {\n this.onVideoPlayback(event ?? {});\n }\n });\n\n this.eventEmitter.addListener(FWEventName.VideoFeedClick, (event) => {\n FWLoggerUtil.log(`Receive VideoFeedClick event ${event?.info.id}`);\n\n if (this.onVideoFeedClick) {\n this.onVideoFeedClick(event ?? {});\n }\n });\n }\n\n /**\n * Initializes Firework SDK.\n * @param {string?} userId An id to uniquely identify device or user.\n */\n public init(userId?: string) {\n FireworkSDKModule.init(userId);\n ShoppingModule.init();\n LiveStreamModule.init();\n }\n\n /**\n * Open Video URL.\n * @param {string} url\n * @param {VideoPlayerConfiguration} config\n */\n public openVideoPlayer(url: string, config?: VideoPlayerConfiguration) {\n FireworkSDKModule.openVideoPlayer(url, config ?? {});\n }\n}\n\nexport default FireworkSDK;\n"]}
1
+ {"version":3,"sources":["FireworkSDK.ts"],"names":["FireworkSDK","onCustomCTAClick","_onCustomCTAClick","value","FWLoggerUtil","log","FireworkSDKModule","setCustomCTAClickEnabled","customCTALinkContentPageRouteName","_customCTALinkContentPageRouteName","setCustomCTALinkContentPageRouteName","onVideoPlayback","_onVideoPlayback","setVideoPlaybackEventEnabled","shareBaseURL","_shareBaseURL","setShareBaseURL","then","eventEmitter","emit","FWEventName","ShareBaseURLUpdated","adBadgeConfiguration","_adBadgeConfiguration","setAdBadgeConfiguration","AdBadgeConfigurationUpdated","appComponentName","_appComponentName","setAppComponentName","FireworkSDKModuleEventEmitter","shopping","VideoShopping","getInstance","liveStream","LiveStream","navigator","FWNavigator","_instance","constructor","addListener","SDKInit","event","error","onSDKInit","LogMessage","logNativeMessage","message","CustomCTAClick","url","VideoPlayback","eventName","VideoFeedClick","info","id","onVideoFeedClick","init","userId","ShoppingModule","LiveStreamModule","openVideoPlayer","config"],"mappings":";;;;;;;AACA;;AAGA;;AAQA;;AAGA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAUA;AACA;AACA;AACA,MAAMA,WAAN,CAAkB;AAGhB;AACF;AACA;;AAGE;AACF;AACA;;AAGE;AACF;AACA;AAC6B,MAAhBC,gBAAgB,GAAuC;AAChE,WAAO,KAAKC,iBAAZ;AACD;;AAC0B,MAAhBD,gBAAgB,CAACE,KAAD,EAA4C;AACrEC,0BAAaC,GAAb,CAAkB,iCAAgC,CAAC,CAACF,KAAM,EAA1D;;AACA,SAAKD,iBAAL,GAAyBC,KAAzB;;AACAG,+BAAkBC,wBAAlB,CAA2CJ,KAAK,GAAG,IAAH,GAAU,KAA1D;AACD;;AAGD;AACF;AACA;AAC8C,MAAjCK,iCAAiC,GAAuB;AACjE,WAAO,KAAKC,kCAAZ;AACD;;AAC2C,MAAjCD,iCAAiC,CAACL,KAAD,EAA4B;AACtE,SAAKM,kCAAL,GAA0CN,KAA1C;;AACAG,+BAAkBI,oCAAlB,CAAuDP,KAAvD,aAAuDA,KAAvD,cAAuDA,KAAvD,GAAgE,EAAhE;AACD;;AAGD;AACF;AACA;AAC4B,MAAfQ,eAAe,GAAsC;AAC9D,WAAO,KAAKC,gBAAZ;AACD;;AACyB,MAAfD,eAAe,CAACR,KAAD,EAA2C;AACnE,SAAKS,gBAAL,GAAwBT,KAAxB;;AACAG,+BAAkBO,4BAAlB,CAA+CV,KAAK,GAAG,IAAH,GAAU,KAA9D;AACD;;AAGD;AACF;AACA;AACyB,MAAZW,YAAY,GAAuB;AAC5C,WAAO,KAAKC,aAAZ;AACD;;AACsB,MAAZD,YAAY,CAACX,KAAD,EAA4B;AACjD,SAAKY,aAAL,GAAqBZ,KAArB;;AACAG,+BAAkBU,eAAlB,CAAkCb,KAAlC,aAAkCA,KAAlC,cAAkCA,KAAlC,GAA2C,EAA3C,EAA+Cc,IAA/C,CAAoD,MAAM;AACxD,WAAKC,YAAL,CAAkBC,IAAlB,CAAuBC,yBAAYC,mBAAnC;AACD,KAFD;AAGD;;AAGD;AACF;AACA;AACiC,MAApBC,oBAAoB,GAAqC;AAClE,WAAO,KAAKC,qBAAZ;AACD;;AAC8B,MAApBD,oBAAoB,CAACnB,KAAD,EAA0C;AACvE,SAAKoB,qBAAL,GAA6BpB,KAA7B;;AACAG,+BAAkBkB,uBAAlB,CAA0CrB,KAA1C,aAA0CA,KAA1C,cAA0CA,KAA1C,GAAmD,EAAnD,EAAuDc,IAAvD,CAA4D,MAAM;AAChE,WAAKC,YAAL,CAAkBC,IAAlB,CAAuBC,yBAAYK,2BAAnC;AACD,KAFD;AAGD;;AAGD;AACF;AACA;AAC6B,MAAhBC,gBAAgB,GAAuB;AAChD,WAAO,KAAKC,iBAAZ;AACD;;AAC0B,MAAhBD,gBAAgB,CAACvB,KAAD,EAA4B;AACrD,SAAKwB,iBAAL,GAAyBxB,KAAzB;;AACAG,+BAAkBsB,mBAAlB,CAAsCzB,KAAtC,aAAsCA,KAAtC,cAAsCA,KAAtC,GAA+C,EAA/C;AACD;;AAGuB,MAAZe,YAAY,GAAuB;AAC7C,WAAOW,gDAAP;AACD;AAED;AACF;AACA;;;AACqB,MAARC,QAAQ,GAAkB;AACnC,WAAOC,uBAAcC,WAAd,EAAP;AACD;AAED;AACF;AACA;;;AACuB,MAAVC,UAAU,GAAe;AAClC,WAAOC,oBAAWF,WAAX,EAAP;AACD;AAED;AACF;AACA;;;AACsB,MAATG,SAAS,GAAgB;AAClC,WAAOC,qBAAYJ,WAAZ,EAAP;AACD;AAED;AACF;AACA;AACA;;;AAC2B,SAAXA,WAAW,GAAG;AAC1B,QAAI,CAAChC,WAAW,CAACqC,SAAjB,EAA4B;AAC1BrC,MAAAA,WAAW,CAACqC,SAAZ,GAAwB,IAAIrC,WAAJ,EAAxB;AACD;;AAED,WAAOA,WAAW,CAACqC,SAAnB;AACD;;AAEOC,EAAAA,WAAW,GAAG;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AACpB,SAAKpB,YAAL,CAAkBqB,WAAlB,CAA8BnB,yBAAYoB,OAA1C,EAAoDC,KAAD,IAAW;AAC5DrC,4BAAaC,GAAb,CAAkB,yBAAwBoC,KAAzB,aAAyBA,KAAzB,uBAAyBA,KAAK,CAAEC,KAAM,EAAvD;;AAEA,UAAI,KAAKC,SAAT,EAAoB;AAClB,aAAKA,SAAL,CAAeF,KAAf,aAAeA,KAAf,cAAeA,KAAf,GAAwB,EAAxB;AACD;AACF,KAND;AAQA,SAAKvB,YAAL,CAAkBqB,WAAlB,CAA8BnB,yBAAYwB,UAA1C,EAAuDH,KAAD,IAAW;AAC/DrC,4BAAayC,gBAAb,CAA8BJ,KAAK,CAACK,OAApC;AACD,KAFD;AAIA,SAAK5B,YAAL,CAAkBqB,WAAlB,CAA8BnB,yBAAY2B,cAA1C,EAA2DN,KAAD,IAAW;AACnErC,4BAAaC,GAAb,CAAkB,8BAA6BoC,KAA9B,aAA8BA,KAA9B,uBAA8BA,KAAK,CAAEO,GAAI,EAA1D;;AAEA,UAAI,KAAK/C,gBAAT,EAA2B;AACzB,aAAKA,gBAAL,CAAsBwC,KAAtB,aAAsBA,KAAtB,cAAsBA,KAAtB,GAA+B,EAA/B;AACD;AACF,KAND;AAQA,SAAKvB,YAAL,CAAkBqB,WAAlB,CAA8BnB,yBAAY6B,aAA1C,EAA0DR,KAAD,IAAW;AAClErC,4BAAaC,GAAb,CAAkB,+BAA8BoC,KAA/B,aAA+BA,KAA/B,uBAA+BA,KAAK,CAAES,SAAU,EAAjE;;AAEA,UAAI,KAAKvC,eAAT,EAA0B;AACxB,aAAKA,eAAL,CAAqB8B,KAArB,aAAqBA,KAArB,cAAqBA,KAArB,GAA8B,EAA9B;AACD;AACF,KAND;AAQA,SAAKvB,YAAL,CAAkBqB,WAAlB,CAA8BnB,yBAAY+B,cAA1C,EAA2DV,KAAD,IAAW;AACnErC,4BAAaC,GAAb,CAAkB,gCAA+BoC,KAAhC,aAAgCA,KAAhC,uBAAgCA,KAAK,CAAEW,IAAP,CAAYC,EAAG,EAAhE;;AAEA,UAAI,KAAKC,gBAAT,EAA2B;AACzB,aAAKA,gBAAL,CAAsBb,KAAtB,aAAsBA,KAAtB,cAAsBA,KAAtB,GAA+B,EAA/B;AACD;AACF,KAND;AAOD;AAED;AACF;AACA;AACA;;;AACSc,EAAAA,IAAI,CAACC,MAAD,EAAkB;AAC3BlD,+BAAkBiD,IAAlB,CAAuBC,MAAvB;;AACAC,4BAAeF,IAAf;;AACAG,8BAAiBH,IAAjB;AACD;AAED;AACF;AACA;AACA;AACA;;;AACSI,EAAAA,eAAe,CAACX,GAAD,EAAcY,MAAd,EAAiD;AACrEtD,+BAAkBqD,eAAlB,CAAkCX,GAAlC,EAAuCY,MAAvC,aAAuCA,MAAvC,cAAuCA,MAAvC,GAAiD,EAAjD;AACD;;AAtLe;;gBAAZ5D,W;;eAyLSA,W","sourcesContent":["import type { NativeEventEmitter } from 'react-native';\nimport LiveStream from './LiveStream';\n\nimport type AdBadgeConfiguration from './models/AdBadgeConfiguration';\nimport { FWEventName } from './models/FWEventName';\nimport type {\n CustomCTAClickEvent,\n SDKInitEvent,\n VideoFeedClickEvent,\n VideoPlaybackEvent,\n} from './models/FWEvents';\nimport type VideoPlayerConfiguration from './models/VideoPlayerConfiguration';\nimport FireworkSDKModule, {\n FireworkSDKModuleEventEmitter,\n} from './modules/FireworkSDKModule';\nimport LiveStreamModule from './modules/LiveStreamModule';\nimport ShoppingModule from './modules/ShoppingModule';\nimport VideoShopping from './VideoShopping';\nimport FWNavigator from './FWNavigator';\nimport FWLoggerUtil from './utils/FWLoggerUtil';\n\nexport type SDKInitCallback = (event: SDKInitEvent) => void;\nexport type CustomCTAClickCallback = (event: CustomCTAClickEvent) => void;\nexport type CustomCTALinkContentRender = (\n event: CustomCTAClickEvent\n) => React.ReactNode | null;\nexport type VideoPlaybackCallback = (event: VideoPlaybackEvent) => void;\nexport type VideoFeedClickCallback = (event: VideoFeedClickEvent) => void;\n\n/**\n * Entry class of Firework SDK, which supports the sdk initialization and global configuration.\n */\nclass FireworkSDK {\n private static _instance?: FireworkSDK;\n\n /**\n * The callback of SDK initialization.\n */\n public onSDKInit?: SDKInitCallback;\n\n /**\n * the callback of clicking Video Feed.\n */\n public onVideoFeedClick?: VideoFeedClickCallback;\n\n /**\n * The callback of clicking custom CTA.\n */\n public get onCustomCTAClick(): CustomCTAClickCallback | undefined {\n return this._onCustomCTAClick;\n }\n public set onCustomCTAClick(value: CustomCTAClickCallback | undefined) {\n FWLoggerUtil.log(`Set onCustomCTAClick callback ${!!value}`);\n this._onCustomCTAClick = value;\n FireworkSDKModule.setCustomCTAClickEnabled(value ? true : false);\n }\n private _onCustomCTAClick: CustomCTAClickCallback | undefined;\n\n /**\n * The custom CTA link content page route name.\n */\n public get customCTALinkContentPageRouteName(): string | undefined {\n return this._customCTALinkContentPageRouteName;\n }\n public set customCTALinkContentPageRouteName(value: string | undefined) {\n this._customCTALinkContentPageRouteName = value;\n FireworkSDKModule.setCustomCTALinkContentPageRouteName(value ?? '');\n }\n private _customCTALinkContentPageRouteName: string | undefined;\n\n /**\n * The callback of video playback.\n */\n public get onVideoPlayback(): VideoPlaybackCallback | undefined {\n return this._onVideoPlayback;\n }\n public set onVideoPlayback(value: VideoPlaybackCallback | undefined) {\n this._onVideoPlayback = value;\n FireworkSDKModule.setVideoPlaybackEventEnabled(value ? true : false);\n }\n private _onVideoPlayback?: VideoPlaybackCallback | undefined;\n\n /**\n * The share base URL of videos.\n */\n public get shareBaseURL(): string | undefined {\n return this._shareBaseURL;\n }\n public set shareBaseURL(value: string | undefined) {\n this._shareBaseURL = value;\n FireworkSDKModule.setShareBaseURL(value ?? '').then(() => {\n this.eventEmitter.emit(FWEventName.ShareBaseURLUpdated);\n });\n }\n private _shareBaseURL: string | undefined;\n\n /**\n * The configuration for ad badges.\n */\n public get adBadgeConfiguration(): AdBadgeConfiguration | undefined {\n return this._adBadgeConfiguration;\n }\n public set adBadgeConfiguration(value: AdBadgeConfiguration | undefined) {\n this._adBadgeConfiguration = value;\n FireworkSDKModule.setAdBadgeConfiguration(value ?? {}).then(() => {\n this.eventEmitter.emit(FWEventName.AdBadgeConfigurationUpdated);\n });\n }\n private _adBadgeConfiguration: AdBadgeConfiguration | undefined;\n\n /**\n * The app component name.\n */\n public get appComponentName(): string | undefined {\n return this._appComponentName;\n }\n public set appComponentName(value: string | undefined) {\n this._appComponentName = value;\n FireworkSDKModule.setAppComponentName(value ?? '');\n }\n private _appComponentName: string | undefined;\n\n private get eventEmitter(): NativeEventEmitter {\n return FireworkSDKModuleEventEmitter;\n }\n\n /**\n * Get VideoShopping object.\n */\n public get shopping(): VideoShopping {\n return VideoShopping.getInstance();\n }\n\n /**\n * Get LiveStream object.\n */\n public get liveStream(): LiveStream {\n return LiveStream.getInstance();\n }\n\n /**\n * Get FWNavigator object.\n */\n public get navigator(): FWNavigator {\n return FWNavigator.getInstance();\n }\n\n /**\n * Get global single instance of FireworkSDK class.\n * @returns FireworkSDK\n */\n public static getInstance() {\n if (!FireworkSDK._instance) {\n FireworkSDK._instance = new FireworkSDK();\n }\n\n return FireworkSDK._instance!;\n }\n\n private constructor() {\n this.eventEmitter.addListener(FWEventName.SDKInit, (event) => {\n FWLoggerUtil.log(`Receive SDKInit event ${event?.error}`);\n\n if (this.onSDKInit) {\n this.onSDKInit(event ?? {});\n }\n });\n\n this.eventEmitter.addListener(FWEventName.LogMessage, (event) => {\n FWLoggerUtil.logNativeMessage(event.message);\n });\n\n this.eventEmitter.addListener(FWEventName.CustomCTAClick, (event) => {\n FWLoggerUtil.log(`Receive CustomCTAClick url ${event?.url}`);\n\n if (this.onCustomCTAClick) {\n this.onCustomCTAClick(event ?? {});\n }\n });\n\n this.eventEmitter.addListener(FWEventName.VideoPlayback, (event) => {\n FWLoggerUtil.log(`Receive VideoPlayback event ${event?.eventName}`);\n\n if (this.onVideoPlayback) {\n this.onVideoPlayback(event ?? {});\n }\n });\n\n this.eventEmitter.addListener(FWEventName.VideoFeedClick, (event) => {\n FWLoggerUtil.log(`Receive VideoFeedClick event ${event?.info.id}`);\n\n if (this.onVideoFeedClick) {\n this.onVideoFeedClick(event ?? {});\n }\n });\n }\n\n /**\n * Initializes Firework SDK.\n * @param {string?} userId An id to uniquely identify device or user.\n */\n public init(userId?: string) {\n FireworkSDKModule.init(userId);\n ShoppingModule.init();\n LiveStreamModule.init();\n }\n\n /**\n * Open Video URL.\n * @param {string} url\n * @param {VideoPlayerConfiguration} config\n */\n public openVideoPlayer(url: string, config?: VideoPlayerConfiguration) {\n FireworkSDKModule.openVideoPlayer(url, config ?? {});\n }\n}\n\nexport default FireworkSDK;\n"]}