@deuna/react-native-sdk 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/lib/module/DeunaSDK.js +96 -75
- package/lib/module/DeunaSDK.js.map +1 -1
- package/lib/module/components/DeunaWidget.js +54 -26
- package/lib/module/components/DeunaWidget.js.map +1 -1
- package/lib/module/components/ExternalUrlWebView.js +56 -0
- package/lib/module/components/ExternalUrlWebView.js.map +1 -0
- package/lib/module/controllers/BaseWebViewController.js +21 -20
- package/lib/module/controllers/BaseWebViewController.js.map +1 -1
- package/lib/module/controllers/ElementsWidgetController.js +5 -5
- package/lib/module/controllers/ElementsWidgetController.js.map +1 -1
- package/lib/module/controllers/{OpenInNewTabController.js → ExternalUrlController.js} +4 -4
- package/lib/module/controllers/ExternalUrlController.js.map +1 -0
- package/lib/module/controllers/PaymentWidgetController.js +5 -4
- package/lib/module/controllers/PaymentWidgetController.js.map +1 -1
- package/lib/module/helpers/Completer.js +2 -2
- package/lib/module/helpers/Completer.js.map +1 -1
- package/lib/module/helpers/CrossPlatformBrowser.js +51 -0
- package/lib/module/helpers/CrossPlatformBrowser.js.map +1 -0
- package/lib/module/helpers/ExternalUrlHelper.js +96 -0
- package/lib/module/helpers/ExternalUrlHelper.js.map +1 -0
- package/lib/module/helpers/SubmitStrategy.js +44 -0
- package/lib/module/helpers/SubmitStrategy.js.map +1 -0
- package/lib/module/helpers/ViewManager.js +32 -0
- package/lib/module/helpers/ViewManager.js.map +1 -0
- package/lib/module/helpers/{getController.js → buildDeunaWidgetController.js} +12 -4
- package/lib/module/helpers/buildDeunaWidgetController.js.map +1 -0
- package/lib/module/helpers/getSubmitStrategy.js +32 -0
- package/lib/module/helpers/getSubmitStrategy.js.map +1 -0
- package/lib/module/interfaces/constants.js +2 -0
- package/lib/module/interfaces/constants.js.map +1 -1
- package/lib/module/interfaces/types.js.map +1 -1
- package/lib/module/types/helpers/buildElementsLink.js +3 -1
- package/lib/module/types/helpers/buildElementsLink.js.map +1 -1
- package/lib/module/types/helpers/buildPaymentLink.js +3 -1
- package/lib/module/types/helpers/buildPaymentLink.js.map +1 -1
- package/lib/module/types/helpers/buildVoucherLink.js +3 -1
- package/lib/module/types/helpers/buildVoucherLink.js.map +1 -1
- package/lib/module/types/helpers/constants.js +4 -0
- package/lib/module/types/helpers/constants.js.map +1 -0
- package/lib/module/types/helpers/urlConfig.js +1 -1
- package/lib/module/types/helpers/urlConfig.js.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/DeunaSDK.d.ts +14 -13
- package/lib/typescript/deuna-sdk-react-native/src/DeunaSDK.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/components/DeunaWidget.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/components/ExternalUrlWebView.d.ts +7 -0
- package/lib/typescript/deuna-sdk-react-native/src/components/ExternalUrlWebView.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/controllers/BaseWebViewController.d.ts +7 -6
- package/lib/typescript/deuna-sdk-react-native/src/controllers/BaseWebViewController.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/controllers/ElementsWidgetController.d.ts +3 -1
- package/lib/typescript/deuna-sdk-react-native/src/controllers/ElementsWidgetController.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/controllers/{OpenInNewTabController.d.ts → ExternalUrlController.d.ts} +2 -2
- package/lib/typescript/deuna-sdk-react-native/src/controllers/ExternalUrlController.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/controllers/PaymentWidgetController.d.ts +3 -2
- package/lib/typescript/deuna-sdk-react-native/src/controllers/PaymentWidgetController.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/helpers/CrossPlatformBrowser.d.ts +25 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/CrossPlatformBrowser.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/ExternalUrlHelper.d.ts +48 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/ExternalUrlHelper.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/SubmitStrategy.d.ts +23 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/SubmitStrategy.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/ViewManager.d.ts +19 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/ViewManager.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/{getController.d.ts → buildDeunaWidgetController.d.ts} +2 -2
- package/lib/typescript/deuna-sdk-react-native/src/helpers/buildDeunaWidgetController.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/getSubmitStrategy.d.ts +4 -0
- package/lib/typescript/deuna-sdk-react-native/src/helpers/getSubmitStrategy.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/interfaces/constants.d.ts +2 -0
- package/lib/typescript/deuna-sdk-react-native/src/interfaces/constants.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/interfaces/types.d.ts +6 -0
- package/lib/typescript/deuna-sdk-react-native/src/interfaces/types.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildElementsLink.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildPaymentLink.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildVoucherLink.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/constants.d.ts +2 -0
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/constants.d.ts.map +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/urlConfig.d.ts +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/types/helpers/urlConfig.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/types/interfaces/callbacks.d.ts +8 -0
- package/lib/typescript/deuna-sdk-react-native/src/types/interfaces/callbacks.d.ts.map +1 -1
- package/lib/typescript/deuna-sdk-react-native/src/types/interfaces/initWidgetBase.d.ts +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/types/interfaces/initWidgetBase.d.ts.map +1 -1
- package/package.json +7 -5
- package/src/DeunaSDK.ts +115 -83
- package/src/components/DeunaWidget.tsx +75 -35
- package/src/components/ExternalUrlWebView.tsx +65 -0
- package/src/controllers/BaseWebViewController.ts +28 -27
- package/src/controllers/ElementsWidgetController.ts +8 -6
- package/src/controllers/{OpenInNewTabController.ts → ExternalUrlController.ts} +3 -3
- package/src/controllers/PaymentWidgetController.ts +12 -5
- package/src/helpers/Completer.ts +2 -2
- package/src/helpers/CrossPlatformBrowser.ts +49 -0
- package/src/helpers/ExternalUrlHelper.ts +118 -0
- package/src/helpers/SubmitStrategy.ts +67 -0
- package/src/helpers/ViewManager.ts +45 -0
- package/src/helpers/{getController.ts → buildDeunaWidgetController.ts} +11 -4
- package/src/helpers/getSubmitStrategy.ts +42 -0
- package/src/interfaces/constants.ts +5 -1
- package/src/interfaces/types.ts +8 -0
- package/src/types/helpers/buildElementsLink.ts +4 -1
- package/src/types/helpers/buildPaymentLink.ts +2 -0
- package/src/types/helpers/buildVoucherLink.ts +2 -0
- package/src/types/helpers/constants.ts +1 -0
- package/src/types/helpers/urlConfig.ts +3 -1
- package/src/types/interfaces/callbacks.ts +10 -1
- package/src/types/interfaces/initWidgetBase.ts +1 -0
- package/lib/module/components/NewTabWebView.js +0 -56
- package/lib/module/components/NewTabWebView.js.map +0 -1
- package/lib/module/controllers/OpenInNewTabController.js.map +0 -1
- package/lib/module/helpers/getController.js.map +0 -1
- package/lib/typescript/deuna-sdk-react-native/src/components/NewTabWebView.d.ts +0 -7
- package/lib/typescript/deuna-sdk-react-native/src/components/NewTabWebView.d.ts.map +0 -1
- package/lib/typescript/deuna-sdk-react-native/src/controllers/OpenInNewTabController.d.ts.map +0 -1
- package/lib/typescript/deuna-sdk-react-native/src/helpers/getController.d.ts.map +0 -1
- package/src/components/NewTabWebView.tsx +0 -64
|
@@ -15,11 +15,16 @@ interface OnInstallmentSelectedPayload {
|
|
|
15
15
|
cardBin: string;
|
|
16
16
|
installmentPlanOptionId: string;
|
|
17
17
|
}
|
|
18
|
+
interface Dimensions {
|
|
19
|
+
height: number;
|
|
20
|
+
width: number;
|
|
21
|
+
}
|
|
18
22
|
interface BaseCallbacks {
|
|
19
23
|
onSuccess?: (data: Json) => void;
|
|
20
24
|
onError?: (data: OnError) => void;
|
|
21
25
|
onClosed?: (action: ClosedAction) => void;
|
|
22
26
|
onEventDispatch?: (event: string, payload: Json) => void;
|
|
27
|
+
onResize?: (dimensions: Dimensions) => void;
|
|
23
28
|
}
|
|
24
29
|
export interface PaymentWidgetCallbacks extends BaseCallbacks {
|
|
25
30
|
onCardBinDetected?: (data: OnCardBinDetected) => void;
|
|
@@ -33,6 +38,9 @@ export interface ElementsWidgetCallbacks extends BaseCallbacks {
|
|
|
33
38
|
export interface NextActionWidgetCallbacks extends BaseCallbacks {
|
|
34
39
|
}
|
|
35
40
|
export interface VoucherWidgetCallbacks extends BaseCallbacks {
|
|
41
|
+
onCardBinDetected?: (data: OnCardBinDetected) => void;
|
|
42
|
+
onInstallmentSelected?: (data: OnInstallmentSelectedPayload) => void;
|
|
43
|
+
onPaymentProcessing?: () => void;
|
|
36
44
|
}
|
|
37
45
|
export {};
|
|
38
46
|
//# sourceMappingURL=callbacks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../../../../../../src/types/interfaces/callbacks.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,cAAc,CAAC;AAEzD,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../../../../../../src/types/interfaces/callbacks.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,cAAc,CAAC;AAEzD,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AACD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,IAAI,CAAC;IACrE,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,yBAA0B,SAAQ,aAAa;CAAG;AAEnE,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,IAAI,CAAC;IACrE,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC"}
|
|
@@ -67,6 +67,7 @@ export interface InitWidgetBase {
|
|
|
67
67
|
userInfo?: Partial<UserInfo>;
|
|
68
68
|
behavior?: BehaviorWidget;
|
|
69
69
|
domain?: string;
|
|
70
|
+
platform?: string;
|
|
70
71
|
hidePayButton?: boolean;
|
|
71
72
|
callbacks?: PaymentWidgetCallbacks & ElementsWidgetCallbacks & NextActionWidgetCallbacks & VoucherWidgetCallbacks;
|
|
72
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initWidgetBase.d.ts","sourceRoot":"","sources":["../../../../../../src/types/interfaces/initWidgetBase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,KAAK,WAAW,CAAC,CAAC,IAAI;KACnB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,UAAU,QAAQ;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,cAAc,EAAE;QACd,kBAAkB,EAAE,OAAO,CAAC;QAC5B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,KAAK,EAAE;QACL,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QACL,gBAAgB,EAAE,OAAO,CAAC;QAC1B,cAAc,EAAE,OAAO,CAAC;QAExB,MAAM,EAAE,GAAG,EAAE,CAAC;KACf,CAAC;CACH;AACD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE;QACf,UAAU,CAAC,EAAE,kBAAkB,CAAC;QAChC,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,YAAY,CAAC,EAAE,oBAAoB,CAAC;QACpC,QAAQ,CAAC,EAAE,8BAA8B,CAAC;KAC3C,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,sBAAsB,GAChC,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;CAC1B;AAGD,KAAK,kCAAkC,GAAG,SAAS,GAAG,YAAY,CAAC;AACnE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,kCAAkC,CAAC;CAC1C"}
|
|
1
|
+
{"version":3,"file":"initWidgetBase.d.ts","sourceRoot":"","sources":["../../../../../../src/types/interfaces/initWidgetBase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deuna/react-native-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "React Native SDK",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
6
|
"main": "./lib/module/index.js",
|
|
7
7
|
"types": "./lib/typescript/deuna-sdk-react-native/src/index.d.ts",
|
|
8
8
|
"peerDependencies": {
|
|
9
|
+
"expo-web-browser": "*",
|
|
9
10
|
"react": "*",
|
|
10
11
|
"react-native": "*",
|
|
11
12
|
"react-native-webview": "*"
|
|
@@ -56,14 +57,14 @@
|
|
|
56
57
|
],
|
|
57
58
|
"repository": {
|
|
58
59
|
"type": "git",
|
|
59
|
-
"url": "git+https://github.com/
|
|
60
|
+
"url": "git+https://github.com/deuna-developers/deuna-sdk-react-native.git"
|
|
60
61
|
},
|
|
61
|
-
"author": "DEUNA
|
|
62
|
+
"author": "DEUNA (https://github.com/deuna-developers)",
|
|
62
63
|
"license": "MIT",
|
|
63
64
|
"bugs": {
|
|
64
|
-
"url": "https://github.com/
|
|
65
|
+
"url": "https://github.com/deuna-developers/deuna-sdk-react-native/issues"
|
|
65
66
|
},
|
|
66
|
-
"homepage": "https://github.com/
|
|
67
|
+
"homepage": "https://github.com/deuna-developers/deuna-sdk-react-native#readme",
|
|
67
68
|
"publishConfig": {
|
|
68
69
|
"registry": "https://registry.npmjs.org/"
|
|
69
70
|
},
|
|
@@ -82,6 +83,7 @@
|
|
|
82
83
|
"eslint": "^9.22.0",
|
|
83
84
|
"eslint-config-prettier": "^10.1.1",
|
|
84
85
|
"eslint-plugin-prettier": "^5.2.3",
|
|
86
|
+
"expo-web-browser": "14.1.6",
|
|
85
87
|
"jest": "^29.7.0",
|
|
86
88
|
"prettier": "^3.0.3",
|
|
87
89
|
"react": "18.3.1",
|
package/src/DeunaSDK.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseDeuna,
|
|
3
|
+
ClosedAction,
|
|
3
4
|
CustomStyles,
|
|
4
5
|
GetStateFn,
|
|
5
6
|
InitElementsWidgetParams,
|
|
@@ -18,27 +19,34 @@ import {
|
|
|
18
19
|
VoucherWidgetCallbacks,
|
|
19
20
|
} from './types';
|
|
20
21
|
import {
|
|
21
|
-
BaseWebViewController,
|
|
22
22
|
DeunaWebViewController,
|
|
23
23
|
WebViewDelegate,
|
|
24
24
|
} from './controllers/BaseWebViewController';
|
|
25
25
|
import { PaymentWidgetController } from './controllers/PaymentWidgetController';
|
|
26
|
-
import {
|
|
27
|
-
import { getWidgetController } from './helpers/getController';
|
|
28
|
-
import { Completer } from './helpers/Completer';
|
|
26
|
+
import { buildDeunaWidgetController } from './helpers/buildDeunaWidgetController';
|
|
29
27
|
import { ElementsWidgetController } from './controllers/ElementsWidgetController';
|
|
30
28
|
import { DownloadType, Mode, OnDownloadFile } from './interfaces/types';
|
|
31
|
-
import { Platform } from 'react-native';
|
|
32
29
|
import { DeviceFingerprintController } from './controllers/DeviceFingerprintController';
|
|
33
|
-
import {
|
|
30
|
+
import {
|
|
31
|
+
DEVICE_FINGERPRINT_URL,
|
|
32
|
+
DOMAINS_MUST_BE_USE_CROSS_PLATFORM_BROWSER,
|
|
33
|
+
} from './interfaces/constants';
|
|
34
|
+
import { SubmitStrategy } from './helpers/SubmitStrategy';
|
|
35
|
+
import { getSubmitStrategy } from './helpers/getSubmitStrategy';
|
|
36
|
+
import { WebViewManager } from './helpers/ViewManager';
|
|
37
|
+
import {
|
|
38
|
+
ExternalUrlBrowser,
|
|
39
|
+
ExternalUrlHelper,
|
|
40
|
+
} from './helpers/ExternalUrlHelper';
|
|
34
41
|
|
|
35
42
|
export class DeunaSDK extends BaseDeuna {
|
|
36
|
-
constructor(
|
|
43
|
+
constructor(
|
|
44
|
+
readonly config: InitializeParams,
|
|
45
|
+
readonly onDestroyed?: () => void
|
|
46
|
+
) {
|
|
37
47
|
super();
|
|
38
48
|
}
|
|
39
49
|
|
|
40
|
-
mode: Mode | null = null;
|
|
41
|
-
|
|
42
50
|
setCustomStyleFn?: SetCustomStyle | undefined;
|
|
43
51
|
refetchOrderFn?: RefetchOrder | undefined;
|
|
44
52
|
getStateFn?: GetStateFn | undefined;
|
|
@@ -47,22 +55,12 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
47
55
|
closeFn?: (() => void) | undefined;
|
|
48
56
|
|
|
49
57
|
private listeners: Set<() => void> = new Set();
|
|
50
|
-
webViewController: DeunaWebViewController | null = null;
|
|
51
|
-
newTabWebViewController: BaseWebViewController | null = null;
|
|
52
|
-
deviceFingerprintController: DeviceFingerprintController | null = null;
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
deunaWidgetManager = new WebViewManager<DeunaWebViewController>();
|
|
60
|
+
externalUrlHelper = new ExternalUrlHelper();
|
|
56
61
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const errorMessage =
|
|
60
|
-
'A variant of the init method must be called first. Please call initPaymentWidget, initVoucherWidget, or another init method before using this functionality.';
|
|
61
|
-
console.error(errorMessage);
|
|
62
|
-
throw new Error(errorMessage);
|
|
63
|
-
}
|
|
64
|
-
return this.webViewController;
|
|
65
|
-
}
|
|
62
|
+
deviceFingerprintController: DeviceFingerprintController | null = null;
|
|
63
|
+
submitStrategy: SubmitStrategy | null = null;
|
|
66
64
|
|
|
67
65
|
/**
|
|
68
66
|
* Generates a device fingerprint, creates a invisible webview to get the device fingerprint
|
|
@@ -102,12 +100,11 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
102
100
|
mode?: Mode;
|
|
103
101
|
}): void => {
|
|
104
102
|
const { controller, mode } = params;
|
|
105
|
-
this.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this.webViewController.delegate = this.buildDelegate();
|
|
103
|
+
this.deunaWidgetManager.initialize({
|
|
104
|
+
controller,
|
|
105
|
+
mode: mode ?? Mode.MODAL,
|
|
106
|
+
delegate: this.buildDelegate(),
|
|
107
|
+
});
|
|
111
108
|
this.notifyListeners();
|
|
112
109
|
};
|
|
113
110
|
|
|
@@ -123,7 +120,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
123
120
|
}
|
|
124
121
|
) {
|
|
125
122
|
this.setWidgetController({
|
|
126
|
-
controller:
|
|
123
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
127
124
|
widget: 'payment',
|
|
128
125
|
...props,
|
|
129
126
|
}),
|
|
@@ -140,7 +137,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
140
137
|
props: InitElementsWidgetParams & { mode?: Mode; sessionId?: string }
|
|
141
138
|
) {
|
|
142
139
|
this.setWidgetController({
|
|
143
|
-
controller:
|
|
140
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
144
141
|
widget: 'elements',
|
|
145
142
|
...props,
|
|
146
143
|
}),
|
|
@@ -155,7 +152,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
155
152
|
*/
|
|
156
153
|
async initNextAction(props: InitNextActionWidgetParams & { mode: Mode }) {
|
|
157
154
|
this.setWidgetController({
|
|
158
|
-
controller:
|
|
155
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
159
156
|
widget: 'nextAction',
|
|
160
157
|
...props,
|
|
161
158
|
}),
|
|
@@ -175,7 +172,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
175
172
|
}
|
|
176
173
|
) {
|
|
177
174
|
this.setWidgetController({
|
|
178
|
-
controller:
|
|
175
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
179
176
|
widget: 'voucher',
|
|
180
177
|
...props,
|
|
181
178
|
}),
|
|
@@ -184,60 +181,80 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
184
181
|
}
|
|
185
182
|
|
|
186
183
|
isValid = async (): Promise<boolean> => {
|
|
187
|
-
return this.
|
|
184
|
+
return this.deunaWidgetManager.controller.isValid();
|
|
188
185
|
};
|
|
189
186
|
|
|
190
187
|
submit = async (): Promise<SubmitResult> => {
|
|
191
|
-
|
|
188
|
+
this.getStateFn = () => this.getWidgetState();
|
|
189
|
+
const submitStrategy = await getSubmitStrategy(this);
|
|
190
|
+
|
|
191
|
+
if (!submitStrategy) {
|
|
192
|
+
return this.deunaWidgetManager.controller.submit();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
this.submitStrategy = submitStrategy;
|
|
196
|
+
this.notifyListeners();
|
|
197
|
+
return this.submitStrategy.submit();
|
|
192
198
|
};
|
|
193
199
|
|
|
194
200
|
setCustomStyle = async (style: Partial<CustomStyles>): Promise<void> => {
|
|
195
|
-
return this.
|
|
201
|
+
return this.deunaWidgetManager.controller.setCustomStyle(style);
|
|
196
202
|
};
|
|
197
203
|
|
|
198
204
|
refetchOrder = async (): Promise<Json | null> => {
|
|
199
|
-
return this.
|
|
205
|
+
return this.deunaWidgetManager.controller.refetchOrder();
|
|
200
206
|
};
|
|
201
207
|
|
|
202
208
|
getWidgetState = async (): Promise<State> => {
|
|
203
|
-
return this.
|
|
209
|
+
return this.deunaWidgetManager.controller.getWidgetState();
|
|
204
210
|
};
|
|
205
211
|
|
|
206
212
|
/**
|
|
207
213
|
* Closes the DEUNA widget and releases the resources
|
|
208
214
|
*/
|
|
209
215
|
close = async (): Promise<void> => {
|
|
210
|
-
if (this.
|
|
211
|
-
|
|
212
|
-
this.webViewController.closedAction
|
|
213
|
-
);
|
|
214
|
-
} else if (this.webViewController instanceof ElementsWidgetController) {
|
|
215
|
-
this.webViewController.callbacks.onClosed?.(
|
|
216
|
-
this.webViewController.closedAction
|
|
217
|
-
);
|
|
216
|
+
if (!this.deunaWidgetManager.isInitialized) {
|
|
217
|
+
return;
|
|
218
218
|
}
|
|
219
|
-
this.onCloseNewTab();
|
|
220
|
-
await this.newTabModalDismissPromise?.wait;
|
|
221
|
-
this.newTabWebViewController?.dispose();
|
|
222
|
-
|
|
223
|
-
this.webViewController?.dispose();
|
|
224
|
-
// reset all prop
|
|
225
|
-
this.newTabWebViewController = null;
|
|
226
|
-
this.webViewController = null;
|
|
227
|
-
this.mode = null;
|
|
228
|
-
this.notifyListeners();
|
|
229
219
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
};
|
|
220
|
+
try {
|
|
221
|
+
let onClosedCallback: ((action: ClosedAction) => void) | undefined;
|
|
222
|
+
const closedAction = this.deunaWidgetManager.controller.closedAction;
|
|
234
223
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
224
|
+
if (
|
|
225
|
+
this.deunaWidgetManager.controller instanceof PaymentWidgetController
|
|
226
|
+
) {
|
|
227
|
+
onClosedCallback =
|
|
228
|
+
this.deunaWidgetManager.controller.callbacks.onClosed;
|
|
229
|
+
} else if (
|
|
230
|
+
this.deunaWidgetManager.controller instanceof ElementsWidgetController
|
|
231
|
+
) {
|
|
232
|
+
onClosedCallback =
|
|
233
|
+
this.deunaWidgetManager.controller.callbacks.onClosed;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// If the external url was opened in a Safari View Controller or a Custom Chrome Tab
|
|
237
|
+
// we need to wait until the browser is dismissed
|
|
238
|
+
await this.externalUrlHelper.waitForClose();
|
|
239
|
+
|
|
240
|
+
// Destroy the main webview and dismiss the modal
|
|
241
|
+
this.deunaWidgetManager.destroy();
|
|
242
|
+
|
|
243
|
+
// Close the submit strategy if it exists
|
|
244
|
+
await this.submitStrategy?.deunaSDK.close();
|
|
245
|
+
this.submitStrategy = null;
|
|
238
246
|
|
|
239
|
-
|
|
240
|
-
|
|
247
|
+
// Notify listeners that the widget has been closed
|
|
248
|
+
this.notifyListeners();
|
|
249
|
+
|
|
250
|
+
// Notify the user that the widget has been closed
|
|
251
|
+
this.onDestroyed?.();
|
|
252
|
+
|
|
253
|
+
// Notify the widget that the user has closed the widget
|
|
254
|
+
onClosedCallback?.(closedAction);
|
|
255
|
+
} catch (error) {
|
|
256
|
+
console.error('Error closing the widget', error);
|
|
257
|
+
}
|
|
241
258
|
};
|
|
242
259
|
|
|
243
260
|
addListener = (listener: () => void) => {
|
|
@@ -253,21 +270,22 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
253
270
|
};
|
|
254
271
|
|
|
255
272
|
private notifyDownloadFile = (url: string) => {
|
|
256
|
-
if (this.
|
|
257
|
-
this.
|
|
273
|
+
if (this.deunaWidgetManager.controller instanceof PaymentWidgetController) {
|
|
274
|
+
this.deunaWidgetManager.controller.callbacks.onDownloadFile?.({
|
|
258
275
|
type: DownloadType.URL,
|
|
259
276
|
data: url,
|
|
260
277
|
});
|
|
261
278
|
}
|
|
262
279
|
};
|
|
263
280
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
281
|
+
/**
|
|
282
|
+
* Closes the external URL Webview
|
|
283
|
+
*/
|
|
284
|
+
onCloseExternalUrl = async () => {
|
|
285
|
+
if (this.externalUrlHelper.externalUrlWebViewController) {
|
|
286
|
+
await this.externalUrlHelper.closeWebView();
|
|
287
|
+
this.notifyListeners();
|
|
267
288
|
}
|
|
268
|
-
this.newTabWebViewController?.dispose();
|
|
269
|
-
this.newTabWebViewController = null;
|
|
270
|
-
this.notifyListeners();
|
|
271
289
|
};
|
|
272
290
|
|
|
273
291
|
/**
|
|
@@ -278,19 +296,33 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
278
296
|
*/
|
|
279
297
|
buildDelegate = (): WebViewDelegate => {
|
|
280
298
|
return {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
299
|
+
onOpenExternalUrl: (url) => {
|
|
300
|
+
try {
|
|
301
|
+
const host = new URL(url).host;
|
|
302
|
+
let browser = ExternalUrlBrowser.WEB_VIEW;
|
|
303
|
+
// Check if the URL is from a domain that must be opened in a cross platform browser (SafariView or Chrome Custom Tab)
|
|
304
|
+
for (const domain of DOMAINS_MUST_BE_USE_CROSS_PLATFORM_BROWSER) {
|
|
305
|
+
if (host.includes(domain)) {
|
|
306
|
+
browser = ExternalUrlBrowser.CROSS_PLATFORM_BROWSER;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
this.externalUrlHelper.openUrl({
|
|
312
|
+
url,
|
|
313
|
+
browser,
|
|
314
|
+
delegate: {
|
|
315
|
+
onCloseExternalUrl: this.onCloseExternalUrl,
|
|
316
|
+
onFileDownload: this.notifyDownloadFile,
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
this.notifyListeners();
|
|
320
|
+
} catch (error) {
|
|
321
|
+
console.error('Error opening external URL', error);
|
|
285
322
|
}
|
|
286
|
-
this.newTabWebViewController.delegate = {
|
|
287
|
-
onFileDownload: this.notifyDownloadFile,
|
|
288
|
-
onNewTabWindowClose: this.onCloseNewTab,
|
|
289
|
-
};
|
|
290
|
-
this.notifyListeners();
|
|
291
323
|
},
|
|
324
|
+
onCloseExternalUrl: this.onCloseExternalUrl,
|
|
292
325
|
onCloseButtonPressed: this.close, // Close the payment widget when the user presses the close button
|
|
293
|
-
onCloseSubWebView: this.onCloseNewTab, // Close the new tab web view when the DEUNA widget emits an error event or when the purchase is successful
|
|
294
326
|
onFileDownload: this.notifyDownloadFile, // Notify the user when a request to download a file is made
|
|
295
327
|
};
|
|
296
328
|
};
|
|
@@ -3,10 +3,9 @@ import { useEffect, useRef, useState } from 'react';
|
|
|
3
3
|
|
|
4
4
|
import { DeunaSDK } from '../DeunaSDK';
|
|
5
5
|
import { DeunaWebView } from './DeunaWebView';
|
|
6
|
-
import { NewTabWebView } from './NewTabWebView';
|
|
7
|
-
import { DeunaWebViewController } from '../controllers/BaseWebViewController';
|
|
8
6
|
import { Mode } from '../interfaces/types';
|
|
9
7
|
import { DeviceFingerprintWebView } from './DeviceFingerprintWebView';
|
|
8
|
+
import { ExternalUrlWebView } from './ExternalUrlWebView';
|
|
10
9
|
|
|
11
10
|
interface DeunaWidgetProps {
|
|
12
11
|
instance: DeunaSDK;
|
|
@@ -15,7 +14,46 @@ interface DeunaWidgetProps {
|
|
|
15
14
|
export const DeunaWidget = (props: DeunaWidgetProps) => {
|
|
16
15
|
const { instance } = props;
|
|
17
16
|
const instanceRef = useRef(instance);
|
|
18
|
-
const [
|
|
17
|
+
const [showPaymentStrategy, setShowPaymentStrategy] = useState(false);
|
|
18
|
+
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
instanceRef.current = instance;
|
|
21
|
+
}, [instance]);
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const listener = () => {
|
|
25
|
+
setShowPaymentStrategy(instanceRef.current.submitStrategy !== null);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
instanceRef.current.addListener(listener);
|
|
29
|
+
|
|
30
|
+
return () => {
|
|
31
|
+
instanceRef.current.removeListener(listener);
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<>
|
|
37
|
+
<DeunaWidgetContainer
|
|
38
|
+
key="MainDeunaWidget"
|
|
39
|
+
instance={instanceRef.current}
|
|
40
|
+
/>
|
|
41
|
+
{showPaymentStrategy && (
|
|
42
|
+
<DeunaWidgetContainer
|
|
43
|
+
key="PaymentStrategy"
|
|
44
|
+
instance={instanceRef.current.submitStrategy!.deunaSDK}
|
|
45
|
+
/>
|
|
46
|
+
)}
|
|
47
|
+
</>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const DeunaWidgetContainer = (props: DeunaWidgetProps) => {
|
|
52
|
+
const { instance } = props;
|
|
53
|
+
const instanceRef = useRef(instance);
|
|
54
|
+
const [isVisible, setIsVisible] = useState(
|
|
55
|
+
instanceRef.current.deunaWidgetManager.isInitialized
|
|
56
|
+
);
|
|
19
57
|
|
|
20
58
|
useEffect(() => {
|
|
21
59
|
instanceRef.current = instance;
|
|
@@ -25,74 +63,76 @@ export const DeunaWidget = (props: DeunaWidgetProps) => {
|
|
|
25
63
|
// has changed
|
|
26
64
|
useEffect(() => {
|
|
27
65
|
const listener = () => {
|
|
28
|
-
|
|
66
|
+
setIsVisible(instanceRef.current.deunaWidgetManager.isInitialized);
|
|
29
67
|
};
|
|
30
68
|
|
|
31
69
|
instanceRef.current.addListener(listener);
|
|
32
70
|
|
|
33
71
|
return () => {
|
|
34
72
|
instanceRef.current.removeListener(listener);
|
|
35
|
-
instanceRef.current.
|
|
73
|
+
if (instanceRef.current.deunaWidgetManager.isInitialized) {
|
|
74
|
+
instanceRef.current.deunaWidgetManager.controller?.dispose();
|
|
75
|
+
}
|
|
36
76
|
};
|
|
37
77
|
}, []);
|
|
38
78
|
|
|
39
|
-
const isModal = mode === Mode.MODAL;
|
|
40
|
-
const isEmbedded = mode === Mode.EMBEDDED;
|
|
41
|
-
|
|
42
79
|
/**
|
|
43
80
|
* This function is used to close the widget
|
|
44
81
|
*/
|
|
45
82
|
const onClose = () => {
|
|
46
|
-
const controller = instanceRef.current
|
|
47
|
-
.webViewController as DeunaWebViewController;
|
|
83
|
+
const controller = instanceRef.current.deunaWidgetManager.controller;
|
|
48
84
|
controller.closedAction = 'userAction';
|
|
49
85
|
instanceRef.current.close();
|
|
50
86
|
};
|
|
51
87
|
|
|
52
88
|
// render the widget if mode is not null
|
|
89
|
+
const viewManager = instanceRef.current.deunaWidgetManager;
|
|
90
|
+
const controller = viewManager.isInitialized ? viewManager.controller : null;
|
|
91
|
+
|
|
92
|
+
const isModal = isVisible && viewManager.mode === Mode.MODAL;
|
|
93
|
+
const isEmbedded = isVisible && viewManager.mode === Mode.EMBEDDED;
|
|
94
|
+
|
|
53
95
|
return (
|
|
54
96
|
<>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
>
|
|
62
|
-
{isModal && (
|
|
97
|
+
{isModal && (
|
|
98
|
+
<Modal
|
|
99
|
+
presentationStyle="pageSheet"
|
|
100
|
+
animationType="slide"
|
|
101
|
+
onRequestClose={onClose}
|
|
102
|
+
>
|
|
63
103
|
<SafeAreaView style={styles.container}>
|
|
64
104
|
<View style={styles.container}>
|
|
65
105
|
<DeunaWebView
|
|
66
|
-
url={
|
|
67
|
-
onWebView={
|
|
68
|
-
onMessage={
|
|
69
|
-
onLoad={
|
|
70
|
-
onError={
|
|
106
|
+
url={controller?.url ?? ''}
|
|
107
|
+
onWebView={controller?.setWebView}
|
|
108
|
+
onMessage={controller?.onMessage}
|
|
109
|
+
onLoad={controller?.onLoad}
|
|
110
|
+
onError={controller?.onError}
|
|
71
111
|
onShouldStartLoadWithRequest={
|
|
72
|
-
|
|
73
|
-
?.onShouldStartLoadWithRequest
|
|
112
|
+
controller?.onShouldStartLoadWithRequest
|
|
74
113
|
}
|
|
75
114
|
/>
|
|
76
|
-
<
|
|
115
|
+
<ExternalUrlWebView instance={instanceRef.current} />
|
|
77
116
|
</View>
|
|
78
117
|
</SafeAreaView>
|
|
79
|
-
|
|
80
|
-
|
|
118
|
+
</Modal>
|
|
119
|
+
)}
|
|
81
120
|
|
|
82
|
-
{isEmbedded && <
|
|
121
|
+
{isEmbedded && <ExternalUrlWebView instance={instanceRef.current} />}
|
|
83
122
|
|
|
84
123
|
{isEmbedded && (
|
|
85
124
|
<DeunaWebView
|
|
86
|
-
url={
|
|
87
|
-
onWebView={
|
|
88
|
-
onMessage={
|
|
89
|
-
onLoad={
|
|
90
|
-
onError={
|
|
125
|
+
url={controller?.url ?? ''}
|
|
126
|
+
onWebView={controller?.setWebView}
|
|
127
|
+
onMessage={controller?.onMessage}
|
|
128
|
+
onLoad={controller?.onLoad}
|
|
129
|
+
onError={controller?.onError}
|
|
91
130
|
onShouldStartLoadWithRequest={
|
|
92
|
-
|
|
131
|
+
controller?.onShouldStartLoadWithRequest
|
|
93
132
|
}
|
|
94
133
|
/>
|
|
95
134
|
)}
|
|
135
|
+
|
|
96
136
|
<DeviceFingerprintWebView instance={instanceRef.current} />
|
|
97
137
|
</>
|
|
98
138
|
);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { DeunaSDK } from '../DeunaSDK';
|
|
3
|
+
import { Modal, SafeAreaView, StyleSheet } from 'react-native';
|
|
4
|
+
import { DeunaWebView } from './DeunaWebView';
|
|
5
|
+
|
|
6
|
+
interface ExternalUrlWebViewProps {
|
|
7
|
+
instance: DeunaSDK;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const ExternalUrlWebView = (props: ExternalUrlWebViewProps) => {
|
|
11
|
+
const { instance } = props;
|
|
12
|
+
const instanceRef = useRef<DeunaSDK>(instance);
|
|
13
|
+
const [visible, setVisible] = useState(false);
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
instanceRef.current = instance;
|
|
17
|
+
}, [instance]);
|
|
18
|
+
|
|
19
|
+
// Listen when the DeunaSDK instance configuration
|
|
20
|
+
// has changed
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const ref = instanceRef.current;
|
|
23
|
+
const listener = () => {
|
|
24
|
+
const isVisible = !!ref.externalUrlHelper.externalUrlWebViewController;
|
|
25
|
+
setVisible(isVisible);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
instanceRef.current.addListener(listener);
|
|
29
|
+
|
|
30
|
+
return () => {
|
|
31
|
+
ref.removeListener(listener);
|
|
32
|
+
ref.externalUrlHelper.externalUrlWebViewController?.dispose();
|
|
33
|
+
};
|
|
34
|
+
}, []);
|
|
35
|
+
|
|
36
|
+
const externalUrlWebViewController =
|
|
37
|
+
instanceRef.current.externalUrlHelper.externalUrlWebViewController;
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<>
|
|
41
|
+
{visible && (
|
|
42
|
+
<Modal
|
|
43
|
+
presentationStyle="pageSheet"
|
|
44
|
+
animationType="slide"
|
|
45
|
+
onRequestClose={instanceRef.current.onCloseExternalUrl}
|
|
46
|
+
>
|
|
47
|
+
<SafeAreaView style={styles.container}>
|
|
48
|
+
<DeunaWebView
|
|
49
|
+
url={externalUrlWebViewController?.url ?? ''}
|
|
50
|
+
onWebView={externalUrlWebViewController?.setWebView}
|
|
51
|
+
onMessage={externalUrlWebViewController?.onMessage}
|
|
52
|
+
onLoad={externalUrlWebViewController?.onLoad}
|
|
53
|
+
onError={externalUrlWebViewController?.onError}
|
|
54
|
+
onShouldStartLoadWithRequest={
|
|
55
|
+
externalUrlWebViewController?.onShouldStartLoadWithRequest
|
|
56
|
+
}
|
|
57
|
+
/>
|
|
58
|
+
</SafeAreaView>
|
|
59
|
+
</Modal>
|
|
60
|
+
)}
|
|
61
|
+
</>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const styles = StyleSheet.create({ container: { flex: 1 } });
|