@deuna/react-native-sdk 1.0.3 → 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/lib/module/DeunaSDK.js +85 -77
- package/lib/module/DeunaSDK.js.map +1 -1
- package/lib/module/components/DeunaWidget.js +27 -25
- 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 +15 -21
- package/lib/module/controllers/BaseWebViewController.js.map +1 -1
- package/lib/module/controllers/ElementsWidgetController.js +2 -3
- 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 +2 -2
- 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/ViewManager.js +32 -0
- package/lib/module/helpers/ViewManager.js.map +1 -0
- package/lib/module/helpers/{getController.js → buildDeunaWidgetController.js} +2 -2
- package/lib/module/helpers/buildDeunaWidgetController.js.map +1 -0
- package/lib/module/helpers/getSubmitStrategy.js +1 -1
- package/lib/module/helpers/getSubmitStrategy.js.map +1 -1
- package/lib/module/interfaces/constants.js +1 -0
- package/lib/module/interfaces/constants.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 +9 -11
- 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 +4 -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.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/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/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/interfaces/constants.d.ts +1 -0
- package/lib/typescript/deuna-sdk-react-native/src/interfaces/constants.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 +3 -1
- package/src/DeunaSDK.ts +102 -90
- package/src/components/DeunaWidget.tsx +38 -35
- package/src/components/ExternalUrlWebView.tsx +65 -0
- package/src/controllers/BaseWebViewController.ts +21 -27
- package/src/controllers/ElementsWidgetController.ts +2 -3
- package/src/controllers/{OpenInNewTabController.ts → ExternalUrlController.ts} +3 -3
- package/src/controllers/PaymentWidgetController.ts +2 -2
- package/src/helpers/Completer.ts +2 -2
- package/src/helpers/CrossPlatformBrowser.ts +49 -0
- package/src/helpers/ExternalUrlHelper.ts +118 -0
- package/src/helpers/ViewManager.ts +45 -0
- package/src/helpers/{getController.ts → buildDeunaWidgetController.ts} +1 -1
- package/src/helpers/getSubmitStrategy.ts +1 -1
- package/src/interfaces/constants.ts +2 -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
package/lib/module/DeunaSDK.js
CHANGED
|
@@ -2,37 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
import { BaseDeuna } from "./types/index.js";
|
|
4
4
|
import { PaymentWidgetController } from "./controllers/PaymentWidgetController.js";
|
|
5
|
-
import {
|
|
6
|
-
import { getWidgetController } from "./helpers/getController.js";
|
|
7
|
-
import { Completer } from "./helpers/Completer.js";
|
|
5
|
+
import { buildDeunaWidgetController } from "./helpers/buildDeunaWidgetController.js";
|
|
8
6
|
import { ElementsWidgetController } from "./controllers/ElementsWidgetController.js";
|
|
9
7
|
import { DownloadType, Mode } from "./interfaces/types.js";
|
|
10
|
-
import { Platform } from 'react-native';
|
|
11
8
|
import { DeviceFingerprintController } from "./controllers/DeviceFingerprintController.js";
|
|
12
|
-
import { DEVICE_FINGERPRINT_URL } from "./interfaces/constants.js";
|
|
9
|
+
import { DEVICE_FINGERPRINT_URL, DOMAINS_MUST_BE_USE_CROSS_PLATFORM_BROWSER } from "./interfaces/constants.js";
|
|
13
10
|
import { getSubmitStrategy } from "./helpers/getSubmitStrategy.js";
|
|
11
|
+
import { WebViewManager } from "./helpers/ViewManager.js";
|
|
12
|
+
import { ExternalUrlBrowser, ExternalUrlHelper } from "./helpers/ExternalUrlHelper.js";
|
|
14
13
|
export class DeunaSDK extends BaseDeuna {
|
|
15
14
|
constructor(config, onDestroyed) {
|
|
16
15
|
super();
|
|
17
16
|
this.config = config;
|
|
18
17
|
this.onDestroyed = onDestroyed;
|
|
19
18
|
}
|
|
20
|
-
mode = null;
|
|
21
19
|
listeners = new Set();
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
deunaWidgetManager = new WebViewManager();
|
|
21
|
+
externalUrlHelper = new ExternalUrlHelper();
|
|
24
22
|
deviceFingerprintController = null;
|
|
25
23
|
submitStrategy = null;
|
|
26
|
-
modalDismissPromise = null;
|
|
27
|
-
newTabModalDismissPromise = null;
|
|
28
|
-
get safeWebViewController() {
|
|
29
|
-
if (!this.webViewController) {
|
|
30
|
-
const errorMessage = 'A variant of the init method must be called first. Please call initPaymentWidget, initVoucherWidget, or another init method before using this functionality.';
|
|
31
|
-
console.error(errorMessage);
|
|
32
|
-
throw new Error(errorMessage);
|
|
33
|
-
}
|
|
34
|
-
return this.webViewController;
|
|
35
|
-
}
|
|
36
24
|
|
|
37
25
|
/**
|
|
38
26
|
* Generates a device fingerprint, creates a invisible webview to get the device fingerprint
|
|
@@ -64,12 +52,11 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
64
52
|
controller,
|
|
65
53
|
mode
|
|
66
54
|
} = params;
|
|
67
|
-
this.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
this.webViewController.delegate = this.buildDelegate();
|
|
55
|
+
this.deunaWidgetManager.initialize({
|
|
56
|
+
controller,
|
|
57
|
+
mode: mode ?? Mode.MODAL,
|
|
58
|
+
delegate: this.buildDelegate()
|
|
59
|
+
});
|
|
73
60
|
this.notifyListeners();
|
|
74
61
|
};
|
|
75
62
|
|
|
@@ -80,7 +67,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
80
67
|
*/
|
|
81
68
|
async initPaymentWidget(props) {
|
|
82
69
|
this.setWidgetController({
|
|
83
|
-
controller:
|
|
70
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
84
71
|
widget: 'payment',
|
|
85
72
|
...props
|
|
86
73
|
}),
|
|
@@ -95,7 +82,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
95
82
|
*/
|
|
96
83
|
async initElements(props) {
|
|
97
84
|
this.setWidgetController({
|
|
98
|
-
controller:
|
|
85
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
99
86
|
widget: 'elements',
|
|
100
87
|
...props
|
|
101
88
|
}),
|
|
@@ -110,7 +97,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
110
97
|
*/
|
|
111
98
|
async initNextAction(props) {
|
|
112
99
|
this.setWidgetController({
|
|
113
|
-
controller:
|
|
100
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
114
101
|
widget: 'nextAction',
|
|
115
102
|
...props
|
|
116
103
|
}),
|
|
@@ -125,7 +112,7 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
125
112
|
*/
|
|
126
113
|
async initVoucherWidget(props) {
|
|
127
114
|
this.setWidgetController({
|
|
128
|
-
controller:
|
|
115
|
+
controller: buildDeunaWidgetController(this.config, {
|
|
129
116
|
widget: 'voucher',
|
|
130
117
|
...props
|
|
131
118
|
}),
|
|
@@ -133,59 +120,66 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
133
120
|
});
|
|
134
121
|
}
|
|
135
122
|
isValid = async () => {
|
|
136
|
-
return this.
|
|
123
|
+
return this.deunaWidgetManager.controller.isValid();
|
|
137
124
|
};
|
|
138
125
|
submit = async () => {
|
|
139
126
|
this.getStateFn = () => this.getWidgetState();
|
|
140
127
|
const submitStrategy = await getSubmitStrategy(this);
|
|
141
128
|
if (!submitStrategy) {
|
|
142
|
-
return this.
|
|
129
|
+
return this.deunaWidgetManager.controller.submit();
|
|
143
130
|
}
|
|
144
131
|
this.submitStrategy = submitStrategy;
|
|
145
132
|
this.notifyListeners();
|
|
146
133
|
return this.submitStrategy.submit();
|
|
147
134
|
};
|
|
148
135
|
setCustomStyle = async style => {
|
|
149
|
-
return this.
|
|
136
|
+
return this.deunaWidgetManager.controller.setCustomStyle(style);
|
|
150
137
|
};
|
|
151
138
|
refetchOrder = async () => {
|
|
152
|
-
return this.
|
|
139
|
+
return this.deunaWidgetManager.controller.refetchOrder();
|
|
153
140
|
};
|
|
154
141
|
getWidgetState = async () => {
|
|
155
|
-
return this.
|
|
142
|
+
return this.deunaWidgetManager.controller.getWidgetState();
|
|
156
143
|
};
|
|
157
144
|
|
|
158
145
|
/**
|
|
159
146
|
* Closes the DEUNA widget and releases the resources
|
|
160
147
|
*/
|
|
161
148
|
close = async () => {
|
|
162
|
-
if (this.
|
|
163
|
-
|
|
164
|
-
} else if (this.webViewController instanceof ElementsWidgetController) {
|
|
165
|
-
this.webViewController.callbacks.onClosed?.(this.webViewController.closedAction);
|
|
149
|
+
if (!this.deunaWidgetManager.isInitialized) {
|
|
150
|
+
return;
|
|
166
151
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
await this.submitStrategy?.deunaSDK.close();
|
|
176
|
-
this.submitStrategy = null;
|
|
177
|
-
this.notifyListeners();
|
|
152
|
+
try {
|
|
153
|
+
let onClosedCallback;
|
|
154
|
+
const closedAction = this.deunaWidgetManager.controller.closedAction;
|
|
155
|
+
if (this.deunaWidgetManager.controller instanceof PaymentWidgetController) {
|
|
156
|
+
onClosedCallback = this.deunaWidgetManager.controller.callbacks.onClosed;
|
|
157
|
+
} else if (this.deunaWidgetManager.controller instanceof ElementsWidgetController) {
|
|
158
|
+
onClosedCallback = this.deunaWidgetManager.controller.callbacks.onClosed;
|
|
159
|
+
}
|
|
178
160
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
161
|
+
// If the external url was opened in a Safari View Controller or a Custom Chrome Tab
|
|
162
|
+
// we need to wait until the browser is dismissed
|
|
163
|
+
await this.externalUrlHelper.waitForClose();
|
|
164
|
+
|
|
165
|
+
// Destroy the main webview and dismiss the modal
|
|
166
|
+
this.deunaWidgetManager.destroy();
|
|
167
|
+
|
|
168
|
+
// Close the submit strategy if it exists
|
|
169
|
+
await this.submitStrategy?.deunaSDK.close();
|
|
170
|
+
this.submitStrategy = null;
|
|
171
|
+
|
|
172
|
+
// Notify listeners that the widget has been closed
|
|
173
|
+
this.notifyListeners();
|
|
174
|
+
|
|
175
|
+
// Notify the user that the widget has been closed
|
|
176
|
+
this.onDestroyed?.();
|
|
177
|
+
|
|
178
|
+
// Notify the widget that the user has closed the widget
|
|
179
|
+
onClosedCallback?.(closedAction);
|
|
180
|
+
} catch (error) {
|
|
181
|
+
console.error('Error closing the widget', error);
|
|
182
|
+
}
|
|
189
183
|
};
|
|
190
184
|
addListener = listener => {
|
|
191
185
|
this.listeners.add(listener);
|
|
@@ -197,20 +191,22 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
197
191
|
this.listeners.forEach(listener => listener());
|
|
198
192
|
};
|
|
199
193
|
notifyDownloadFile = url => {
|
|
200
|
-
if (this.
|
|
201
|
-
this.
|
|
194
|
+
if (this.deunaWidgetManager.controller instanceof PaymentWidgetController) {
|
|
195
|
+
this.deunaWidgetManager.controller.callbacks.onDownloadFile?.({
|
|
202
196
|
type: DownloadType.URL,
|
|
203
197
|
data: url
|
|
204
198
|
});
|
|
205
199
|
}
|
|
206
200
|
};
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Closes the external URL Webview
|
|
204
|
+
*/
|
|
205
|
+
onCloseExternalUrl = async () => {
|
|
206
|
+
if (this.externalUrlHelper.externalUrlWebViewController) {
|
|
207
|
+
await this.externalUrlHelper.closeWebView();
|
|
208
|
+
this.notifyListeners();
|
|
210
209
|
}
|
|
211
|
-
this.newTabWebViewController?.dispose();
|
|
212
|
-
this.newTabWebViewController = null;
|
|
213
|
-
this.notifyListeners();
|
|
214
210
|
};
|
|
215
211
|
|
|
216
212
|
/**
|
|
@@ -221,21 +217,33 @@ export class DeunaSDK extends BaseDeuna {
|
|
|
221
217
|
*/
|
|
222
218
|
buildDelegate = () => {
|
|
223
219
|
return {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
220
|
+
onOpenExternalUrl: url => {
|
|
221
|
+
try {
|
|
222
|
+
const host = new URL(url).host;
|
|
223
|
+
let browser = ExternalUrlBrowser.WEB_VIEW;
|
|
224
|
+
// Check if the URL is from a domain that must be opened in a cross platform browser (SafariView or Chrome Custom Tab)
|
|
225
|
+
for (const domain of DOMAINS_MUST_BE_USE_CROSS_PLATFORM_BROWSER) {
|
|
226
|
+
if (host.includes(domain)) {
|
|
227
|
+
browser = ExternalUrlBrowser.CROSS_PLATFORM_BROWSER;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
this.externalUrlHelper.openUrl({
|
|
232
|
+
url,
|
|
233
|
+
browser,
|
|
234
|
+
delegate: {
|
|
235
|
+
onCloseExternalUrl: this.onCloseExternalUrl,
|
|
236
|
+
onFileDownload: this.notifyDownloadFile
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
this.notifyListeners();
|
|
240
|
+
} catch (error) {
|
|
241
|
+
console.error('Error opening external URL', error);
|
|
228
242
|
}
|
|
229
|
-
this.newTabWebViewController.delegate = {
|
|
230
|
-
onFileDownload: this.notifyDownloadFile,
|
|
231
|
-
onNewTabWindowClose: this.onCloseNewTab
|
|
232
|
-
};
|
|
233
|
-
this.notifyListeners();
|
|
234
243
|
},
|
|
244
|
+
onCloseExternalUrl: this.onCloseExternalUrl,
|
|
235
245
|
onCloseButtonPressed: this.close,
|
|
236
246
|
// Close the payment widget when the user presses the close button
|
|
237
|
-
onCloseSubWebView: this.onCloseNewTab,
|
|
238
|
-
// Close the new tab web view when the DEUNA widget emits an error event or when the purchase is successful
|
|
239
247
|
onFileDownload: this.notifyDownloadFile // Notify the user when a request to download a file is made
|
|
240
248
|
};
|
|
241
249
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BaseDeuna","PaymentWidgetController","
|
|
1
|
+
{"version":3,"names":["BaseDeuna","PaymentWidgetController","buildDeunaWidgetController","ElementsWidgetController","DownloadType","Mode","DeviceFingerprintController","DEVICE_FINGERPRINT_URL","DOMAINS_MUST_BE_USE_CROSS_PLATFORM_BROWSER","getSubmitStrategy","WebViewManager","ExternalUrlBrowser","ExternalUrlHelper","DeunaSDK","constructor","config","onDestroyed","listeners","Set","deunaWidgetManager","externalUrlHelper","deviceFingerprintController","submitStrategy","getSessionId","params","publicApiKey","environment","url","notifyListeners","deviceFingerprint","generateDeviceFingerprint","dispose","initialize","setWidgetController","controller","mode","MODAL","delegate","buildDelegate","initPaymentWidget","props","widget","initElements","initNextAction","initVoucherWidget","isValid","submit","getStateFn","getWidgetState","setCustomStyle","style","refetchOrder","close","isInitialized","onClosedCallback","closedAction","callbacks","onClosed","waitForClose","destroy","deunaSDK","error","console","addListener","listener","add","removeListener","delete","forEach","notifyDownloadFile","onDownloadFile","type","URL","data","onCloseExternalUrl","externalUrlWebViewController","closeWebView","onOpenExternalUrl","host","browser","WEB_VIEW","domain","includes","CROSS_PLATFORM_BROWSER","openUrl","onFileDownload","onCloseButtonPressed"],"sourceRoot":"../../src","sources":["DeunaSDK.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import { Modal, SafeAreaView, StyleSheet, View } from 'react-native';
|
|
4
4
|
import { useEffect, useRef, useState } from 'react';
|
|
5
5
|
import { DeunaWebView } from "./DeunaWebView.js";
|
|
6
|
-
import { NewTabWebView } from "./NewTabWebView.js";
|
|
7
6
|
import { Mode } from "../interfaces/types.js";
|
|
8
7
|
import { DeviceFingerprintWebView } from "./DeviceFingerprintWebView.js";
|
|
8
|
+
import { ExternalUrlWebView } from "./ExternalUrlWebView.js";
|
|
9
9
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
10
|
export const DeunaWidget = props => {
|
|
11
11
|
const {
|
|
@@ -38,7 +38,7 @@ const DeunaWidgetContainer = props => {
|
|
|
38
38
|
instance
|
|
39
39
|
} = props;
|
|
40
40
|
const instanceRef = useRef(instance);
|
|
41
|
-
const [
|
|
41
|
+
const [isVisible, setIsVisible] = useState(instanceRef.current.deunaWidgetManager.isInitialized);
|
|
42
42
|
useEffect(() => {
|
|
43
43
|
instanceRef.current = instance;
|
|
44
44
|
}, [instance]);
|
|
@@ -47,59 +47,61 @@ const DeunaWidgetContainer = props => {
|
|
|
47
47
|
// has changed
|
|
48
48
|
useEffect(() => {
|
|
49
49
|
const listener = () => {
|
|
50
|
-
|
|
50
|
+
setIsVisible(instanceRef.current.deunaWidgetManager.isInitialized);
|
|
51
51
|
};
|
|
52
52
|
instanceRef.current.addListener(listener);
|
|
53
53
|
return () => {
|
|
54
54
|
instanceRef.current.removeListener(listener);
|
|
55
|
-
instanceRef.current.
|
|
55
|
+
if (instanceRef.current.deunaWidgetManager.isInitialized) {
|
|
56
|
+
instanceRef.current.deunaWidgetManager.controller?.dispose();
|
|
57
|
+
}
|
|
56
58
|
};
|
|
57
59
|
}, []);
|
|
58
|
-
const isModal = mode === Mode.MODAL;
|
|
59
|
-
const isEmbedded = mode === Mode.EMBEDDED;
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* This function is used to close the widget
|
|
63
63
|
*/
|
|
64
64
|
const onClose = () => {
|
|
65
|
-
const controller = instanceRef.current.
|
|
65
|
+
const controller = instanceRef.current.deunaWidgetManager.controller;
|
|
66
66
|
controller.closedAction = 'userAction';
|
|
67
67
|
instanceRef.current.close();
|
|
68
68
|
};
|
|
69
69
|
|
|
70
70
|
// render the widget if mode is not null
|
|
71
|
+
const viewManager = instanceRef.current.deunaWidgetManager;
|
|
72
|
+
const controller = viewManager.isInitialized ? viewManager.controller : null;
|
|
73
|
+
const isModal = isVisible && viewManager.mode === Mode.MODAL;
|
|
74
|
+
const isEmbedded = isVisible && viewManager.mode === Mode.EMBEDDED;
|
|
71
75
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
72
|
-
children: [/*#__PURE__*/_jsx(Modal, {
|
|
76
|
+
children: [isModal && /*#__PURE__*/_jsx(Modal, {
|
|
73
77
|
presentationStyle: "pageSheet",
|
|
74
78
|
animationType: "slide",
|
|
75
79
|
onRequestClose: onClose,
|
|
76
|
-
|
|
77
|
-
visible: isModal,
|
|
78
|
-
children: isModal && /*#__PURE__*/_jsx(SafeAreaView, {
|
|
80
|
+
children: /*#__PURE__*/_jsx(SafeAreaView, {
|
|
79
81
|
style: styles.container,
|
|
80
82
|
children: /*#__PURE__*/_jsxs(View, {
|
|
81
83
|
style: styles.container,
|
|
82
84
|
children: [/*#__PURE__*/_jsx(DeunaWebView, {
|
|
83
|
-
url:
|
|
84
|
-
onWebView:
|
|
85
|
-
onMessage:
|
|
86
|
-
onLoad:
|
|
87
|
-
onError:
|
|
88
|
-
onShouldStartLoadWithRequest:
|
|
89
|
-
}), /*#__PURE__*/_jsx(
|
|
85
|
+
url: controller?.url ?? '',
|
|
86
|
+
onWebView: controller?.setWebView,
|
|
87
|
+
onMessage: controller?.onMessage,
|
|
88
|
+
onLoad: controller?.onLoad,
|
|
89
|
+
onError: controller?.onError,
|
|
90
|
+
onShouldStartLoadWithRequest: controller?.onShouldStartLoadWithRequest
|
|
91
|
+
}), /*#__PURE__*/_jsx(ExternalUrlWebView, {
|
|
90
92
|
instance: instanceRef.current
|
|
91
93
|
})]
|
|
92
94
|
})
|
|
93
95
|
})
|
|
94
|
-
}), isEmbedded && /*#__PURE__*/_jsx(
|
|
96
|
+
}), isEmbedded && /*#__PURE__*/_jsx(ExternalUrlWebView, {
|
|
95
97
|
instance: instanceRef.current
|
|
96
98
|
}), isEmbedded && /*#__PURE__*/_jsx(DeunaWebView, {
|
|
97
|
-
url:
|
|
98
|
-
onWebView:
|
|
99
|
-
onMessage:
|
|
100
|
-
onLoad:
|
|
101
|
-
onError:
|
|
102
|
-
onShouldStartLoadWithRequest:
|
|
99
|
+
url: controller?.url ?? '',
|
|
100
|
+
onWebView: controller?.setWebView,
|
|
101
|
+
onMessage: controller?.onMessage,
|
|
102
|
+
onLoad: controller?.onLoad,
|
|
103
|
+
onError: controller?.onError,
|
|
104
|
+
onShouldStartLoadWithRequest: controller?.onShouldStartLoadWithRequest
|
|
103
105
|
}), /*#__PURE__*/_jsx(DeviceFingerprintWebView, {
|
|
104
106
|
instance: instanceRef.current
|
|
105
107
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Modal","SafeAreaView","StyleSheet","View","useEffect","useRef","useState","DeunaWebView","
|
|
1
|
+
{"version":3,"names":["Modal","SafeAreaView","StyleSheet","View","useEffect","useRef","useState","DeunaWebView","Mode","DeviceFingerprintWebView","ExternalUrlWebView","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DeunaWidget","props","instance","instanceRef","showPaymentStrategy","setShowPaymentStrategy","current","listener","submitStrategy","addListener","removeListener","children","DeunaWidgetContainer","deunaSDK","isVisible","setIsVisible","deunaWidgetManager","isInitialized","controller","dispose","onClose","closedAction","close","viewManager","isModal","mode","MODAL","isEmbedded","EMBEDDED","presentationStyle","animationType","onRequestClose","style","styles","container","url","onWebView","setWebView","onMessage","onLoad","onError","onShouldStartLoadWithRequest","create","flex"],"sourceRoot":"../../../src","sources":["components/DeunaWidget.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Modal, SafeAreaView, StyleSheet } from 'react-native';
|
|
5
|
+
import { DeunaWebView } from "./DeunaWebView.js";
|
|
6
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
7
|
+
export const ExternalUrlWebView = props => {
|
|
8
|
+
const {
|
|
9
|
+
instance
|
|
10
|
+
} = props;
|
|
11
|
+
const instanceRef = useRef(instance);
|
|
12
|
+
const [visible, setVisible] = useState(false);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
instanceRef.current = instance;
|
|
15
|
+
}, [instance]);
|
|
16
|
+
|
|
17
|
+
// Listen when the DeunaSDK instance configuration
|
|
18
|
+
// has changed
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const ref = instanceRef.current;
|
|
21
|
+
const listener = () => {
|
|
22
|
+
const isVisible = !!ref.externalUrlHelper.externalUrlWebViewController;
|
|
23
|
+
setVisible(isVisible);
|
|
24
|
+
};
|
|
25
|
+
instanceRef.current.addListener(listener);
|
|
26
|
+
return () => {
|
|
27
|
+
ref.removeListener(listener);
|
|
28
|
+
ref.externalUrlHelper.externalUrlWebViewController?.dispose();
|
|
29
|
+
};
|
|
30
|
+
}, []);
|
|
31
|
+
const externalUrlWebViewController = instanceRef.current.externalUrlHelper.externalUrlWebViewController;
|
|
32
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
33
|
+
children: visible && /*#__PURE__*/_jsx(Modal, {
|
|
34
|
+
presentationStyle: "pageSheet",
|
|
35
|
+
animationType: "slide",
|
|
36
|
+
onRequestClose: instanceRef.current.onCloseExternalUrl,
|
|
37
|
+
children: /*#__PURE__*/_jsx(SafeAreaView, {
|
|
38
|
+
style: styles.container,
|
|
39
|
+
children: /*#__PURE__*/_jsx(DeunaWebView, {
|
|
40
|
+
url: externalUrlWebViewController?.url ?? '',
|
|
41
|
+
onWebView: externalUrlWebViewController?.setWebView,
|
|
42
|
+
onMessage: externalUrlWebViewController?.onMessage,
|
|
43
|
+
onLoad: externalUrlWebViewController?.onLoad,
|
|
44
|
+
onError: externalUrlWebViewController?.onError,
|
|
45
|
+
onShouldStartLoadWithRequest: externalUrlWebViewController?.onShouldStartLoadWithRequest
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const styles = StyleSheet.create({
|
|
52
|
+
container: {
|
|
53
|
+
flex: 1
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=ExternalUrlWebView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","Modal","SafeAreaView","StyleSheet","DeunaWebView","jsx","_jsx","Fragment","_Fragment","ExternalUrlWebView","props","instance","instanceRef","visible","setVisible","current","ref","listener","isVisible","externalUrlHelper","externalUrlWebViewController","addListener","removeListener","dispose","children","presentationStyle","animationType","onRequestClose","onCloseExternalUrl","style","styles","container","url","onWebView","setWebView","onMessage","onLoad","onError","onShouldStartLoadWithRequest","create","flex"],"sourceRoot":"../../../src","sources":["components/ExternalUrlWebView.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEnD,SAASC,KAAK,EAAEC,YAAY,EAAEC,UAAU,QAAQ,cAAc;AAC9D,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA;AAM9C,OAAO,MAAMC,kBAAkB,GAAIC,KAA8B,IAAK;EACpE,MAAM;IAAEC;EAAS,CAAC,GAAGD,KAAK;EAC1B,MAAME,WAAW,GAAGb,MAAM,CAAWY,QAAQ,CAAC;EAC9C,MAAM,CAACE,OAAO,EAAEC,UAAU,CAAC,GAAGd,QAAQ,CAAC,KAAK,CAAC;EAE7CF,SAAS,CAAC,MAAM;IACdc,WAAW,CAACG,OAAO,GAAGJ,QAAQ;EAChC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;;EAEd;EACA;EACAb,SAAS,CAAC,MAAM;IACd,MAAMkB,GAAG,GAAGJ,WAAW,CAACG,OAAO;IAC/B,MAAME,QAAQ,GAAGA,CAAA,KAAM;MACrB,MAAMC,SAAS,GAAG,CAAC,CAACF,GAAG,CAACG,iBAAiB,CAACC,4BAA4B;MACtEN,UAAU,CAACI,SAAS,CAAC;IACvB,CAAC;IAEDN,WAAW,CAACG,OAAO,CAACM,WAAW,CAACJ,QAAQ,CAAC;IAEzC,OAAO,MAAM;MACXD,GAAG,CAACM,cAAc,CAACL,QAAQ,CAAC;MAC5BD,GAAG,CAACG,iBAAiB,CAACC,4BAA4B,EAAEG,OAAO,CAAC,CAAC;IAC/D,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMH,4BAA4B,GAChCR,WAAW,CAACG,OAAO,CAACI,iBAAiB,CAACC,4BAA4B;EAEpE,oBACEd,IAAA,CAAAE,SAAA;IAAAgB,QAAA,EACGX,OAAO,iBACNP,IAAA,CAACL,KAAK;MACJwB,iBAAiB,EAAC,WAAW;MAC7BC,aAAa,EAAC,OAAO;MACrBC,cAAc,EAAEf,WAAW,CAACG,OAAO,CAACa,kBAAmB;MAAAJ,QAAA,eAEvDlB,IAAA,CAACJ,YAAY;QAAC2B,KAAK,EAAEC,MAAM,CAACC,SAAU;QAAAP,QAAA,eACpClB,IAAA,CAACF,YAAY;UACX4B,GAAG,EAAEZ,4BAA4B,EAAEY,GAAG,IAAI,EAAG;UAC7CC,SAAS,EAAEb,4BAA4B,EAAEc,UAAW;UACpDC,SAAS,EAAEf,4BAA4B,EAAEe,SAAU;UACnDC,MAAM,EAAEhB,4BAA4B,EAAEgB,MAAO;UAC7CC,OAAO,EAAEjB,4BAA4B,EAAEiB,OAAQ;UAC/CC,4BAA4B,EAC1BlB,4BAA4B,EAAEkB;QAC/B,CACF;MAAC,CACU;IAAC,CACV;EACR,CACD,CAAC;AAEP,CAAC;AAED,MAAMR,MAAM,GAAG3B,UAAU,CAACoC,MAAM,CAAC;EAAER,SAAS,EAAE;IAAES,IAAI,EAAE;EAAE;AAAE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -7,15 +7,14 @@ export let WebViewEventType = /*#__PURE__*/function (WebViewEventType) {
|
|
|
7
7
|
WebViewEventType["consoleLog"] = "consoleLog";
|
|
8
8
|
WebViewEventType["eventDispatch"] = "eventDispatch";
|
|
9
9
|
WebViewEventType["jsExecutor"] = "jsExecutor";
|
|
10
|
-
WebViewEventType["
|
|
10
|
+
WebViewEventType["openExternalUrl"] = "openExternalUrl";
|
|
11
11
|
WebViewEventType["redirect"] = "redirect";
|
|
12
|
-
WebViewEventType["
|
|
12
|
+
WebViewEventType["closeExternalUrl"] = "closeExternalUrl";
|
|
13
13
|
return WebViewEventType;
|
|
14
14
|
}({});
|
|
15
15
|
const DOWNLOAD_FILE_REGEX = /\.(pdf|doc|docx|xls|xlsx|zip|rar|txt|mp3|mp4|jpg|jpeg|png|gif)$/i;
|
|
16
16
|
export class BaseWebViewController {
|
|
17
17
|
initialized = false;
|
|
18
|
-
redirectUrl = null;
|
|
19
18
|
webView = null;
|
|
20
19
|
url = null;
|
|
21
20
|
delegate = null;
|
|
@@ -52,19 +51,14 @@ export class BaseWebViewController {
|
|
|
52
51
|
* @returns boolean indicating if the URL should be loaded in current WebView
|
|
53
52
|
*/
|
|
54
53
|
onShouldStartLoadWithRequest = request => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return false;
|
|
54
|
+
if (this.url === request.url) {
|
|
55
|
+
return true;
|
|
58
56
|
}
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// For Android, only check new navigation
|
|
65
|
-
const shouldOpenInNewTab = Platform.OS === 'ios' ? (isClickNavigation || isNewNavigation) && shouldHandleInNewTab : isNewNavigation && shouldHandleInNewTab;
|
|
66
|
-
if (shouldOpenInNewTab) {
|
|
67
|
-
this.delegate?.onOpenInNewTab?.(request.url);
|
|
57
|
+
const isAndroid = Platform.OS === 'android';
|
|
58
|
+
const isNewNavigation = isAndroid ? request.url.startsWith('https://') : request.navigationType === 'click';
|
|
59
|
+
const shouldOpenExternally = !this.urlMustBeLoadedInTheSameWebView(request.url);
|
|
60
|
+
if (isNewNavigation && shouldOpenExternally) {
|
|
61
|
+
this.delegate?.onOpenExternalUrl?.(request.url);
|
|
68
62
|
return false;
|
|
69
63
|
}
|
|
70
64
|
return true;
|
|
@@ -114,18 +108,18 @@ export class DeunaWebViewController extends BaseWebViewController {
|
|
|
114
108
|
this.jsExecutor.requests.get(requestId)?.(data);
|
|
115
109
|
this.jsExecutor.requests.delete(requestId);
|
|
116
110
|
},
|
|
117
|
-
[WebViewEventType.
|
|
118
|
-
this.delegate?.
|
|
111
|
+
[WebViewEventType.openExternalUrl]: () => {
|
|
112
|
+
this.delegate?.onOpenExternalUrl?.(eventData.url);
|
|
119
113
|
},
|
|
120
114
|
[WebViewEventType.redirect]: () => {
|
|
121
115
|
if (this.redirectUrl) {
|
|
122
116
|
return;
|
|
123
117
|
}
|
|
124
118
|
this.redirectUrl = eventData.url;
|
|
125
|
-
this.delegate?.
|
|
119
|
+
this.delegate?.onOpenExternalUrl?.(eventData.url);
|
|
126
120
|
},
|
|
127
|
-
[WebViewEventType.
|
|
128
|
-
this.delegate?.
|
|
121
|
+
[WebViewEventType.closeExternalUrl]: () => {
|
|
122
|
+
this.delegate?.onCloseExternalUrl?.();
|
|
129
123
|
}
|
|
130
124
|
};
|
|
131
125
|
mapper[eventData.type]?.();
|
|
@@ -133,7 +127,7 @@ export class DeunaWebViewController extends BaseWebViewController {
|
|
|
133
127
|
setXprops = () => {
|
|
134
128
|
this.webView?.injectJavaScript(`
|
|
135
129
|
window.open = function(url, target, features) {
|
|
136
|
-
window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.
|
|
130
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.openExternalUrl}', url }));
|
|
137
131
|
};
|
|
138
132
|
console.log = function(message) {
|
|
139
133
|
window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.consoleLog}', message }));
|