@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/src/helpers/Completer.ts
CHANGED
|
@@ -17,14 +17,14 @@ export class Completer<T> {
|
|
|
17
17
|
|
|
18
18
|
complete(value: T): void {
|
|
19
19
|
if (this.completed) return;
|
|
20
|
-
this.completed = true;
|
|
21
20
|
this.resolvePromise?.(value);
|
|
21
|
+
this.completed = true;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
completeError(error: any): void {
|
|
25
25
|
if (this.completed) return;
|
|
26
|
-
this.completed = true;
|
|
27
26
|
this.rejectPromise?.(error);
|
|
27
|
+
this.completed = true;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
isCompleted(): boolean {
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as WebBrowser from 'expo-web-browser';
|
|
2
|
+
import { Platform } from 'react-native';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This class is used to open a browser in a SafariView Controller (iOS) or
|
|
6
|
+
* a Chrome Custom Tab (Android) depending on the platform.
|
|
7
|
+
*
|
|
8
|
+
* It is used to open the external URLs in the DEUNA widget.
|
|
9
|
+
*/
|
|
10
|
+
class CrossPlatformBrowser {
|
|
11
|
+
private initialized = false;
|
|
12
|
+
/**
|
|
13
|
+
* Initialize the browser
|
|
14
|
+
*/
|
|
15
|
+
async initialize() {
|
|
16
|
+
if (this.initialized) return;
|
|
17
|
+
await WebBrowser.maybeCompleteAuthSession();
|
|
18
|
+
this.initialized = true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Open an URL in a SafariView Controller (iOS) or a Chrome Custom Tab (Android) depending on the platform
|
|
23
|
+
* @param url - The URL to open
|
|
24
|
+
*/
|
|
25
|
+
async openBrowser(url: string) {
|
|
26
|
+
try {
|
|
27
|
+
await this.initialize();
|
|
28
|
+
await WebBrowser.openBrowserAsync(url);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error('Error opening browser', error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Close the browser
|
|
36
|
+
*/
|
|
37
|
+
async closeBrowser() {
|
|
38
|
+
if (Platform.OS !== 'ios') {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
await WebBrowser.dismissBrowser();
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('Error closing browser', error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const crossPlatformBrowser = new CrossPlatformBrowser();
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { AppState, Platform } from 'react-native';
|
|
2
|
+
import { WebViewDelegate } from '../controllers/BaseWebViewController';
|
|
3
|
+
import { ExternalUrlController } from '../controllers/ExternalUrlController';
|
|
4
|
+
import { Completer } from './Completer';
|
|
5
|
+
import { crossPlatformBrowser } from './CrossPlatformBrowser';
|
|
6
|
+
|
|
7
|
+
export enum ExternalUrlBrowser {
|
|
8
|
+
WEB_VIEW = 'web_view',
|
|
9
|
+
CROSS_PLATFORM_BROWSER = 'cross_platform_browser',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface OpenUrlParams {
|
|
13
|
+
url: string;
|
|
14
|
+
browser: ExternalUrlBrowser;
|
|
15
|
+
delegate: WebViewDelegate;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface ExternalUrlManager<T extends ExternalUrlBrowser> {
|
|
19
|
+
type: T;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface WebViewManager
|
|
23
|
+
extends ExternalUrlManager<ExternalUrlBrowser.WEB_VIEW> {
|
|
24
|
+
controller: ExternalUrlController;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface CrossPlatformBrowserManager
|
|
28
|
+
extends ExternalUrlManager<ExternalUrlBrowser.CROSS_PLATFORM_BROWSER> {
|
|
29
|
+
type: ExternalUrlBrowser.CROSS_PLATFORM_BROWSER;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class ExternalUrlHelper {
|
|
33
|
+
private manager: ExternalUrlManager<ExternalUrlBrowser> | null = null;
|
|
34
|
+
private completer: Completer<void> | null = null;
|
|
35
|
+
|
|
36
|
+
constructor() {
|
|
37
|
+
this.startCloseChecker();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get externalUrlWebViewController() {
|
|
41
|
+
if (this.manager?.type === ExternalUrlBrowser.WEB_VIEW) {
|
|
42
|
+
return (this.manager as WebViewManager).controller;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Wait until the webview or cross platform browser is closed
|
|
49
|
+
*/
|
|
50
|
+
async waitForClose() {
|
|
51
|
+
if (this.completer) {
|
|
52
|
+
await this.completer.wait;
|
|
53
|
+
this.completer = null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Listen when the app is brought back to the foreground
|
|
59
|
+
*/
|
|
60
|
+
private startCloseChecker() {
|
|
61
|
+
AppState.addEventListener('change', (state) => {
|
|
62
|
+
if (
|
|
63
|
+
state === 'active' &&
|
|
64
|
+
this.manager?.type === ExternalUrlBrowser.CROSS_PLATFORM_BROWSER
|
|
65
|
+
) {
|
|
66
|
+
this.manager = null;
|
|
67
|
+
this.completeClose();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Opens the webview or cross platform browser
|
|
74
|
+
*/
|
|
75
|
+
async openUrl(params: OpenUrlParams) {
|
|
76
|
+
const { url, browser, delegate } = params;
|
|
77
|
+
|
|
78
|
+
const mapper = {
|
|
79
|
+
[ExternalUrlBrowser.WEB_VIEW]: async () => {
|
|
80
|
+
const controller = new ExternalUrlController(url);
|
|
81
|
+
controller.delegate = delegate;
|
|
82
|
+
this.manager = {
|
|
83
|
+
type: ExternalUrlBrowser.WEB_VIEW,
|
|
84
|
+
controller,
|
|
85
|
+
} as WebViewManager;
|
|
86
|
+
},
|
|
87
|
+
[ExternalUrlBrowser.CROSS_PLATFORM_BROWSER]: async () => {
|
|
88
|
+
this.completer = new Completer<void>();
|
|
89
|
+
this.manager = {
|
|
90
|
+
type: ExternalUrlBrowser.CROSS_PLATFORM_BROWSER,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
await crossPlatformBrowser.openBrowser(url);
|
|
94
|
+
if (Platform.OS === 'ios') {
|
|
95
|
+
this.completer?.complete();
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
await mapper[browser]();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Notify that the browser has been closed
|
|
104
|
+
*/
|
|
105
|
+
private completeClose() {
|
|
106
|
+
this.completer?.complete();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Closes the web view
|
|
111
|
+
*/
|
|
112
|
+
async closeWebView() {
|
|
113
|
+
if (this.manager?.type === ExternalUrlBrowser.WEB_VIEW) {
|
|
114
|
+
(this.manager as WebViewManager).controller?.dispose();
|
|
115
|
+
this.manager = null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseWebViewController,
|
|
3
|
+
WebViewDelegate,
|
|
4
|
+
} from '../controllers/BaseWebViewController';
|
|
5
|
+
import { Mode } from '../interfaces';
|
|
6
|
+
|
|
7
|
+
export class WebViewManager<
|
|
8
|
+
T extends BaseWebViewController = BaseWebViewController,
|
|
9
|
+
> {
|
|
10
|
+
private _controller: T | null = null;
|
|
11
|
+
private _mode: Mode | null = null;
|
|
12
|
+
|
|
13
|
+
initialize = (params: {
|
|
14
|
+
controller: T;
|
|
15
|
+
delegate: WebViewDelegate;
|
|
16
|
+
mode: Mode;
|
|
17
|
+
}): void => {
|
|
18
|
+
this._controller = params.controller;
|
|
19
|
+
this._controller.delegate = params.delegate;
|
|
20
|
+
this._mode = params.mode;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
get isInitialized(): boolean {
|
|
24
|
+
return !!this._controller;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get mode(): Mode | null {
|
|
28
|
+
return this._mode;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get controller(): T {
|
|
32
|
+
if (!this._controller) {
|
|
33
|
+
throw new Error('WebView not initialized');
|
|
34
|
+
}
|
|
35
|
+
return this._controller;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Destroy the webview and the modal (if it exists)
|
|
40
|
+
*/
|
|
41
|
+
destroy = () => {
|
|
42
|
+
this._controller?.dispose();
|
|
43
|
+
this._controller = null;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -34,7 +34,7 @@ type ControllerProps =
|
|
|
34
34
|
| VoucherWidgetControllerProps
|
|
35
35
|
| ElementsWidgetControllerProps;
|
|
36
36
|
|
|
37
|
-
export const
|
|
37
|
+
export const buildDeunaWidgetController = (
|
|
38
38
|
config: InitializeParams,
|
|
39
39
|
props: ControllerProps & { mode?: Mode; sessionId?: string }
|
|
40
40
|
): DeunaWebViewController => {
|
|
@@ -10,7 +10,7 @@ export const getSubmitStrategy = async (
|
|
|
10
10
|
return null;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const { widgetConfig } = deunaSDK.
|
|
13
|
+
const { widgetConfig } = deunaSDK.deunaWidgetManager.controller;
|
|
14
14
|
|
|
15
15
|
const processorName = selectedPaymentMethod.processor_name as string;
|
|
16
16
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Environment } from "../base";
|
|
2
2
|
import { hasKey } from "../utils/hasKey";
|
|
3
3
|
import { getIntegrationType, UrlConfig } from "./urlConfig";
|
|
4
|
+
import { PLATFORM_DEFAULT } from "./constants";
|
|
4
5
|
|
|
5
6
|
const ELEMENTS_URLS: Record<Environment, string> = {
|
|
6
|
-
production: "https://elements.deuna.
|
|
7
|
+
production: "https://elements.deuna.com",
|
|
7
8
|
sandbox: "https://elements.sandbox.deuna.io",
|
|
8
9
|
staging: "https://elements.stg.deuna.io",
|
|
9
10
|
develop: "https://elements.dev.deuna.io",
|
|
@@ -28,6 +29,7 @@ interface SearchParams {
|
|
|
28
29
|
userToken?: string;
|
|
29
30
|
showSavedCardsFlow?: string;
|
|
30
31
|
showDefaultCardFlow?: string;
|
|
32
|
+
platform?: string;
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
/**
|
|
@@ -50,6 +52,7 @@ const buildSearchParams = (config: UrlConfig): URLSearchParams => {
|
|
|
50
52
|
const searchParams: SearchParams = {
|
|
51
53
|
publicApiKey: config.publicApiKey,
|
|
52
54
|
orderToken: config.orderToken,
|
|
55
|
+
platform: config.platform || PLATFORM_DEFAULT,
|
|
53
56
|
email: userInfo?.email || "",
|
|
54
57
|
firstName: userInfo?.firstName || "",
|
|
55
58
|
lastName: userInfo?.lastName || "",
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
getIntegrationType,
|
|
11
11
|
UrlConfig,
|
|
12
12
|
} from "./urlConfig";
|
|
13
|
+
import { PLATFORM_DEFAULT } from "./constants";
|
|
13
14
|
|
|
14
15
|
const urls: Record<Environment, string> = {
|
|
15
16
|
production: "https://pay.deuna.io",
|
|
@@ -31,6 +32,7 @@ export const buildPaymentLink = (config: UrlConfig): string => {
|
|
|
31
32
|
mode: "widget",
|
|
32
33
|
int: getIntegrationType(config.mode),
|
|
33
34
|
language: config.language,
|
|
35
|
+
platform: config.platform || PLATFORM_DEFAULT,
|
|
34
36
|
});
|
|
35
37
|
|
|
36
38
|
// config.
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { Environment } from "../base";
|
|
8
|
+
import { PLATFORM_DEFAULT } from "./constants";
|
|
8
9
|
import { getIntegrationType, UrlConfig } from "./urlConfig";
|
|
9
10
|
|
|
10
11
|
const urls: Record<Environment, string> = {
|
|
@@ -28,6 +29,7 @@ export const buildVoucherLink = (config: UrlConfig): string => {
|
|
|
28
29
|
int: getIntegrationType(config.mode),
|
|
29
30
|
language: config.language,
|
|
30
31
|
orderToken,
|
|
32
|
+
platform: config.platform || PLATFORM_DEFAULT,
|
|
31
33
|
});
|
|
32
34
|
|
|
33
35
|
const xpropsB64 = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const PLATFORM_DEFAULT = "custom";
|
|
@@ -23,7 +23,7 @@ export const getIntegrationType = (mode?: string) => {
|
|
|
23
23
|
target: "embedded",
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
return modeMap[mode || ""] || "
|
|
26
|
+
return modeMap[mode || ""] || "link";
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
interface PaymentMethods {
|
|
@@ -71,6 +71,8 @@ export interface UrlConfig {
|
|
|
71
71
|
sessionId: string;
|
|
72
72
|
|
|
73
73
|
types?: ElementWidgetType[];
|
|
74
|
+
|
|
75
|
+
platform?: string;
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
export interface ElementWidgetType {
|
|
@@ -20,11 +20,16 @@ interface OnInstallmentSelectedPayload {
|
|
|
20
20
|
installmentPlanOptionId: string;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
interface Dimensions {
|
|
24
|
+
height: number;
|
|
25
|
+
width: number;
|
|
26
|
+
}
|
|
23
27
|
interface BaseCallbacks {
|
|
24
28
|
onSuccess?: (data: Json) => void;
|
|
25
29
|
onError?: (data: OnError) => void;
|
|
26
30
|
onClosed?: (action: ClosedAction) => void;
|
|
27
31
|
onEventDispatch?: (event: string, payload: Json) => void;
|
|
32
|
+
onResize?: (dimensions: Dimensions) => void;
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
export interface PaymentWidgetCallbacks extends BaseCallbacks {
|
|
@@ -40,4 +45,8 @@ export interface ElementsWidgetCallbacks extends BaseCallbacks {
|
|
|
40
45
|
|
|
41
46
|
export interface NextActionWidgetCallbacks extends BaseCallbacks {}
|
|
42
47
|
|
|
43
|
-
export interface VoucherWidgetCallbacks extends BaseCallbacks {
|
|
48
|
+
export interface VoucherWidgetCallbacks extends BaseCallbacks {
|
|
49
|
+
onCardBinDetected?: (data: OnCardBinDetected) => void;
|
|
50
|
+
onInstallmentSelected?: (data: OnInstallmentSelectedPayload) => void;
|
|
51
|
+
onPaymentProcessing?: () => void;
|
|
52
|
+
}
|
|
@@ -1,56 +0,0 @@
|
|
|
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 } from "react/jsx-runtime";
|
|
7
|
-
export const NewTabWebView = 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.newTabWebViewController;
|
|
23
|
-
setVisible(isVisible);
|
|
24
|
-
};
|
|
25
|
-
instanceRef.current.addListener(listener);
|
|
26
|
-
return () => {
|
|
27
|
-
ref.removeListener(listener);
|
|
28
|
-
ref.newTabWebViewController?.dispose();
|
|
29
|
-
};
|
|
30
|
-
}, []);
|
|
31
|
-
const newTabController = instanceRef.current.newTabWebViewController;
|
|
32
|
-
return /*#__PURE__*/_jsx(Modal, {
|
|
33
|
-
presentationStyle: "pageSheet",
|
|
34
|
-
visible: visible,
|
|
35
|
-
animationType: "slide",
|
|
36
|
-
onRequestClose: instanceRef.current.onCloseNewTab,
|
|
37
|
-
onDismiss: instanceRef.current.onNewTabDismissed,
|
|
38
|
-
children: visible && /*#__PURE__*/_jsx(SafeAreaView, {
|
|
39
|
-
style: styles.container,
|
|
40
|
-
children: /*#__PURE__*/_jsx(DeunaWebView, {
|
|
41
|
-
url: newTabController?.url ?? '',
|
|
42
|
-
onWebView: newTabController?.setWebView,
|
|
43
|
-
onMessage: newTabController?.onMessage,
|
|
44
|
-
onLoad: newTabController?.onLoad,
|
|
45
|
-
onError: newTabController?.onError,
|
|
46
|
-
onShouldStartLoadWithRequest: newTabController?.onShouldStartLoadWithRequest
|
|
47
|
-
})
|
|
48
|
-
})
|
|
49
|
-
});
|
|
50
|
-
};
|
|
51
|
-
const styles = StyleSheet.create({
|
|
52
|
-
container: {
|
|
53
|
-
flex: 1
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
//# sourceMappingURL=NewTabWebView.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useState","Modal","SafeAreaView","StyleSheet","DeunaWebView","jsx","_jsx","NewTabWebView","props","instance","instanceRef","visible","setVisible","current","ref","listener","isVisible","newTabWebViewController","addListener","removeListener","dispose","newTabController","presentationStyle","animationType","onRequestClose","onCloseNewTab","onDismiss","onNewTabDismissed","children","style","styles","container","url","onWebView","setWebView","onMessage","onLoad","onError","onShouldStartLoadWithRequest","create","flex"],"sourceRoot":"../../../src","sources":["components/NewTabWebView.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;AAM9C,OAAO,MAAMC,aAAa,GAAIC,KAAyB,IAAK;EAC1D,MAAM;IAAEC;EAAS,CAAC,GAAGD,KAAK;EAC1B,MAAME,WAAW,GAAGX,MAAM,CAAWU,QAAQ,CAAC;EAC9C,MAAM,CAACE,OAAO,EAAEC,UAAU,CAAC,GAAGZ,QAAQ,CAAC,KAAK,CAAC;EAE7CF,SAAS,CAAC,MAAM;IACdY,WAAW,CAACG,OAAO,GAAGJ,QAAQ;EAChC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;;EAEd;EACA;EACAX,SAAS,CAAC,MAAM;IACd,MAAMgB,GAAG,GAAGJ,WAAW,CAACG,OAAO;IAC/B,MAAME,QAAQ,GAAGA,CAAA,KAAM;MACrB,MAAMC,SAAS,GAAG,CAAC,CAACF,GAAG,CAACG,uBAAuB;MAC/CL,UAAU,CAACI,SAAS,CAAC;IACvB,CAAC;IAEDN,WAAW,CAACG,OAAO,CAACK,WAAW,CAACH,QAAQ,CAAC;IAEzC,OAAO,MAAM;MACXD,GAAG,CAACK,cAAc,CAACJ,QAAQ,CAAC;MAC5BD,GAAG,CAACG,uBAAuB,EAAEG,OAAO,CAAC,CAAC;IACxC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,gBAAgB,GAAGX,WAAW,CAACG,OAAO,CAACI,uBAAuB;EAEpE,oBACEX,IAAA,CAACL,KAAK;IACJqB,iBAAiB,EAAC,WAAW;IAC7BX,OAAO,EAAEA,OAAQ;IACjBY,aAAa,EAAC,OAAO;IACrBC,cAAc,EAAEd,WAAW,CAACG,OAAO,CAACY,aAAc;IAClDC,SAAS,EAAEhB,WAAW,CAACG,OAAO,CAACc,iBAAkB;IAAAC,QAAA,EAEhDjB,OAAO,iBACNL,IAAA,CAACJ,YAAY;MAAC2B,KAAK,EAAEC,MAAM,CAACC,SAAU;MAAAH,QAAA,eACpCtB,IAAA,CAACF,YAAY;QACX4B,GAAG,EAAEX,gBAAgB,EAAEW,GAAG,IAAI,EAAG;QACjCC,SAAS,EAAEZ,gBAAgB,EAAEa,UAAW;QACxCC,SAAS,EAAEd,gBAAgB,EAAEc,SAAU;QACvCC,MAAM,EAAEf,gBAAgB,EAAEe,MAAO;QACjCC,OAAO,EAAEhB,gBAAgB,EAAEgB,OAAQ;QACnCC,4BAA4B,EAC1BjB,gBAAgB,EAAEiB;MACnB,CACF;IAAC,CACU;EACf,CACI,CAAC;AAEZ,CAAC;AAED,MAAMR,MAAM,GAAG3B,UAAU,CAACoC,MAAM,CAAC;EAAER,SAAS,EAAE;IAAES,IAAI,EAAE;EAAE;AAAE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["BaseWebViewController","WebViewEventType","DeunaLogs","OpenInNewTabController","constructor","url","onLoad","setXprops","onError","event","console","warn","urlMustBeLoadedInTheSameWebView","isDownloadUrl","delegate","onFileDownload","onMessage","eventData","JSON","parse","nativeEvent","data","type","info","message","webView","injectJavaScript","consoleLog","newTabWindowClose"],"sourceRoot":"../../../src","sources":["controllers/OpenInNewTabController.ts"],"mappings":";;AACA,SACEA,qBAAqB,EACrBC,gBAAgB,QACX,4BAAyB;AAChC,SAASC,SAAS,QAAQ,iBAAc;AAExC,OAAO,MAAMC,sBAAsB,SAASH,qBAAqB,CAAC;EAChEI,WAAWA,CAAUC,GAAW,EAAE;IAChC,KAAK,CAAC,CAAC;IAAC,KADWA,GAAW,GAAXA,GAAW;IAE9B,IAAI,CAACA,GAAG,GAAGA,GAAG;EAChB;EAEAC,MAAM,GAAGA,CAAA,KAAM;IACb,IAAI,CAACC,SAAS,CAAC,CAAC;EAClB,CAAC;EAEDC,OAAO,GAAIC,KAAU,IAAK;IACxBC,OAAO,CAACC,IAAI,CAACF,KAAK,CAAC;EACrB,CAAC;EAEDG,+BAA+B,GAAIP,GAAW,IAAK;IACjD,IAAI,IAAI,CAACQ,aAAa,CAACR,GAAG,CAAC,EAAE;MAC3B,IAAI,CAACS,QAAQ,EAAEC,cAAc,GAAGV,GAAG,CAAC;MACpC,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb,CAAC;EAEDW,SAAS,GAAIP,KAA0B,IAAK;IAC1C,MAAMQ,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACV,KAAK,CAACW,WAAW,CAACC,IAAI,CAAC;IACpD,IAAIJ,SAAS,CAACK,IAAI,KAAK,aAAa,EAAE;MACpCpB,SAAS,CAACqB,IAAI,CAAC,aAAa,EAAEN,SAAS,CAACO,OAAO,CAAC;IAClD;EACF,CAAC;EAEDjB,SAAS,GAAGA,CAAA,KAAM;IAChB;IACA,IAAI,CAACkB,OAAO,EAAEC,gBAAgB,CAAC;AACnC;AACA,wEAAwEzB,gBAAgB,CAAC0B,UAAU;AACnG;AACA;AACA,wEAAwE1B,gBAAgB,CAAC2B,iBAAiB;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["PaymentWidgetController","ElementsWidgetController","linkBuilders","Mode","DeunaLogs","getWidgetController","config","props","widget","mode","callbacks","rest","baseParams","env","environment","publicApiKey","orderToken","userToken","language","sessionId","MODAL","domain","widgetMappers","elements","userInfo","styleFile","behavior","widgetExperience","types","payment","paymentMethods","nextAction","voucher","widgetConfig","controller","url","hidePayButton","info"],"sourceRoot":"../../../src","sources":["helpers/getController.ts"],"mappings":";;AACA,SAASA,uBAAuB,QAAQ,2CAAwC;AAChF,SAASC,wBAAwB,QAAQ,4CAAyC;AAQlF,SAASC,YAAY,QAAQ,2BAAkB;AAC/C,SAASC,IAAI,QAAQ,wBAAqB;AAC1C,SAASC,SAAS,QAAQ,iBAAc;AAwBxC,OAAO,MAAMC,mBAAmB,GAAGA,CACjCC,MAAwB,EACxBC,KAA4D,KACjC;EAC3B,MAAM;IAAEC,MAAM;IAAEC,IAAI;IAAEC,SAAS;IAAE,GAAGC;EAAK,CAAC,GAAGJ,KAAK;EAElD,MAAMK,UAAU,GAAG;IACjBC,GAAG,EAAEP,MAAM,CAACQ,WAAY;IACxBC,YAAY,EAAET,MAAM,CAACS,YAAY;IACjCC,UAAU,EAAEL,IAAI,CAACK,UAAU,IAAI,EAAE;IACjCC,SAAS,EAAEN,IAAI,CAACM,SAAS,IAAI,EAAE;IAC/BC,QAAQ,EAAEP,IAAI,CAACO,QAAQ,IAAI,IAAI;IAC/BC,SAAS,EAAER,IAAI,CAACQ,SAAS,IAAI,EAAE;IAC/BV,IAAI,EAAEA,IAAI,KAAKN,IAAI,CAACiB,KAAK,GAAG,OAAO,GAAG,QAAQ;IAC9C,IAAIT,IAAI,CAACU,MAAM,IAAI;MAAEA,MAAM,EAAEV,IAAI,CAACU;IAAO,CAAC;EAC5C,CAAC;EAED,MAAMC,aAAa,GAAG;IACpBC,QAAQ,EAAEA,CAAA,MAAO;MACf,GAAGX,UAAU;MACbY,QAAQ,EAAEb,IAAI,CAACa,QAAQ;MACvBC,SAAS,EAAEd,IAAI,CAACc,SAAS;MACzBC,QAAQ,EAAEf,IAAI,CAACe,QAAQ;MACvBC,gBAAgB,EAAEhB,IAAI,CAACgB,gBAAgB;MACvCC,KAAK,EAAGrB,KAAK,CAAmCqB;IAClD,CAAC,CAAC;IACFC,OAAO,EAAEA,CAAA,MAAO;MACd,GAAGjB,UAAU;MACbc,QAAQ,EAAEf,IAAI,CAACe,QAAQ;MACvBI,cAAc,EAAGvB,KAAK,CAAkCuB,cAAc;MACtEL,SAAS,EAAEd,IAAI,CAACc;IAClB,CAAC,CAAC;IACFM,UAAU,EAAEA,CAAA,KAAMnB,UAAU;IAC5BoB,OAAO,EAAEA,CAAA,KAAMpB;EACjB,CAAC;EAED,MAAMqB,YAAY,GAAG;IACnBjB,UAAU,EAAEL,IAAI,CAACK,UAAU;IAC3BU,QAAQ,EAAEf,IAAI,CAACe,QAAQ;IACvBT,SAAS,EAAEN,IAAI,CAACM;EAClB,CAAC;EAED,MAAMiB,UAAU,GACd1B,MAAM,KAAK,UAAU,GACjB,IAAIP,wBAAwB,CAACS,SAAS,EAAEuB,YAAY,CAAC,GACrD,IAAIjC,uBAAuB,CAACU,SAAS,EAAEuB,YAAY,CAAC;EAE1DC,UAAU,CAACC,GAAG,GAAGjC,YAAY,CAACM,MAAM,CAAC,CAACc,aAAa,CAACd,MAAM,CAAC,CAAC,CAAC,CAAC;EAC9D0B,UAAU,CAACE,aAAa,GAAGzB,IAAI,CAACyB,aAAa,IAAI,KAAK;EAEtDhC,SAAS,CAACiC,IAAI,CAAC,iBAAiB,EAAEH,UAAU,CAACC,GAAG,CAAC;EAEjD,OAAOD,UAAU;AACnB,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NewTabWebView.d.ts","sourceRoot":"","sources":["../../../../../src/components/NewTabWebView.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,4CAoDtD,CAAC"}
|
package/lib/typescript/deuna-sdk-react-native/src/controllers/OpenInNewTabController.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenInNewTabController.d.ts","sourceRoot":"","sources":["../../../../../src/controllers/OpenInNewTabController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,qBAAqB,EAEtB,MAAM,yBAAyB,CAAC;AAGjC,qBAAa,sBAAuB,SAAQ,qBAAqB;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAKhC,MAAM,aAEJ;IAEF,OAAO,GAAI,OAAO,GAAG,UAEnB;IAEF,+BAA+B,GAAI,KAAK,MAAM,aAM5C;IAEF,SAAS,GAAI,OAAO,mBAAmB,UAKrC;IAEF,SAAS,aAkBP;CACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getController.d.ts","sourceRoot":"","sources":["../../../../../src/helpers/getController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C,KAAK,4BAA4B,GAAG,uBAAuB,GAAG;IAC5D,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,+BAA+B,GAAG,0BAA0B,GAAG;IAClE,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,KAAK,4BAA4B,GAAG,uBAAuB,GAAG;IAC5D,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,6BAA6B,GAAG,wBAAwB,GAAG;IAC9D,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,eAAe,GAChB,4BAA4B,GAC5B,+BAA+B,GAC/B,4BAA4B,GAC5B,6BAA6B,CAAC;AAElC,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,gBAAgB,EACxB,OAAO,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3D,sBAkDF,CAAC"}
|
|
@@ -1,64 +0,0 @@
|
|
|
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 NewTabWebViewProps {
|
|
7
|
-
instance: DeunaSDK;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export const NewTabWebView = (props: NewTabWebViewProps) => {
|
|
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.newTabWebViewController;
|
|
25
|
-
setVisible(isVisible);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
instanceRef.current.addListener(listener);
|
|
29
|
-
|
|
30
|
-
return () => {
|
|
31
|
-
ref.removeListener(listener);
|
|
32
|
-
ref.newTabWebViewController?.dispose();
|
|
33
|
-
};
|
|
34
|
-
}, []);
|
|
35
|
-
|
|
36
|
-
const newTabController = instanceRef.current.newTabWebViewController;
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<Modal
|
|
40
|
-
presentationStyle="pageSheet"
|
|
41
|
-
visible={visible}
|
|
42
|
-
animationType="slide"
|
|
43
|
-
onRequestClose={instanceRef.current.onCloseNewTab}
|
|
44
|
-
onDismiss={instanceRef.current.onNewTabDismissed}
|
|
45
|
-
>
|
|
46
|
-
{visible && (
|
|
47
|
-
<SafeAreaView style={styles.container}>
|
|
48
|
-
<DeunaWebView
|
|
49
|
-
url={newTabController?.url ?? ''}
|
|
50
|
-
onWebView={newTabController?.setWebView}
|
|
51
|
-
onMessage={newTabController?.onMessage}
|
|
52
|
-
onLoad={newTabController?.onLoad}
|
|
53
|
-
onError={newTabController?.onError}
|
|
54
|
-
onShouldStartLoadWithRequest={
|
|
55
|
-
newTabController?.onShouldStartLoadWithRequest
|
|
56
|
-
}
|
|
57
|
-
/>
|
|
58
|
-
</SafeAreaView>
|
|
59
|
-
)}
|
|
60
|
-
</Modal>
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const styles = StyleSheet.create({ container: { flex: 1 } });
|