react-native-firework-sdk 1.0.0-beta

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 (190) hide show
  1. package/README.md +39 -0
  2. package/android/build.gradle +193 -0
  3. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  4. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/gradlew +185 -0
  7. package/android/gradlew.bat +89 -0
  8. package/android/publish.gradle +65 -0
  9. package/android/src/main/AndroidManifest.xml +16 -0
  10. package/android/src/main/java/com/reactnativefireworksdk/FireworkSDKPackage.kt +20 -0
  11. package/android/src/main/java/com/reactnativefireworksdk/components/videofeed/FWVideoFeed.kt +123 -0
  12. package/android/src/main/java/com/reactnativefireworksdk/constants/FWCommandConstant.kt +6 -0
  13. package/android/src/main/java/com/reactnativefireworksdk/constants/FWVideoPlayerConstant.kt +20 -0
  14. package/android/src/main/java/com/reactnativefireworksdk/manager/FWVideoFeedManager.kt +88 -0
  15. package/android/src/main/java/com/reactnativefireworksdk/models/FWEventName.kt +35 -0
  16. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedConfigModel.kt +27 -0
  17. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedItemDetailsModel.kt +11 -0
  18. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedMode.kt +7 -0
  19. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedSource.kt +7 -0
  20. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedTitlePosition.kt +7 -0
  21. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoPlaybackDetails.kt +19 -0
  22. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoPlayerConfigModel.kt +20 -0
  23. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoShoppingInterface.kt +13 -0
  24. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoShoppingProduct.kt +34 -0
  25. package/android/src/main/java/com/reactnativefireworksdk/models/FireworkSDKInterface.kt +12 -0
  26. package/android/src/main/java/com/reactnativefireworksdk/module/FWVideoShoppingModule.kt +190 -0
  27. package/android/src/main/java/com/reactnativefireworksdk/module/FireworkSDKModule.kt +248 -0
  28. package/android/src/main/java/com/reactnativefireworksdk/pages/FWVideoShoppingCartActivity.kt +43 -0
  29. package/android/src/main/java/com/reactnativefireworksdk/utils/FWEventUtils.kt +127 -0
  30. package/android/src/main/java/com/reactnativefireworksdk/utils/FWJsonUtils.kt +57 -0
  31. package/android/src/main/java/com/reactnativefireworksdk/utils/FWLogUtils.kt +147 -0
  32. package/android/src/main/java/com/reactnativefireworksdk/utils/FWUrlUtils.kt +68 -0
  33. package/android/src/main/java/com/reactnativefireworksdk/utils/FWVideoPlayerUtils.kt +18 -0
  34. package/android/src/main/res/layout/fwrn_fragment_shoppingcart.xml +8 -0
  35. package/android/src/main/res/layout/fwrn_fragment_videofeed.xml +20 -0
  36. package/android/src/main/res/values/styles.xml +43 -0
  37. package/ios/Component/VideoFeed.swift +262 -0
  38. package/ios/Component/VideoFeedConfiguration.swift +32 -0
  39. package/ios/Component/VideoFeedManager.m +51 -0
  40. package/ios/Component/VideoFeedManager.swift +40 -0
  41. package/ios/Component/VideoPlayerConfiguration.swift +30 -0
  42. package/ios/FireworkSdk-Bridging-Header.h +6 -0
  43. package/ios/FireworkSdk.xcodeproj/project.pbxproj +291 -0
  44. package/ios/Models/FireworkJsEvent.swift +34 -0
  45. package/ios/Models/FireworkSDK+JsModel.swift +62 -0
  46. package/ios/Models/RCTConvert+FireworkSDKModule.swift +91 -0
  47. package/ios/Models/RCTConvert+Shopping.swift +49 -0
  48. package/ios/Models/RCTConvert+VideoFeed.swift +69 -0
  49. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +17 -0
  50. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+EventTracking.swift +74 -0
  51. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +19 -0
  52. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +106 -0
  53. package/ios/Modules/FireworkSDKModule/MobileADConfiguration.swift +17 -0
  54. package/ios/Modules/Shopping/CartViewController.swift +98 -0
  55. package/ios/Modules/Shopping/Product.swift +33 -0
  56. package/ios/Modules/Shopping/ProductInfoViewConfiguration.swift +24 -0
  57. package/ios/Modules/Shopping/ShoppingModule.m +19 -0
  58. package/ios/Modules/Shopping/ShoppingModule.swift +214 -0
  59. package/ios/Utils/String+Color.swift +38 -0
  60. package/ios/Utils/UIView+Constraints.swift +91 -0
  61. package/ios/Utils/UIView+ParentViewController.swift +21 -0
  62. package/ios/Utils/UIViewController+AttachChild.swift +69 -0
  63. package/lib/commonjs/FireworkSDK.js +171 -0
  64. package/lib/commonjs/FireworkSDK.js.map +1 -0
  65. package/lib/commonjs/VideoShopping.js +146 -0
  66. package/lib/commonjs/VideoShopping.js.map +1 -0
  67. package/lib/commonjs/components/CartContainer.js +35 -0
  68. package/lib/commonjs/components/CartContainer.js.map +1 -0
  69. package/lib/commonjs/components/FWVideoFeed.js +18 -0
  70. package/lib/commonjs/components/FWVideoFeed.js.map +1 -0
  71. package/lib/commonjs/components/VideoFeed.js +82 -0
  72. package/lib/commonjs/components/VideoFeed.js.map +1 -0
  73. package/lib/commonjs/constants/FWErrorMessage.js +15 -0
  74. package/lib/commonjs/constants/FWErrorMessage.js.map +1 -0
  75. package/lib/commonjs/index.js +44 -0
  76. package/lib/commonjs/index.js.map +1 -0
  77. package/lib/commonjs/models/ADConfig.js +2 -0
  78. package/lib/commonjs/models/ADConfig.js.map +1 -0
  79. package/lib/commonjs/models/AddToCartResult.js +2 -0
  80. package/lib/commonjs/models/AddToCartResult.js.map +1 -0
  81. package/lib/commonjs/models/FWError.js +2 -0
  82. package/lib/commonjs/models/FWError.js.map +1 -0
  83. package/lib/commonjs/models/FWEvents.js +20 -0
  84. package/lib/commonjs/models/FWEvents.js.map +1 -0
  85. package/lib/commonjs/models/FeedItemDetails.js +2 -0
  86. package/lib/commonjs/models/FeedItemDetails.js.map +1 -0
  87. package/lib/commonjs/models/Product.js +2 -0
  88. package/lib/commonjs/models/Product.js.map +1 -0
  89. package/lib/commonjs/models/ProductInfoViewConfiguration.js +2 -0
  90. package/lib/commonjs/models/ProductInfoViewConfiguration.js.map +1 -0
  91. package/lib/commonjs/models/ProductUnit.js +2 -0
  92. package/lib/commonjs/models/ProductUnit.js.map +1 -0
  93. package/lib/commonjs/models/VideoFeedConfiguration.js +2 -0
  94. package/lib/commonjs/models/VideoFeedConfiguration.js.map +1 -0
  95. package/lib/commonjs/models/VideoPlaybackDetails.js +2 -0
  96. package/lib/commonjs/models/VideoPlaybackDetails.js.map +1 -0
  97. package/lib/commonjs/models/VideoPlaybackEventName.js +23 -0
  98. package/lib/commonjs/models/VideoPlaybackEventName.js.map +1 -0
  99. package/lib/commonjs/models/VideoPlayerConfiguration.js +2 -0
  100. package/lib/commonjs/models/VideoPlayerConfiguration.js.map +1 -0
  101. package/lib/commonjs/modules/FireworkSDKModule.js +20 -0
  102. package/lib/commonjs/modules/FireworkSDKModule.js.map +1 -0
  103. package/lib/commonjs/modules/ShoppingModule.js +20 -0
  104. package/lib/commonjs/modules/ShoppingModule.js.map +1 -0
  105. package/lib/module/FireworkSDK.js +153 -0
  106. package/lib/module/FireworkSDK.js.map +1 -0
  107. package/lib/module/VideoShopping.js +134 -0
  108. package/lib/module/VideoShopping.js.map +1 -0
  109. package/lib/module/components/CartContainer.js +18 -0
  110. package/lib/module/components/CartContainer.js.map +1 -0
  111. package/lib/module/components/FWVideoFeed.js +8 -0
  112. package/lib/module/components/FWVideoFeed.js.map +1 -0
  113. package/lib/module/components/VideoFeed.js +66 -0
  114. package/lib/module/components/VideoFeed.js.map +1 -0
  115. package/lib/module/constants/FWErrorMessage.js +7 -0
  116. package/lib/module/constants/FWErrorMessage.js.map +1 -0
  117. package/lib/module/index.js +10 -0
  118. package/lib/module/index.js.map +1 -0
  119. package/lib/module/models/ADConfig.js +2 -0
  120. package/lib/module/models/ADConfig.js.map +1 -0
  121. package/lib/module/models/AddToCartResult.js +2 -0
  122. package/lib/module/models/AddToCartResult.js.map +1 -0
  123. package/lib/module/models/FWError.js +2 -0
  124. package/lib/module/models/FWError.js.map +1 -0
  125. package/lib/module/models/FWEvents.js +13 -0
  126. package/lib/module/models/FWEvents.js.map +1 -0
  127. package/lib/module/models/FeedItemDetails.js +2 -0
  128. package/lib/module/models/FeedItemDetails.js.map +1 -0
  129. package/lib/module/models/Product.js +2 -0
  130. package/lib/module/models/Product.js.map +1 -0
  131. package/lib/module/models/ProductInfoViewConfiguration.js +2 -0
  132. package/lib/module/models/ProductInfoViewConfiguration.js.map +1 -0
  133. package/lib/module/models/ProductUnit.js +2 -0
  134. package/lib/module/models/ProductUnit.js.map +1 -0
  135. package/lib/module/models/VideoFeedConfiguration.js +2 -0
  136. package/lib/module/models/VideoFeedConfiguration.js.map +1 -0
  137. package/lib/module/models/VideoPlaybackDetails.js +2 -0
  138. package/lib/module/models/VideoPlaybackDetails.js.map +1 -0
  139. package/lib/module/models/VideoPlaybackEventName.js +16 -0
  140. package/lib/module/models/VideoPlaybackEventName.js.map +1 -0
  141. package/lib/module/models/VideoPlayerConfiguration.js +2 -0
  142. package/lib/module/models/VideoPlayerConfiguration.js.map +1 -0
  143. package/lib/module/modules/FireworkSDKModule.js +10 -0
  144. package/lib/module/modules/FireworkSDKModule.js.map +1 -0
  145. package/lib/module/modules/ShoppingModule.js +10 -0
  146. package/lib/module/modules/ShoppingModule.js.map +1 -0
  147. package/lib/typescript/FireworkSDK.d.ts +74 -0
  148. package/lib/typescript/VideoShopping.d.ts +54 -0
  149. package/lib/typescript/components/CartContainer.d.ts +3 -0
  150. package/lib/typescript/components/FWVideoFeed.d.ts +2 -0
  151. package/lib/typescript/components/VideoFeed.d.ts +53 -0
  152. package/lib/typescript/constants/FWErrorMessage.d.ts +2 -0
  153. package/lib/typescript/index.d.ts +25 -0
  154. package/lib/typescript/models/ADConfig.d.ts +10 -0
  155. package/lib/typescript/models/AddToCartResult.d.ts +10 -0
  156. package/lib/typescript/models/FWError.d.ts +10 -0
  157. package/lib/typescript/models/FWEvents.d.ts +55 -0
  158. package/lib/typescript/models/FeedItemDetails.d.ts +14 -0
  159. package/lib/typescript/models/Product.d.ts +19 -0
  160. package/lib/typescript/models/ProductInfoViewConfiguration.d.ts +18 -0
  161. package/lib/typescript/models/ProductUnit.d.ts +22 -0
  162. package/lib/typescript/models/VideoFeedConfiguration.d.ts +32 -0
  163. package/lib/typescript/models/VideoPlaybackDetails.d.ts +31 -0
  164. package/lib/typescript/models/VideoPlaybackEventName.d.ts +39 -0
  165. package/lib/typescript/models/VideoPlayerConfiguration.d.ts +25 -0
  166. package/lib/typescript/modules/FireworkSDKModule.d.ts +12 -0
  167. package/lib/typescript/modules/ShoppingModule.d.ts +13 -0
  168. package/package.json +147 -0
  169. package/react-native-firework-sdk.podspec +22 -0
  170. package/src/FireworkSDK.ts +153 -0
  171. package/src/VideoShopping.ts +165 -0
  172. package/src/components/CartContainer.tsx +20 -0
  173. package/src/components/FWVideoFeed.tsx +10 -0
  174. package/src/components/VideoFeed.tsx +109 -0
  175. package/src/constants/FWErrorMessage.ts +11 -0
  176. package/src/index.tsx +109 -0
  177. package/src/models/ADConfig.ts +10 -0
  178. package/src/models/AddToCartResult.ts +10 -0
  179. package/src/models/FWError.ts +10 -0
  180. package/src/models/FWEvents.ts +63 -0
  181. package/src/models/FeedItemDetails.ts +14 -0
  182. package/src/models/Product.ts +20 -0
  183. package/src/models/ProductInfoViewConfiguration.ts +20 -0
  184. package/src/models/ProductUnit.ts +23 -0
  185. package/src/models/VideoFeedConfiguration.ts +35 -0
  186. package/src/models/VideoPlaybackDetails.ts +33 -0
  187. package/src/models/VideoPlaybackEventName.ts +40 -0
  188. package/src/models/VideoPlayerConfiguration.ts +26 -0
  189. package/src/modules/FireworkSDKModule.ts +27 -0
  190. package/src/modules/ShoppingModule.ts +29 -0
