@deuna/react-native-sdk 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/module/DeunaSDK.js +18 -11
  2. package/lib/module/DeunaSDK.js.map +1 -1
  3. package/lib/module/components/DeunaWebView.js +2 -1
  4. package/lib/module/components/DeunaWebView.js.map +1 -1
  5. package/lib/module/components/DeunaWidget.js +4 -2
  6. package/lib/module/components/DeunaWidget.js.map +1 -1
  7. package/lib/module/components/NewTabWebView.js +2 -1
  8. package/lib/module/components/NewTabWebView.js.map +1 -1
  9. package/lib/module/controllers/BaseWebViewController.js +55 -13
  10. package/lib/module/controllers/BaseWebViewController.js.map +1 -1
  11. package/lib/module/controllers/OpenInNewTabController.js +21 -5
  12. package/lib/module/controllers/OpenInNewTabController.js.map +1 -1
  13. package/lib/module/types/helpers/buildElementsLink.js +71 -54
  14. package/lib/module/types/helpers/buildElementsLink.js.map +1 -1
  15. package/lib/module/types/helpers/buildNextActionLink.js +7 -2
  16. package/lib/module/types/helpers/buildNextActionLink.js.map +1 -1
  17. package/lib/module/types/helpers/buildPaymentLink.js +1 -2
  18. package/lib/module/types/helpers/buildPaymentLink.js.map +1 -1
  19. package/lib/module/types/helpers/buildVoucherLink.js +1 -2
  20. package/lib/module/types/helpers/buildVoucherLink.js.map +1 -1
  21. package/lib/typescript/deuna-sdk-react-native/src/DeunaSDK.d.ts +1 -0
  22. package/lib/typescript/deuna-sdk-react-native/src/DeunaSDK.d.ts.map +1 -1
  23. package/lib/typescript/deuna-sdk-react-native/src/components/DeunaWebView.d.ts +1 -0
  24. package/lib/typescript/deuna-sdk-react-native/src/components/DeunaWebView.d.ts.map +1 -1
  25. package/lib/typescript/deuna-sdk-react-native/src/components/DeunaWidget.d.ts.map +1 -1
  26. package/lib/typescript/deuna-sdk-react-native/src/components/NewTabWebView.d.ts.map +1 -1
  27. package/lib/typescript/deuna-sdk-react-native/src/controllers/BaseWebViewController.d.ts +24 -1
  28. package/lib/typescript/deuna-sdk-react-native/src/controllers/BaseWebViewController.d.ts.map +1 -1
  29. package/lib/typescript/deuna-sdk-react-native/src/controllers/OpenInNewTabController.d.ts +1 -0
  30. package/lib/typescript/deuna-sdk-react-native/src/controllers/OpenInNewTabController.d.ts.map +1 -1
  31. package/lib/typescript/deuna-sdk-react-native/src/types/base.d.ts +2 -2
  32. package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildElementsLink.d.ts +6 -1
  33. package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildElementsLink.d.ts.map +1 -1
  34. package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildNextActionLink.d.ts.map +1 -1
  35. package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildPaymentLink.d.ts.map +1 -1
  36. package/lib/typescript/deuna-sdk-react-native/src/types/helpers/buildVoucherLink.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/src/DeunaSDK.ts +17 -11
  39. package/src/components/DeunaWebView.tsx +2 -0
  40. package/src/components/DeunaWidget.tsx +7 -0
  41. package/src/components/NewTabWebView.tsx +3 -0
  42. package/src/controllers/BaseWebViewController.ts +70 -13
  43. package/src/controllers/OpenInNewTabController.ts +26 -8
  44. package/src/types/helpers/buildElementsLink.ts +102 -66
  45. package/src/types/helpers/buildNextActionLink.ts +8 -3
  46. package/src/types/helpers/buildPaymentLink.ts +1 -3
  47. package/src/types/helpers/buildVoucherLink.ts +1 -3
@@ -40,8 +40,7 @@ export const buildVoucherLink = config => {
40
40
 
41
41
  //encode to base64
42
42
  searchParams.append("xpropsB64", btoa(JSON.stringify(xpropsB64)));
43
- const url = new URL(baseUrl);
44
- url.pathname = `/voucher`;
43
+ const url = new URL("/voucher", baseUrl);
45
44
  url.search = searchParams.toString();
46
45
  return url.toString();
47
46
  };
