payaza-storefront-layouts 1.1.21 → 1.1.22

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.
@@ -1 +1 @@
1
- {"version":3,"file":"use-payaza-checkout.d.ts","sourceRoot":"","sources":["../../src/hooks/use-payaza-checkout.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE7G,UAAU,wBAAwB;IAChC,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,SAAc,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,wBAAwB;uBAiBzE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;;;EAsHhG"}
1
+ {"version":3,"file":"use-payaza-checkout.d.ts","sourceRoot":"","sources":["../../src/hooks/use-payaza-checkout.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,oBAAoB,EAAE,sBAAsB,EAA6B,MAAM,uBAAuB,CAAC;AAExI,UAAU,wBAAwB;IAChC,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,SAAc,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,wBAAwB;uBAiBzE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;;;EA6GhG"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { useState, useRef, useEffect } from 'react';
3
- import { initiatePayazaCheckout } from '../lib/payaza-checkout.js';
3
+ import { initiatePayazaCheckout, teardownPayazaCheckoutDom } from '../lib/payaza-checkout.js';
4
4
  export function usePayazaCheckout({ publicKey = '', onSuccess, onError, onClose }) {
5
5
  const [isLoading, setIsLoading] = useState(false);
6
6
  const [error, setError] = useState(null);
@@ -29,30 +29,12 @@ export function usePayazaCheckout({ publicKey = '', onSuccess, onError, onClose
29
29
  };
30
30
  const PAYAZA_TIMEOUT_MS = 45000;
31
31
  const removePayazaOverlay = () => {
32
- if (typeof document === 'undefined' || !document.body || !document.querySelector)
33
- return;
34
- const iframe = document.querySelector('iframe[src*="payaza.africa"]');
35
- let node = iframe;
36
- while (node?.parentElement && node.parentElement !== document.body) {
37
- node = node.parentElement;
38
- }
39
- if (node?.parentElement === document.body) {
40
- node.remove();
41
- }
42
- else if (iframe?.parentElement) {
43
- iframe.parentElement.remove();
44
- }
45
- document.querySelectorAll('style').forEach((styleEl) => {
46
- if (styleEl.textContent?.includes('payaza-loading-spinner')) {
47
- styleEl.remove();
48
- }
49
- });
50
- document.querySelectorAll('div').forEach((div) => {
51
- if (div.innerHTML.includes('payaza-loading-spinner')) {
52
- div.remove();
53
- }
54
- });
32
+ teardownPayazaCheckoutDom();
55
33
  };
34
+ const shouldTeardownOnError = (message) => message.includes('failed to load') ||
35
+ message.includes('popup may not have opened') ||
36
+ message.includes('Failed to open payment popup') ||
37
+ message.includes('Failed to initialize checkout');
56
38
  const setLoadingTimeout = () => {
57
39
  timeoutRef.current = setTimeout(() => {
58
40
  if (!callbackFired && mountedRef.current) {
@@ -87,12 +69,16 @@ export function usePayazaCheckout({ publicKey = '', onSuccess, onError, onClose
87
69
  clearLoadingWithTimeout();
88
70
  setIsLoading(false);
89
71
  setError(errorMessage);
72
+ if (shouldTeardownOnError(errorMessage)) {
73
+ removePayazaOverlay();
74
+ }
90
75
  onError?.(errorMessage);
91
76
  },
92
77
  onClose: () => {
93
78
  callbackFired = true;
94
79
  clearLoadingWithTimeout();
95
80
  setIsLoading(false);
81
+ removePayazaOverlay();
96
82
  onClose?.();
97
83
  },
98
84
  });
@@ -121,6 +107,7 @@ export function usePayazaCheckout({ publicKey = '', onSuccess, onError, onClose
121
107
  const errorMessage = err instanceof Error ? err.message : 'An unexpected error occurred';
122
108
  setIsLoading(false);
123
109
  setError(errorMessage);
110
+ removePayazaOverlay();
124
111
  onError?.(errorMessage);
125
112
  }
126
113
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CheckoutPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/shared/pages/CheckoutPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA8BhD,UAAU,iBAAiB;IACzB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAUD,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CAwsD9D"}
1
+ {"version":3,"file":"CheckoutPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/shared/pages/CheckoutPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA8BhD,UAAU,iBAAiB;IACzB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAUD,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CAssD9D"}
@@ -235,8 +235,6 @@ export function CheckoutPage({ storeConfig }) {
235
235
  setLoading(false);
236
236
  },
237
237
  onClose: () => {
238
- // onClose is only called when payment was not successful (user canceled)
239
- // This is now handled correctly by payaza-checkout.ts tracking payment success state
240
238
  addToast('Payment canceled', 'info');
241
239
  setLoading(false);
242
240
  },
@@ -88,6 +88,12 @@ export declare function getCurrencyFromItems(items: Array<{
88
88
  currency?: string;
89
89
  };
90
90
  }>, fallbackCurrency?: string): string;
91
+ /**
92
+ * Remove all Payaza SDK DOM nodes (loader overlay + invisible iframe).
93
+ * The SDK appends a fullscreen fixed iframe at max z-index; if checkout never
94
+ * loads, only the spinner is removed and the invisible iframe blocks all clicks.
95
+ */
96
+ export declare function teardownPayazaCheckoutDom(): void;
91
97
  /**
92
98
  * Initialize Payaza checkout using SDK
93
99
  * Uses setup() function from payaza-web-sdk npm package as per official documentation
@@ -1 +1 @@
1
- {"version":3,"file":"payaza-checkout.d.ts","sourceRoot":"","sources":["../../src/lib/payaza-checkout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,yIAAyI;IACzI,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC;AAyBD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAexF;AAED;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,QAAQ,GAAE,MAAc,GACvB,MAAM,CAYR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACjD,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAuCR;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,oBAAoB,KAC3B,OAAO,CAAC,sBAAsB,CA0YhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,KAAK,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9G,eAAe,MAAM,EACrB,WAAW,MAAM,EACjB,UAAU;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kKAAkK;IAClK,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,KACA,oBAuGF,CAAC"}
1
+ {"version":3,"file":"payaza-checkout.d.ts","sourceRoot":"","sources":["../../src/lib/payaza-checkout.ts"],"names":[],"mappings":"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"}
@@ -78,6 +78,31 @@ export function getCurrencyFromItems(items, fallbackCurrency) {
78
78
  const mostCommonCurrency = Object.entries(currencyCounts).reduce((a, b) => currencyCounts[a[0]] > currencyCounts[b[0]] ? a : b)[0];
79
79
  return mostCommonCurrency;
80
80
  }
81
+ /**
82
+ * Remove all Payaza SDK DOM nodes (loader overlay + invisible iframe).
83
+ * The SDK appends a fullscreen fixed iframe at max z-index; if checkout never
84
+ * loads, only the spinner is removed and the invisible iframe blocks all clicks.
85
+ */
86
+ export function teardownPayazaCheckoutDom() {
87
+ if (typeof document === 'undefined' || !document.body)
88
+ return;
89
+ document.querySelectorAll('style').forEach((styleEl) => {
90
+ if (styleEl.textContent?.includes('payaza-loading-spinner')) {
91
+ styleEl.remove();
92
+ }
93
+ });
94
+ document.querySelectorAll('div').forEach((div) => {
95
+ if (div.innerHTML.includes('payaza-loading-spinner')) {
96
+ div.remove();
97
+ }
98
+ });
99
+ document.querySelectorAll('iframe[src*="payaza.africa"], iframe[src*="shopaza.africa"]').forEach((iframe) => {
100
+ iframe.remove();
101
+ });
102
+ if (document.body.style.overflow === 'hidden') {
103
+ document.body.style.overflow = '';
104
+ }
105
+ }
81
106
  /**
82
107
  * Initialize Payaza checkout using SDK
83
108
  * Uses setup() function from payaza-web-sdk npm package as per official documentation
@@ -198,18 +223,7 @@ export const initiatePayazaCheckout = async (config) => {
198
223
  let loaderTimeoutId = null;
199
224
  let checkoutLoadedFired = false;
200
225
  const removePayazaLoaderDom = () => {
201
- if (typeof document === 'undefined' || !document.body)
202
- return;
203
- document.querySelectorAll('style').forEach((styleEl) => {
204
- if (styleEl.textContent?.includes('payaza-loading-spinner')) {
205
- styleEl.remove();
206
- }
207
- });
208
- document.querySelectorAll('div').forEach((div) => {
209
- if (div.innerHTML.includes('payaza-loading-spinner')) {
210
- div.remove();
211
- }
212
- });
226
+ teardownPayazaCheckoutDom();
213
227
  };
214
228
  const clearLoaderTimeout = () => {
215
229
  if (loaderTimeoutId) {
@@ -407,14 +421,20 @@ export const initiatePayazaCheckout = async (config) => {
407
421
  }, PAYAZA_CLOSE_CHECK_MS);
408
422
  closeCheckIntervalId = checkLoadedAndClose;
409
423
  loaderTimeoutId = setTimeout(() => {
410
- if (closeHandled)
424
+ if (closeHandled || checkoutLoadedFired)
411
425
  return;
412
- if (!hasPayazaLoaderInDom())
426
+ const loaderStillVisible = hasPayazaLoaderInDom();
427
+ const iframePresent = Boolean(typeof document !== 'undefined' &&
428
+ document.querySelector('iframe[src*="payaza.africa"], iframe[src*="shopaza.africa"]'));
429
+ if (!loaderStillVisible && !iframePresent)
413
430
  return;
414
431
  console.error('[Payaza] Loader timeout: checkout overlay did not clear');
415
- removePayazaLoaderDom();
432
+ teardownPayazaCheckoutDom();
433
+ closeHandled = true;
416
434
  clearCloseCheckInterval();
417
435
  clearLoaderTimeout();
436
+ checkoutLoadedFired = true;
437
+ config.onCheckoutLoaded?.();
418
438
  if (config.onError) {
419
439
  config.onError('Payment window failed to load. This may be caused by browser security settings or a blocked connection to Payaza. Please try again.');
420
440
  }
@@ -344,6 +344,9 @@
344
344
  .\!visible {
345
345
  visibility: visible !important;
346
346
  }
347
+ .invisible {
348
+ visibility: hidden;
349
+ }
347
350
  .visible {
348
351
  visibility: visible;
349
352
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payaza-storefront-layouts",
3
- "version": "1.1.21",
3
+ "version": "1.1.22",
4
4
  "type": "module",
5
5
  "description": "Shared layout components for Storefront applications",
6
6
  "main": "dist/index.js",