@@ -0,0 +1,39 @@
1
+ declare enum VideoPlaybackEventName {
2
+ /**
3
+ * When video is shown to the user.
4
+ */
5
+ Impression = "fw:video:impression",
6
+ /**
7
+ * Video started.
8
+ */
9
+ Start = "fw:video:start",
10
+ /**
11
+ * Video reached 25%.
12
+ */
13
+ FirstQuartile = "fw:video:first-quartile",
14
+ /**
15
+ * Video reached 50%.
16
+ */
17
+ Midpoint = "fw:video:midpoint",
18
+ /**
19
+ * Video reached 75%.
20
+ */
21
+ ThirdQuartile = "fw:video:third-quartile",
22
+ /**
23
+ * Video reached 100%.
24
+ */
25
+ Complete = "fw:video:complete",
26
+ /**
27
+ * When ad video finishes playing
28
+ */
29
+ AdEnd = "fw:video:ad-end",
30
+ /**
31
+ * When a visitor clicks on CTA button (if available).
32
+ */
33
+ ClickCTA = "fw:video:click-cta",
34
+ /**
35
+ * When user clicks on "Share" button.
36
+ */
37
+ ClickShare = "fw:video:click-share"
38
+ }
39
+ export default VideoPlaybackEventName;
@@ -0,0 +1,25 @@
1
+ export declare type VideoPlayerStyle = 'full' | 'fit';
2
+ export declare type VideoPlayerCompleteAction = 'loop' | 'advanceToNext';
3
+ export interface VideoPlayerCTAStyle {
4
+ backgroundColor?: string;
5
+ textColor?: string;
6
+ fontSize?: number;
7
+ }
8
+ export default interface VideoPlayerConfiguration {
9
+ /**
10
+ * Sets the proportion of the video player to its container.
11
+ */
12
+ playerStyle?: VideoPlayerStyle;
13
+ /**
14
+ * Behavior occurring after video is complete.
15
+ */
16
+ videoCompleteAction?: VideoPlayerCompleteAction;
17
+ /**
18
+ * Indicates if the video player shows share button.
19
+ */
20
+ showShareButton?: boolean;
21
+ /**
22
+ * The style of CTA button style.
23
+ */
24
+ ctaButtonStyle?: VideoPlayerCTAStyle;
25
+ }
@@ -0,0 +1,12 @@
1
+ import type { NativeModule } from 'react-native';
2
+ import type ADConfig from '../models/ADConfig';
3
+ import type VideoPlayerConfiguration from '../models/VideoPlayerConfiguration';
4
+ interface IFireworkSDKModule extends NativeModule {
5
+ init(userId?: string, adConfig?: ADConfig): void;
6
+ openVideoPlayer(url: string, config?: VideoPlayerConfiguration): void;
7
+ setCustomCTAClickEnabled(enabled: boolean): void;
8
+ setShareBaseURL(url?: string): void;
9
+ setVideoPlaybackEventEnabled(enabled: boolean): void;
10
+ }
11
+ declare const _default: IFireworkSDKModule;
12
+ export default _default;
@@ -0,0 +1,13 @@
1
+ import { NativeModule } from 'react-native';
2
+ import type Product from '../models/Product';
3
+ import type ProductInfoViewConfiguration from '../models/ProductInfoViewConfiguration';
4
+ interface IShoppingModule extends NativeModule {
5
+ init(): void;
6
+ updateVideoProduct(production: Product, callbackId: number): void;
7
+ updateProductViewConfig(config: ProductInfoViewConfiguration, callbackId: number): void;
8
+ updateAddToCartStatus(res: string, tips: string, callbackId: number): void;
9
+ jumpToCartPage(callbackId: number): void;
10
+ exitCartPage(): void;
11
+ }
12
+ declare const _default: IShoppingModule;
13
+ export default _default;
package/package.json ADDED
@@ -0,0 +1,147 @@
1
+ {
2
+ "name": "react-native-firework-sdk",
3
+ "version": "1.0.0-beta",
4
+ "description": "Firework React Native SDK",
5
+ "main": "lib/commonjs/index",
6
+ "module": "lib/module/index",
7
+ "types": "lib/typescript/index.d.ts",
8
+ "react-native": "src/index",
9
+ "source": "src/index",
10
+ "files": [
11
+ "src",
12
+ "lib",
13
+ "android",
14
+ "ios",
15
+ "cpp",
16
+ "react-native-firework-sdk.podspec",
17
+ "!lib/typescript/example",
18
+ "!android/build",
19
+ "!ios/build",
20
+ "!**/__tests__",
21
+ "!**/__fixtures__",
22
+ "!**/__mocks__"
23
+ ],
24
+ "scripts": {
25
+ "test": "jest",
26
+ "typescript": "tsc --noEmit",
27
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
28
+ "prepare": "bob build",
29
+ "release": "release-it",
30
+ "install_js_depencies": "npm i && cd example && npm i",
31
+ "setup_ios": "npm run install_js_depencies && cd example && pod-install",
32
+ "setup_android": "npm run install_js_depencies"
33
+ },
34
+ "keywords": [
35
+ "react-native",
36
+ "ios",
37
+ "android"
38
+ ],
39
+ "repository": "",
40
+ "author": "",
41
+ "license": "MIT",
42
+ "bugs": {
43
+ "url": ""
44
+ },
45
+ "homepage": "https://github.com/loopsocial/bogano",
46
+ "publishConfig": {
47
+ "registry": "https://registry.npmjs.org/"
48
+ },
49
+ "devDependencies": {
50
+ "@commitlint/config-conventional": "^11.0.0",
51
+ "@react-native-community/eslint-config": "^2.0.0",
52
+ "@release-it/conventional-changelog": "^2.0.0",
53
+ "@types/jest": "^26.0.23",
54
+ "@types/react": "^17.0.37",
55
+ "@types/react-native": "^0.66.4",
56
+ "commitlint": "^11.0.0",
57
+ "eslint": "^7.2.0",
58
+ "eslint-config-prettier": "^7.0.0",
59
+ "eslint-plugin-prettier": "^3.1.3",
60
+ "husky": "^6.0.0",
61
+ "jest": "^26.6.3",
62
+ "pod-install": "^0.1.0",
63
+ "prettier": "^2.0.5",
64
+ "react": "17.0.2",
65
+ "react-native": "0.66.4",
66
+ "react-native-builder-bob": "^0.18.0",
67
+ "release-it": "^14.2.2",
68
+ "typescript": "^4.4.4"
69
+ },
70
+ "peerDependencies": {
71
+ "react": "*",
72
+ "react-native": "*"
73
+ },
74
+ "jest": {
75
+ "preset": "react-native",
76
+ "modulePathIgnorePatterns": [
77
+ "<rootDir>/example/node_modules",
78
+ "<rootDir>/lib/"
79
+ ]
80
+ },
81
+ "commitlint": {
82
+ "extends": [
83
+ "@commitlint/config-conventional"
84
+ ]
85
+ },
86
+ "release-it": {
87
+ "git": {
88
+ "commitMessage": "chore: release ${version}",
89
+ "tagName": "v${version}"
90
+ },
91
+ "npm": {
92
+ "publish": true
93
+ },
94
+ "github": {
95
+ "release": true
96
+ },
97
+ "plugins": {
98
+ "@release-it/conventional-changelog": {
99
+ "preset": "angular"
100
+ }
101
+ }
102
+ },
103
+ "eslintConfig": {
104
+ "root": true,
105
+ "extends": [
106
+ "@react-native-community",
107
+ "prettier"
108
+ ],
109
+ "rules": {
110
+ "prettier/prettier": [
111
+ "error",
112
+ {
113
+ "quoteProps": "consistent",
114
+ "singleQuote": true,
115
+ "tabWidth": 2,
116
+ "trailingComma": "es5",
117
+ "useTabs": false
118
+ }
119
+ ]
120
+ }
121
+ },
122
+ "eslintIgnore": [
123
+ "node_modules/",
124
+ "lib/"
125
+ ],
126
+ "prettier": {
127
+ "quoteProps": "consistent",
128
+ "singleQuote": true,
129
+ "tabWidth": 2,
130
+ "trailingComma": "es5",
131
+ "useTabs": false
132
+ },
133
+ "react-native-builder-bob": {
134
+ "source": "src",
135
+ "output": "lib",
136
+ "targets": [
137
+ "commonjs",
138
+ "module",
139
+ [
140
+ "typescript",
141
+ {
142
+ "project": "tsconfig.build.json"
143
+ }
144
+ ]
145
+ ]
146
+ }
147
+ }
@@ -0,0 +1,22 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "react-native-firework-sdk"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => "11.0" }
14
+ s.source = { :git => "https://github.com/loopsocial/bogano.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = "ios/**/*.{h,m,mm,swift}"
17
+ s.pod_target_xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => ["${PODS_ROOT}/FireworkVideoGIMASupport","${PODS_ROOT}/FireworkVideoGAMSupport"]}
18
+
19
+
20
+ s.dependency "React-Core"
21
+ s.dependency "FireworkVideo","~>0.12.0"
22
+ end
@@ -0,0 +1,153 @@
1
+ import { NativeEventEmitter } from 'react-native';
2
+
3
+ import type ADConfig from './models/ADConfig';
4
+ import type {
5
+ CustomCTAClickEvent,
6
+ SDKInitEvent,
7
+ VideoPlaybackEvent,
8
+ } from './models/FWEvents';
9
+ import { FWEventName, VideoFeedClickEvent } from './models/FWEvents';
10
+ import type VideoPlayerConfiguration from './models/VideoPlayerConfiguration';
11
+ import FireworkSDKModule from './modules/FireworkSDKModule';
12
+ import ShoppingModule from './modules/ShoppingModule';
13
+ import VideoShopping from './VideoShopping';
14
+
15
+ export type SDKInitCallback = (event: SDKInitEvent) => void;
16
+ export type CustomCTAClickCallback = (event: CustomCTAClickEvent) => void;
17
+ export type VideoPlaybackCallback = (event: VideoPlaybackEvent) => void;
18
+ export type VideoFeedClickCallback = (event: VideoFeedClickEvent) => void;
19
+
20
+ /**
21
+ * Entry class of Firework SDK, which supports the sdk initialization and global configuration.
22
+ */
23
+ class FireworkSDK {
24
+ private static _instance?: FireworkSDK;
25
+ private _onCustomCTAClick: CustomCTAClickCallback | undefined;
26
+ private _onVideoPlayback?: VideoPlaybackCallback | undefined;
27
+
28
+ /**
29
+ * Clicking Video Feed callback
30
+ */
31
+ public onVideoFeedClick?: VideoFeedClickCallback;
32
+ private _shareBaseURL: string | undefined;
33
+
34
+ /**
35
+ * SDK initialization callback.
36
+ */
37
+ public onSDKInit?: SDKInitCallback;
38
+
39
+ /**
40
+ * Get Custom Clicking CTA callback.
41
+ */
42
+ public get onCustomCTAClick(): CustomCTAClickCallback | undefined {
43
+ return this._onCustomCTAClick;
44
+ }
45
+
46
+ /**
47
+ * Set Custom Clicking CTA callback.
48
+ */
49
+ public set onCustomCTAClick(value: CustomCTAClickCallback | undefined) {
50
+ this._onCustomCTAClick = value;
51
+ FireworkSDKModule.setCustomCTAClickEnabled(value ? true : false);
52
+ }
53
+
54
+ /**
55
+ * Get Video Playback callback.
56
+ */
57
+ public get onVideoPlayback(): VideoPlaybackCallback | undefined {
58
+ return this._onVideoPlayback;
59
+ }
60
+
61
+ /**
62
+ * Set Video Playback callback.
63
+ */
64
+ public set onVideoPlayback(value: VideoPlaybackCallback | undefined) {
65
+ this._onVideoPlayback = value;
66
+ FireworkSDKModule.setVideoPlaybackEventEnabled(value ? true : false);
67
+ }
68
+
69
+ /**
70
+ * get Share Base URL
71
+ */
72
+ public get shareBaseURL(): string | undefined {
73
+ return this._shareBaseURL;
74
+ }
75
+
76
+ /**
77
+ * set Share Base URL
78
+ */
79
+ public set shareBaseURL(value: string | undefined) {
80
+ this._shareBaseURL = value;
81
+ FireworkSDKModule.setShareBaseURL(value);
82
+ }
83
+
84
+ private eventEmitter: NativeEventEmitter;
85
+
86
+ /**
87
+ * Get VideoShopping object.
88
+ */
89
+ public get shopping(): VideoShopping {
90
+ return VideoShopping.getInstance();
91
+ }
92
+
93
+ /**
94
+ * Get global single instance of FireworkSDK class.
95
+ * @returns FireworkSDK
96
+ */
97
+ public static getInstance() {
98
+ if (!FireworkSDK._instance) {
99
+ FireworkSDK._instance = new FireworkSDK();
100
+ }
101
+
102
+ return FireworkSDK._instance!;
103
+ }
104
+
105
+ private constructor() {
106
+ this.eventEmitter = new NativeEventEmitter(FireworkSDKModule);
107
+
108
+ this.eventEmitter.addListener(FWEventName.SDKInit, (event) => {
109
+ if (this.onSDKInit) {
110
+ this.onSDKInit(event ?? {});
111
+ }
112
+ });
113
+
114
+ this.eventEmitter.addListener(FWEventName.CustomCTAClick, (event) => {
115
+ if (this.onCustomCTAClick) {
116
+ this.onCustomCTAClick(event ?? {});
117
+ }
118
+ });
119
+
120
+ this.eventEmitter.addListener(FWEventName.VideoPlayback, (event) => {
121
+ if (this.onVideoPlayback) {
122
+ this.onVideoPlayback(event ?? {});
123
+ }
124
+ });
125
+
126
+ this.eventEmitter.addListener(FWEventName.VideoFeedClick, (event) => {
127
+ if (this.onVideoFeedClick) {
128
+ this.onVideoFeedClick(event ?? {});
129
+ }
130
+ });
131
+ }
132
+
133
+ /**
134
+ * Initializes Firework SDK.
135
+ * @param {string?} userId An id to uniquely identify device or user.
136
+ * @param {ADConfig?} adConfig Configuration of Ad.
137
+ */
138
+ public init(userId?: string, adConfig?: ADConfig) {
139
+ FireworkSDKModule.init(userId, adConfig);
140
+ ShoppingModule.init();
141
+ }
142
+
143
+ /**
144
+ * Open Video URL.
145
+ * @param {string} url
146
+ * @param {VideoPlayerConfiguration} config
147
+ */
148
+ public openVideoPlayer(url: string, config?: VideoPlayerConfiguration) {
149
+ FireworkSDKModule.openVideoPlayer(url, config ?? {});
150
+ }
151
+ }
152
+
153
+ export default FireworkSDK;
@@ -0,0 +1,165 @@
1
+ import { NativeEventEmitter } from 'react-native';
2
+
3
+ import type AddToCartResult from './models/AddToCartResult';
4
+ import {
5
+ AddToCartEvent,
6
+ FWEventName,
7
+ UpdateProductDetailsEvent,
8
+ WillDisplayProductEvent,
9
+ } from './models/FWEvents';
10
+ import type Product from './models/Product';
11
+ import type ProductInfoViewConfiguration from './models/ProductInfoViewConfiguration';
12
+ import ShoppingModule from './modules/ShoppingModule';
13
+
14
+ export type AddToCartCallback = (
15
+ event: AddToCartEvent
16
+ ) => Promise<AddToCartResult | undefined | null>;
17
+
18
+ export type ClickCartIconCallback = () => Promise<
19
+ React.ReactNode | undefined | null
20
+ >;
21
+
22
+ export type UpdateProductDetailsCallback = (
23
+ event: UpdateProductDetailsEvent
24
+ ) => Promise<Product | undefined | null>;
25
+
26
+ export type WillDisplayProductCallback = (
27
+ event: WillDisplayProductEvent
28
+ ) => Promise<ProductInfoViewConfiguration | undefined | null>;
29
+
30
+ type CallbackInfo = { callbackId?: number };
31
+
32
+ /**
33
+ * Entry class of Video Shopping
34
+ */
35
+ class VideoShopping {
36
+ private static _instance?: VideoShopping;
37
+
38
+ /**
39
+ * This callback is triggered when the user clicks the "Add to cart" button.
40
+ *
41
+ * The host app can return an AddToCartResult object to tell FireworkSDK the result of adding to cart.
42
+ */
43
+ public onAddToCart?: AddToCartCallback;
44
+
45
+ /**
46
+ * This callback is triggered when the user clicks the shopping cart icon.
47
+ *
48
+ * The host app can return a React.Node to integrate custom cart page to shopping flow.
49
+ */
50
+ public onClickCartIcon?: ClickCartIconCallback;
51
+
52
+ /**
53
+ * This callback is triggered when the video will be shown.
54
+ *
55
+ * The host app can return a Product object to update the latest product information.
56
+ */
57
+ public onUpdateProductDetails?: UpdateProductDetailsCallback;
58
+
59
+ /**
60
+ * This callback is triggered when the product will be shown.
61
+ *
62
+ * The host app can return a ProductInfoViewConfiguration object to configure "Add to cart" button style and cart icon style.
63
+ */
64
+ public onWillDisplayProduct?: WillDisplayProductCallback;
65
+
66
+ public currentCartPage?: React.ReactNode;
67
+
68
+ private eventEmitter: NativeEventEmitter;
69
+
70
+ public static getInstance() {
71
+ if (!VideoShopping._instance) {
72
+ VideoShopping._instance = new VideoShopping();
73
+ }
74
+
75
+ return VideoShopping._instance!;
76
+ }
77
+
78
+ private constructor() {
79
+ this.eventEmitter = new NativeEventEmitter(ShoppingModule);
80
+ this.eventEmitter.addListener(FWEventName.AddToCart, (event) => {
81
+ this.handleAddToCartEvent(event);
82
+ });
83
+
84
+ this.eventEmitter.addListener(FWEventName.ClickCartIcon, (event) => {
85
+ this.handleClickCartIconEvent(event);
86
+ });
87
+
88
+ this.eventEmitter.addListener(FWEventName.UpdateProductDetails, (event) => {
89
+ this.handleUpdateProductDetailsEvent(event);
90
+ });
91
+
92
+ this.eventEmitter.addListener(FWEventName.WillDisplayProduct, (event) => {
93
+ this.handleWillDisplayProductEvent(event);
94
+ });
95
+ }
96
+
97
+ /**
98
+ * Exit Cart Page.
99
+ *
100
+ * The host app can call this method to exit their cart page.
101
+ */
102
+ public exitCartPage() {
103
+ ShoppingModule.exitCartPage();
104
+ }
105
+
106
+ private async handleAddToCartEvent(event: AddToCartEvent & CallbackInfo) {
107
+ if (this.onAddToCart) {
108
+ const callbackId = event.callbackId;
109
+ delete event.callbackId;
110
+ const result = await this.onAddToCart(event as AddToCartEvent);
111
+ if (result) {
112
+ ShoppingModule.updateAddToCartStatus(
113
+ result.res,
114
+ result.tips,
115
+ callbackId!
116
+ );
117
+ }
118
+ }
119
+ }
120
+
121
+ private async handleClickCartIconEvent(event: CallbackInfo) {
122
+ if (this.onClickCartIcon) {
123
+ const callbackId = event.callbackId;
124
+ delete event.callbackId;
125
+ const cartPage = await this.onClickCartIcon();
126
+ this.currentCartPage = cartPage;
127
+
128
+ if (cartPage) {
129
+ ShoppingModule.jumpToCartPage(callbackId!);
130
+ }
131
+ }
132
+ }
133
+
134
+ private async handleUpdateProductDetailsEvent(
135
+ event: UpdateProductDetailsEvent & CallbackInfo
136
+ ) {
137
+ if (this.onUpdateProductDetails) {
138
+ const callbackId = event.callbackId;
139
+ delete event.callbackId;
140
+ const product = await this.onUpdateProductDetails(
141
+ event as UpdateProductDetailsEvent
142
+ );
143
+ if (product) {
144
+ ShoppingModule.updateVideoProduct(product, callbackId!);
145
+ }
146
+ }
147
+ }
148
+
149
+ private async handleWillDisplayProductEvent(
150
+ event: WillDisplayProductEvent & CallbackInfo
151
+ ) {
152
+ if (this.onWillDisplayProduct) {
153
+ const callbackId = event.callbackId;
154
+ delete event.callbackId;
155
+ const config = await this.onWillDisplayProduct(
156
+ event as WillDisplayProductEvent
157
+ );
158
+ if (config) {
159
+ ShoppingModule.updateProductViewConfig(config, callbackId!);
160
+ }
161
+ }
162
+ }
163
+ }
164
+
165
+ export default VideoShopping;
@@ -0,0 +1,20 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import { StyleSheet, View } from 'react-native';
4
+
5
+ import VideoShopping from '../VideoShopping';
6
+
7
+ const CartContainer = () => {
8
+ const [cartPage, _] = useState<React.ReactNode>(
9
+ VideoShopping.getInstance().currentCartPage
10
+ );
11
+ return <View style={styles.container}>{cartPage}</View>;
12
+ };
13
+
14
+ const styles = StyleSheet.create({
15
+ container: {
16
+ flex: 1,
17
+ },
18
+ });
19
+
20
+ export default CartContainer;
@@ -0,0 +1,10 @@
1
+ import { requireNativeComponent, UIManager } from 'react-native'
2
+ import { LINKING_ERROR } from "../constants/FWErrorMessage";
3
+ const NativeComponentName = 'FWVideoFeed';
4
+ const FWVideoFeed =
5
+ UIManager.getViewManagerConfig(NativeComponentName) != null
6
+ ? requireNativeComponent<any>(NativeComponentName)
7
+ : () => {
8
+ throw new Error(LINKING_ERROR);
9
+ };
10
+ export default FWVideoFeed