@@ -1 +1 @@
1
- {"version":3,"names":["getIntegrationType","urls","production","sandbox","staging","develop","buildVoucherLink","config","env","orderToken","baseUrl","searchParams","URLSearchParams","mode","int","language","xpropsB64","id","cdl","sessionId","domain","append","btoa","JSON","stringify","url","URL","pathname","search","toString"],"sourceRoot":"../../../../src","sources":["types/helpers/buildVoucherLink.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAGA,SAASA,kBAAkB,QAAmB,gBAAa;AAE3D,MAAMC,IAAiC,GAAG;EACxCC,UAAU,EAAE,sBAAsB;EAClCC,OAAO,EAAE,8BAA8B;EACvCC,OAAO,EAAE,2BAA2B;EACpCC,OAAO,EAAE;AACX,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIC,MAAiB,IAAa;EAC7D,MAAM;IAAEC,GAAG;IAAEC;EAAW,CAAC,GAAGF,MAAM;EAElC,IAAIG,OAAO,GAAGT,IAAI,CAACC,UAAU;EAE7B,IAAIM,GAAG,EAAE;IACPE,OAAO,GAAGT,IAAI,CAACO,GAAG,CAAC;EACrB;EAEA,MAAMG,YAAY,GAAG,IAAIC,eAAe,CAAC;IACvCC,IAAI,EAAE,QAAQ;IACdC,GAAG,EAAEd,kBAAkB,CAACO,MAAM,CAACM,IAAI,CAAC;IACpCE,QAAQ,EAAER,MAAM,CAACQ,QAAQ;IACzBN;EACF,CAAC,CAAC;EAEF,MAAMO,SAAS,GAAG;IAChBC,EAAE,EAAEV,MAAM,CAACU,EAAE;IACbC,GAAG,EAAE;MACHC,SAAS,EAAEZ,MAAM,CAACY;IACpB;EACF,CAAC;EAED,IAAIZ,MAAM,CAACa,MAAM,EAAE;IACjBV,OAAO,GAAGH,MAAM,CAACa,MAAM;EACzB;;EAEA;EACAT,YAAY,CAACU,MAAM,CAAC,WAAW,EAAEC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACR,SAAS,CAAC,CAAC,CAAC;EAEjE,MAAMS,GAAG,GAAG,IAAIC,GAAG,CAAChB,OAAO,CAAC;EAE5Be,GAAG,CAACE,QAAQ,GAAG,UAAU;EACzBF,GAAG,CAACG,MAAM,GAAGjB,YAAY,CAACkB,QAAQ,CAAC,CAAC;EAEpC,OAAOJ,GAAG,CAACI,QAAQ,CAAC,CAAC;AACvB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getIntegrationType","urls","production","sandbox","staging","develop","buildVoucherLink","config","env","orderToken","baseUrl","searchParams","URLSearchParams","mode","int","language","xpropsB64","id","cdl","sessionId","domain","append","btoa","JSON","stringify","url","URL","search","toString"],"sourceRoot":"../../../../src","sources":["types/helpers/buildVoucherLink.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAGA,SAASA,kBAAkB,QAAmB,gBAAa;AAE3D,MAAMC,IAAiC,GAAG;EACxCC,UAAU,EAAE,sBAAsB;EAClCC,OAAO,EAAE,8BAA8B;EACvCC,OAAO,EAAE,2BAA2B;EACpCC,OAAO,EAAE;AACX,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIC,MAAiB,IAAa;EAC7D,MAAM;IAAEC,GAAG;IAAEC;EAAW,CAAC,GAAGF,MAAM;EAElC,IAAIG,OAAO,GAAGT,IAAI,CAACC,UAAU;EAE7B,IAAIM,GAAG,EAAE;IACPE,OAAO,GAAGT,IAAI,CAACO,GAAG,CAAC;EACrB;EAEA,MAAMG,YAAY,GAAG,IAAIC,eAAe,CAAC;IACvCC,IAAI,EAAE,QAAQ;IACdC,GAAG,EAAEd,kBAAkB,CAACO,MAAM,CAACM,IAAI,CAAC;IACpCE,QAAQ,EAAER,MAAM,CAACQ,QAAQ;IACzBN;EACF,CAAC,CAAC;EAEF,MAAMO,SAAS,GAAG;IAChBC,EAAE,EAAEV,MAAM,CAACU,EAAE;IACbC,GAAG,EAAE;MACHC,SAAS,EAAEZ,MAAM,CAACY;IACpB;EACF,CAAC;EAED,IAAIZ,MAAM,CAACa,MAAM,EAAE;IACjBV,OAAO,GAAGH,MAAM,CAACa,MAAM;EACzB;;EAEA;EACAT,YAAY,CAACU,MAAM,CAAC,WAAW,EAAEC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACR,SAAS,CAAC,CAAC,CAAC;EAEjE,MAAMS,GAAG,GAAG,IAAIC,GAAG,CAAC,UAAU,EAAEhB,OAAO,CAAC;EACxCe,GAAG,CAACE,MAAM,GAAGhB,YAAY,CAACiB,QAAQ,CAAC,CAAC;EAEpC,OAAOH,GAAG,CAACG,QAAQ,CAAC,CAAC;AACvB,CAAC","ignoreList":[]}
@@ -76,6 +76,7 @@ export declare class DeunaSDK extends BaseDeuna {
76
76
  addListener: (listener: () => void) => void;
77
77
  removeListener: (listener: () => void) => void;
78
78
  notifyListeners: () => void;
79
+ private notifyDownloadFile;
79
80
  onCloseNewTab: () => void;
80
81
  /**
81
82
  * Builds the delegate for the DEUNA widget to listen to the events
@@ -1 +1 @@
1
- {"version":3,"file":"DeunaSDK.d.ts","sourceRoot":"","sources":["../../../../src/DeunaSDK.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeunaSDK.d.ts","sourceRoot":"","sources":["../../../../src/DeunaSDK.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ interface DeunaWebViewProps {
5
5
  onMessage?: (event: any) => void;
6
6
  onLoad?: () => void;
7
7
  onError?: (error: any) => void;
8
+ onShouldStartLoadWithRequest?: (request: any) => boolean;
8
9
  }
9
10
  export declare const DeunaWebView: (props: DeunaWebViewProps) => import("react/jsx-runtime").JSX.Element;
10
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"DeunaWebView.d.ts","sourceRoot":"","sources":["../../../../../src/components/DeunaWebView.tsx"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAG3C,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,4CAuBpD,CAAC"}
1
+ {"version":3,"file":"DeunaWebView.d.ts","sourceRoot":"","sources":["../../../../../src/components/DeunaWebView.tsx"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAG3C,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,4BAA4B,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;CAC1D;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,4CAwBpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeunaWidget.d.ts","sourceRoot":"","sources":["../../../../../src/components/DeunaWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,UAAU,gBAAgB;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,4CA4ElD,CAAC"}
1
+ {"version":3,"file":"DeunaWidget.d.ts","sourceRoot":"","sources":["../../../../../src/components/DeunaWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,UAAU,gBAAgB;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,4CAmFlD,CAAC"}
@@ -1 +1 @@
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,4CAiDtD,CAAC"}
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"}
@@ -1,19 +1,25 @@
1
1
  import type WebView from 'react-native-webview';
2
2
  import { WebViewMessageEvent } from 'react-native-webview';
3
3
  import { ClosedAction, CustomStyles, Json, State, SubmitResult } from '../types';
4
+ import { ShouldStartLoadRequest } from 'react-native-webview/lib/WebViewTypes';
4
5
  export interface WebViewDelegate {
5
6
  onOpenInNewTab?: (url: string) => void;
6
7
  onCloseButtonPressed?: () => void;
7
8
  onCloseSubWebView?: () => void;
9
+ onFileDownload?: (url: string) => void;
10
+ onNewTabWindowClose?: () => void;
8
11
  }
9
12
  export declare enum WebViewEventType {
10
13
  consoleLog = "consoleLog",
11
14
  eventDispatch = "eventDispatch",
12
15
  jsExecutor = "jsExecutor",
13
16
  openInNewTab = "openInNewTab",
14
- redirect = "redirect"
17
+ redirect = "redirect",
18
+ newTabWindowClose = "newTabWindowClose"
15
19
  }
16
20
  export declare abstract class BaseWebViewController {
21
+ initialized: boolean;
22
+ redirectUrl: string | null;
17
23
  webView: WebView | null;
18
24
  url: string | null;
19
25
  delegate: WebViewDelegate | null;
@@ -27,6 +33,22 @@ export declare abstract class BaseWebViewController {
27
33
  * Called when the web view fails to load a URL
28
34
  */
29
35
  abstract onError: (event: any) => void;
36
+ /**
37
+ * Called when the web view should load a URL in the same web view
38
+ */
39
+ abstract urlMustBeLoadedInTheSameWebView: (url: string) => boolean;
40
+ /**
41
+ * Checks if the URL is a download URL
42
+ * @param url - The URL to check
43
+ * @returns True if the URL is a download URL, false otherwise
44
+ */
45
+ isDownloadUrl: (url: string) => boolean;
46
+ /**
47
+ * Determines if a URL should be loaded in the current WebView or opened in a new tab
48
+ * @param request The navigation request details
49
+ * @returns boolean indicating if the URL should be loaded in current WebView
50
+ */
51
+ onShouldStartLoadWithRequest: (request: ShouldStartLoadRequest) => boolean;
30
52
  /**
31
53
  * Release the web view resources
32
54
  */
@@ -40,6 +62,7 @@ export declare abstract class DeunaWebViewController extends BaseWebViewControll
40
62
  abstract onEventDispatch: (event: Record<string, any>) => void;
41
63
  setWebView: (webView: WebView) => void;
42
64
  onLoad: () => void;
65
+ urlMustBeLoadedInTheSameWebView: (url: string) => boolean;
43
66
  onMessage: (event: WebViewMessageEvent) => void;
44
67
  setXprops: () => void;
45
68
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BaseWebViewController.d.ts","sourceRoot":"","sources":["../../../../../src/controllers/BaseWebViewController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,YAAY,EACb,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;CACtB;AAED,8BAAsB,qBAAqB;IACzC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE1B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAQ;IAExC,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAEvC;;OAEG;IACH,OAAO;CAIR;AAED,8BAAsB,sBAAuB,SAAQ,qBAAqB;IACxE,aAAa,UAAS;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,YAAY,EAAE,YAAY,CAAkB;IAC5C,UAAU,aAAoB;IAE9B,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAE/D,UAAU,GAAI,SAAS,OAAO,UAG5B;IAEF,MAAM,aAEJ;IAEF,SAAS,GAAI,OAAO,mBAAmB,UAkCrC;IAEF,SAAS,aAuCP;IAEF;;;OAGG;IACH,cAAc,QAAa,OAAO,CAAC,KAAK,CAAC,CASvC;IAEF;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAe3C;IAEF;;;OAGG;IACH,cAAc,GAAU,OAAO,OAAO,CAAC,YAAY,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAIlE;IAEF;;OAEG;IACH,OAAO,QAAa,OAAO,CAAC,OAAO,CAAC,CAUlC;IAEF;;;OAGG;IACH,MAAM,QAAa,OAAO,CAAC,YAAY,CAAC,CAgBtC;IAEF,cAAc,QAAa,OAAO,CAAC,MAAM,CAAC,CA2BxC;CACH;AAED,cAAM,UAAU;IACd,SAAS,SAAK;IACd,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC/B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,CAAa;IAE9E;;;;OAIG;IAEH,OAAO,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAe7D;CACH"}
1
+ {"version":3,"file":"BaseWebViewController.d.ts","sourceRoot":"","sources":["../../../../../src/controllers/BaseWebViewController.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export declare class OpenInNewTabController extends BaseWebViewController {
6
6
  setWebView: (webView: WebView) => void;
7
7
  onLoad: () => void;
8
8
  onError: (event: any) => void;
9
+ urlMustBeLoadedInTheSameWebView: (url: string) => boolean;
9
10
  onMessage: (event: WebViewMessageEvent) => void;
10
11
  setXprops: () => void;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OpenInNewTabController.d.ts","sourceRoot":"","sources":["../../../../../src/controllers/OpenInNewTabController.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,qBAAa,sBAAuB,SAAQ,qBAAqB;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAKhC,UAAU,GAAI,SAAS,OAAO,UAE5B;IAEF,MAAM,aAEJ;IAEF,OAAO,GAAI,OAAO,GAAG,UAEnB;IAEF,SAAS,GAAI,OAAO,mBAAmB,UAKrC;IAEF,SAAS,aAQP;CACH"}
1
+ {"version":3,"file":"OpenInNewTabController.d.ts","sourceRoot":"","sources":["../../../../../src/controllers/OpenInNewTabController.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,qBAAqB,EAEtB,MAAM,yBAAyB,CAAC;AAGjC,qBAAa,sBAAuB,SAAQ,qBAAqB;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAKhC,UAAU,GAAI,SAAS,OAAO,UAE5B;IAEF,MAAM,aAEJ;IAEF,OAAO,GAAI,OAAO,GAAG,UAEnB;IAEF,+BAA+B,GAAI,KAAK,MAAM,aAM5C;IAEF,SAAS,GAAI,OAAO,mBAAmB,UAKrC;IAEF,SAAS,aAeP;CACH"}
@@ -73,7 +73,7 @@ export declare abstract class BaseDeuna {
73
73
  abstract close(): Promise<void>;
74
74
  setCustomStyles(customStyles: CustomStyles): Promise<void>;
75
75
  refetchOrder(): Promise<Order | null>;
76
- getWidgetState(): Promise<State | undefined>;
76
+ getWidgetState(): Promise<State>;
77
77
  isValid(): Promise<boolean>;
78
78
  getSelectedPaymentMethod(): Promise<{
79
79
  method_type: PaymentMethodTypes;
@@ -82,7 +82,7 @@ export declare abstract class BaseDeuna {
82
82
  express?: boolean;
83
83
  flowType?: PaymentMethodConfigurationFlow;
84
84
  };
85
- } | null>;
85
+ }>;
86
86
  abstract initPaymentWidget(params: InitPaymentWidgetParams): Promise<void>;
87
87
  abstract initElements(params: InitElementsWidgetParams): Promise<void>;
88
88
  abstract initNextAction(params: InitNextActionWidgetParams): Promise<void>;
@@ -1,3 +1,8 @@
1
- import { UrlConfig } from "./urlConfig";
1
+ import { UrlConfig } from './urlConfig';
2
+ /**
3
+ * Builds a complete Elements widget URL with all necessary parameters
4
+ * @param config - Configuration object for building the Elements URL
5
+ * @returns The complete Elements widget URL as a string
6
+ */
2
7
  export declare const buildElementsLink: (config: UrlConfig) => string;
3
8
  //# sourceMappingURL=buildElementsLink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildElementsLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildElementsLink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,SAAS,EAAE,MAAM,aAAa,CAAC;AAc5D,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,KAAG,MAsErD,CAAC"}
1
+ {"version":3,"file":"buildElementsLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildElementsLink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,SAAS,EAAE,MAAM,aAAa,CAAC;AA6F5D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,KAAG,MAsBrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildNextActionLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildNextActionLink.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,SAAS,EACV,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,KAAG,MA2BvD,CAAC"}
1
+ {"version":3,"file":"buildNextActionLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildNextActionLink.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,SAAS,EACV,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,KAAG,MAgCvD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildPaymentLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildPaymentLink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAGL,SAAS,EACV,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,MA0CpD,CAAC"}
1
+ {"version":3,"file":"buildPaymentLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildPaymentLink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAGL,SAAS,EACV,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,MAwCpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildVoucherLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildVoucherLink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAsB,SAAS,EAAE,MAAM,aAAa,CAAC;AAS5D,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,MAoCpD,CAAC"}
1
+ {"version":3,"file":"buildVoucherLink.d.ts","sourceRoot":"","sources":["../../../../../../src/types/helpers/buildVoucherLink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAsB,SAAS,EAAE,MAAM,aAAa,CAAC;AAS5D,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,MAkCpD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deuna/react-native-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "React Native SDK",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/module/index.js",
package/src/DeunaSDK.ts CHANGED
@@ -27,7 +27,7 @@ import { OpenInNewTabController } from './controllers/OpenInNewTabController';
27
27
  import { getWidgetController } from './helpers/getController';
28
28
  import { Completer } from './helpers/Completer';
29
29
  import { ElementsWidgetController } from './controllers/ElementsWidgetController';
30
- import { Mode, OnDownloadFile } from './interfaces/types';
30
+ import { DownloadType, Mode, OnDownloadFile } from './interfaces/types';
31
31
  import { Platform } from 'react-native';
32
32
 
33
33
  export class DeunaSDK extends BaseDeuna {
@@ -230,6 +230,15 @@ export class DeunaSDK extends BaseDeuna {
230
230
  this.listeners.forEach((listener) => listener());
231
231
  };
232
232
 
233
+ private notifyDownloadFile = (url: string) => {
234
+ if (this.safeWebViewController instanceof PaymentWidgetController) {
235
+ this.safeWebViewController.callbacks.onDownloadFile?.({
236
+ type: DownloadType.URL,
237
+ data: url,
238
+ });
239
+ }
240
+ };
241
+
233
242
  onCloseNewTab = () => {
234
243
  if (this.webViewController) {
235
244
  this.webViewController.redirectUrl = null;
@@ -252,18 +261,15 @@ export class DeunaSDK extends BaseDeuna {
252
261
  if (Platform.OS === 'ios') {
253
262
  this.newTabModalDismissPromise = new Completer<void>();
254
263
  }
264
+ this.newTabWebViewController.delegate = {
265
+ onFileDownload: this.notifyDownloadFile,
266
+ onNewTabWindowClose: this.onCloseNewTab,
267
+ };
255
268
  this.notifyListeners();
256
269
  },
257
- onCloseButtonPressed: () => {
258
- // Close the payment widget when the user
259
- // presses the close button
260
- this.close();
261
- },
262
- onCloseSubWebView: () => {
263
- // Close the new tab web view when the DEUNA widget
264
- // emits an error event or when the purchase is successful
265
- this.onCloseNewTab();
266
- },
270
+ onCloseButtonPressed: this.close, // Close the payment widget when the user presses the close button
271
+ onCloseSubWebView: this.onCloseNewTab, // Close the new tab web view when the DEUNA widget emits an error event or when the purchase is successful
272
+ onFileDownload: this.notifyDownloadFile, // Notify the user when a request to download a file is made
267
273
  };
268
274
  };
269
275
  }
@@ -8,6 +8,7 @@ interface DeunaWebViewProps {
8
8
  onMessage?: (event: any) => void;
9
9
  onLoad?: () => void;
10
10
  onError?: (error: any) => void;
11
+ onShouldStartLoadWithRequest?: (request: any) => boolean;
11
12
  }
12
13
 
13
14
  export const DeunaWebView = (props: DeunaWebViewProps) => {
@@ -30,6 +31,7 @@ export const DeunaWebView = (props: DeunaWebViewProps) => {
30
31
  onError={props.onError}
31
32
  setSupportMultipleWindows={false}
32
33
  javaScriptCanOpenWindowsAutomatically={false}
34
+ onShouldStartLoadWithRequest={props.onShouldStartLoadWithRequest}
33
35
  />
34
36
  </View>
35
37
  );
@@ -67,6 +67,10 @@ export const DeunaWidget = (props: DeunaWidgetProps) => {
67
67
  onMessage={instanceRef.current.webViewController?.onMessage}
68
68
  onLoad={instanceRef.current.webViewController?.onLoad}
69
69
  onError={instanceRef.current.webViewController?.onError}
70
+ onShouldStartLoadWithRequest={
71
+ instanceRef.current.webViewController
72
+ ?.onShouldStartLoadWithRequest
73
+ }
70
74
  />
71
75
  <NewTabWebView instance={instanceRef.current} />
72
76
  </View>
@@ -83,6 +87,9 @@ export const DeunaWidget = (props: DeunaWidgetProps) => {
83
87
  onMessage={instanceRef.current.webViewController?.onMessage}
84
88
  onLoad={instanceRef.current.webViewController?.onLoad}
85
89
  onError={instanceRef.current.webViewController?.onError}
90
+ onShouldStartLoadWithRequest={
91
+ instanceRef.current.webViewController?.onShouldStartLoadWithRequest
92
+ }
86
93
  />
87
94
  )}
88
95
  </>
@@ -51,6 +51,9 @@ export const NewTabWebView = (props: NewTabWebViewProps) => {
51
51
  onMessage={newTabController?.onMessage}
52
52
  onLoad={newTabController?.onLoad}
53
53
  onError={newTabController?.onError}
54
+ onShouldStartLoadWithRequest={
55
+ newTabController?.onShouldStartLoadWithRequest
56
+ }
54
57
  />
55
58
  </SafeAreaView>
56
59
  )}
@@ -9,11 +9,15 @@ import {
9
9
  SubmitResult,
10
10
  } from '../types';
11
11
  import { submitError } from '../interfaces';
12
+ import { Platform } from 'react-native';
13
+ import { ShouldStartLoadRequest } from 'react-native-webview/lib/WebViewTypes';
12
14
 
13
15
  export interface WebViewDelegate {
14
16
  onOpenInNewTab?: (url: string) => void;
15
17
  onCloseButtonPressed?: () => void;
16
18
  onCloseSubWebView?: () => void;
19
+ onFileDownload?: (url: string) => void;
20
+ onNewTabWindowClose?: () => void;
17
21
  }
18
22
 
19
23
  export enum WebViewEventType {
@@ -22,9 +26,15 @@ export enum WebViewEventType {
22
26
  jsExecutor = 'jsExecutor',
23
27
  openInNewTab = 'openInNewTab',
24
28
  redirect = 'redirect',
29
+ newTabWindowClose = 'newTabWindowClose',
25
30
  }
26
31
 
32
+ const DOWNLOAD_FILE_REGEX =
33
+ /\.(pdf|doc|docx|xls|xlsx|zip|rar|txt|mp3|mp4|jpg|jpeg|png|gif)$/i;
34
+
27
35
  export abstract class BaseWebViewController {
36
+ initialized = false;
37
+ redirectUrl: string | null = null;
28
38
  webView: WebView | null = null;
29
39
  url: string | null = null;
30
40
 
@@ -43,6 +53,52 @@ export abstract class BaseWebViewController {
43
53
  */
44
54
  abstract onError: (event: any) => void;
45
55
 
56
+ /**
57
+ * Called when the web view should load a URL in the same web view
58
+ */
59
+ abstract urlMustBeLoadedInTheSameWebView: (url: string) => boolean;
60
+
61
+ /**
62
+ * Checks if the URL is a download URL
63
+ * @param url - The URL to check
64
+ * @returns True if the URL is a download URL, false otherwise
65
+ */
66
+ isDownloadUrl = (url: string) => {
67
+ return DOWNLOAD_FILE_REGEX.test(url);
68
+ };
69
+
70
+ /**
71
+ * Determines if a URL should be loaded in the current WebView or opened in a new tab
72
+ * @param request The navigation request details
73
+ * @returns boolean indicating if the URL should be loaded in current WebView
74
+ */
75
+ onShouldStartLoadWithRequest = (request: ShouldStartLoadRequest) => {
76
+ // Prevent loading if it's the redirect URL
77
+ if (this.redirectUrl === request.url) {
78
+ return false;
79
+ }
80
+
81
+ const isNewNavigation = request.isTopFrame && request.url !== this.url;
82
+ const isClickNavigation = request.navigationType === 'click';
83
+ const shouldHandleInNewTab = !this.urlMustBeLoadedInTheSameWebView(
84
+ request.url
85
+ );
86
+
87
+ // For iOS, check both click navigation and new navigation
88
+ // For Android, only check new navigation
89
+ const shouldOpenInNewTab =
90
+ Platform.OS === 'ios'
91
+ ? (isClickNavigation || isNewNavigation) && shouldHandleInNewTab
92
+ : isNewNavigation && shouldHandleInNewTab;
93
+
94
+ if (shouldOpenInNewTab) {
95
+ this.delegate?.onOpenInNewTab?.(request.url);
96
+ return false;
97
+ }
98
+
99
+ return true;
100
+ };
101
+
46
102
  /**
47
103
  * Release the web view resources
48
104
  */
@@ -69,6 +125,16 @@ export abstract class DeunaWebViewController extends BaseWebViewController {
69
125
  this.setXprops();
70
126
  };
71
127
 
128
+ urlMustBeLoadedInTheSameWebView = (url: string) => {
129
+ if (this.isDownloadUrl(url)) {
130
+ this.delegate?.onFileDownload?.(url);
131
+ } else {
132
+ this.redirectUrl = url;
133
+ this.delegate?.onOpenInNewTab?.(url);
134
+ }
135
+ return false;
136
+ };
137
+
72
138
  onMessage = (event: WebViewMessageEvent) => {
73
139
  const eventData = JSON.parse(event.nativeEvent.data);
74
140
 
@@ -100,27 +166,18 @@ export abstract class DeunaWebViewController extends BaseWebViewController {
100
166
  this.redirectUrl = eventData.url;
101
167
  this.delegate?.onOpenInNewTab?.(eventData.url);
102
168
  },
169
+ [WebViewEventType.newTabWindowClose]: () => {
170
+ this.delegate?.onNewTabWindowClose?.();
171
+ },
103
172
  };
104
173
 
105
174
  mapper[eventData.type as WebViewEventType]?.();
106
175
  };
107
176
 
108
177
  setXprops = () => {
178
+ // this.detectDownloadsAndRedirects(true);
109
179
  this.webView?.injectJavaScript(
110
180
  `
111
- document.addEventListener('click', function(event) {
112
- if (event.target.tagName === 'A' && event.target.href) {
113
- window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.redirect}', url: event.target.href }));
114
- event.preventDefault(); // Prevent default navigation
115
- event.stopPropagation();
116
- }
117
- });
118
- console.log = function(message) {
119
- window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.consoleLog}', message }));
120
- };
121
- window.open = function(url, target, features) {
122
- window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.openInNewTab}', url }));
123
- };
124
181
  window.xprops = {
125
182
  hidePayButton: ${this.hidePayButton},
126
183
  onEventDispatch: function (event) {
@@ -1,5 +1,8 @@
1
1
  import WebView, { WebViewMessageEvent } from 'react-native-webview';
2
- import { BaseWebViewController } from './BaseWebViewController';
2
+ import {
3
+ BaseWebViewController,
4
+ WebViewEventType,
5
+ } from './BaseWebViewController';
3
6
  import { DeunaLogs } from '../DeunaLogs';
4
7
 
5
8
  export class OpenInNewTabController extends BaseWebViewController {
@@ -20,6 +23,14 @@ export class OpenInNewTabController extends BaseWebViewController {
20
23
  console.warn(event);
21
24
  };
22
25
 
26
+ urlMustBeLoadedInTheSameWebView = (url: string) => {
27
+ if (this.isDownloadUrl(url)) {
28
+ this.delegate?.onFileDownload?.(url);
29
+ return false;
30
+ }
31
+ return true;
32
+ };
33
+
23
34
  onMessage = (event: WebViewMessageEvent) => {
24
35
  const eventData = JSON.parse(event.nativeEvent.data);
25
36
  if (eventData.type === 'console_log') {
@@ -28,12 +39,19 @@ export class OpenInNewTabController extends BaseWebViewController {
28
39
  };
29
40
 
30
41
  setXprops = () => {
31
- this.webView?.injectJavaScript(
32
- `
33
- console.log = function(message) {
34
- window.ReactNativeWebView.postMessage(JSON.stringify({ type: 'console_log', message }));
35
- };
36
- `
37
- );
42
+ // Hide the print button on the Efecty page
43
+ this.webView?.injectJavaScript(`
44
+ window.close = function() {
45
+ window.ReactNativeWebView.postMessage(JSON.stringify({ type: '${WebViewEventType.newTabWindowClose}', data: '' }));
46
+ };
47
+ (function() {
48
+ setTimeout(function() {
49
+ var button = document.getElementById("cash_efecty_button_print");
50
+ if (button) {
51
+ button.style.display = "none";
52
+ }
53
+ }, 500); // time out 500 ms
54
+ })();
55
+ `);
38
56
  };
39
57
  }