@opexa/portal-components 0.0.836 → 0.0.838

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 (181) hide show
  1. package/dist/assets/providers/alize.png +0 -0
  2. package/dist/assets/providers/bigtime-gaming.png +0 -0
  3. package/dist/assets/providers/bng.png +0 -0
  4. package/dist/assets/providers/boongo.png +0 -0
  5. package/dist/assets/providers/btg.png +0 -0
  6. package/dist/assets/providers/cq9.png +0 -0
  7. package/dist/assets/providers/darwin.png +0 -0
  8. package/dist/assets/providers/digitain.png +0 -0
  9. package/dist/assets/providers/evolution.png +0 -0
  10. package/dist/assets/providers/fantasma-games.png +0 -0
  11. package/dist/assets/providers/fc.png +0 -0
  12. package/dist/assets/providers/fp.png +0 -0
  13. package/dist/assets/providers/habanero.png +0 -0
  14. package/dist/assets/providers/hacksaw.png +0 -0
  15. package/dist/assets/providers/jdb.png +0 -0
  16. package/dist/assets/providers/jili.png +0 -0
  17. package/dist/assets/providers/leap.png +0 -0
  18. package/dist/assets/providers/live-22-metaverse.png +0 -0
  19. package/dist/assets/providers/netent.png +0 -0
  20. package/dist/assets/providers/no-limit.png +0 -0
  21. package/dist/assets/providers/pg.png +0 -0
  22. package/dist/assets/providers/pgsoft.png +0 -0
  23. package/dist/assets/providers/pragmatic-play.png +0 -0
  24. package/dist/assets/providers/realtime-gaming.png +0 -0
  25. package/dist/assets/providers/redtiger.png +0 -0
  26. package/dist/assets/providers/rtg.png +0 -0
  27. package/dist/assets/providers/sagaming.png +0 -0
  28. package/dist/components/Banner/Banner.client.d.ts +12 -0
  29. package/dist/components/Banner/Banner.client.js +49 -0
  30. package/dist/components/DepositWithdrawal/AiOPaymentMethods.d.ts +11 -0
  31. package/dist/components/DepositWithdrawal/AiOPaymentMethods.js +55 -0
  32. package/dist/components/DepositWithdrawal/Deposit/AiOGCashDeposit/AiOGCashDeposit.js +1 -1
  33. package/dist/components/DepositWithdrawal/Deposit/AiOGrabPayDeposit/AiOGrabPayDeposit.js +1 -1
  34. package/dist/components/DepositWithdrawal/Deposit/AiOPalawanPayDeposit/AiOPalawanPayDeposit.js +1 -1
  35. package/dist/components/DepositWithdrawal/Deposit/AiOPayMayaDeposit/AiOPayMayaDeposit.js +1 -1
  36. package/dist/components/DepositWithdrawal/Deposit/GCashDeposit/GCashDeposit.js +1 -1
  37. package/dist/components/DepositWithdrawal/Deposit/GCashWebpayDeposit/GCashWebpayDeposit.js +1 -1
  38. package/dist/components/DepositWithdrawal/Deposit/LibanganDeposit/LibanganDeposit.js +1 -1
  39. package/dist/components/DepositWithdrawal/Deposit/MayaAppDeposit/MayaAppDeposit.js +1 -1
  40. package/dist/components/DepositWithdrawal/Deposit/MayaDeposit/MayaDeposit.js +1 -1
  41. package/dist/components/DepositWithdrawal/Deposit/MayaWebpayDeposit/MayaWebpayDeposit.js +1 -1
  42. package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositForm.js +1 -1
  43. package/dist/components/DepositWithdrawal/Deposit/PisoPayDeposit/PisoPayDeposit.js +1 -1
  44. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/Form.js +1 -1
  45. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositContext.d.ts +2 -2
  46. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/useQRPHDeposit.d.ts +1 -1
  47. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__legacy/QRPHDepositContext.d.ts +2 -2
  48. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__legacy/QRPHDepositForm.js +1 -1
  49. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__legacy/useQRPHDeposit.d.ts +1 -1
  50. package/dist/components/DepositWithdrawal/Deposit__legacy/AiOGCashDeposit/AiOGCashDeposit.js +1 -1
  51. package/dist/components/DepositWithdrawal/Deposit__legacy/AiOGrabPayDeposit/AiOGrabPayDeposit.js +1 -1
  52. package/dist/components/DepositWithdrawal/Deposit__legacy/AiOPalawanPayDeposit/AiOPalawanPayDeposit.js +1 -1
  53. package/dist/components/DepositWithdrawal/Deposit__legacy/AiOPayMayaDeposit/AiOPayMayaDeposit.js +1 -1
  54. package/dist/components/DepositWithdrawal/Deposit__legacy/GCashDeposit/GCashDeposit.js +1 -1
  55. package/dist/components/DepositWithdrawal/Deposit__legacy/GCashWebpayDeposit/GCashWebpayDeposit.js +1 -1
  56. package/dist/components/DepositWithdrawal/Deposit__legacy/LibanganDeposit/LibanganDeposit.js +1 -1
  57. package/dist/components/DepositWithdrawal/Deposit__legacy/MayaAppDeposit/MayaAppDeposit.js +1 -1
  58. package/dist/components/DepositWithdrawal/Deposit__legacy/MayaDeposit/MayaDeposit.js +1 -1
  59. package/dist/components/DepositWithdrawal/Deposit__legacy/MayaWebpayDeposit/MayaWebpayDeposit.js +1 -1
  60. package/dist/components/DepositWithdrawal/Deposit__legacy/OnlineBankDeposit/OnlineBankDepositForm.js +1 -1
  61. package/dist/components/DepositWithdrawal/Deposit__legacy/PisoPayDeposit/PisoPayDeposit.js +1 -1
  62. package/dist/components/DepositWithdrawal/Deposit__legacy/QRPHDeposit/QRPHDepositForm.js +1 -1
  63. package/dist/components/DepositWithdrawal/Withdrawal/GCashStandardCashInWithdrawal/GCashStandardCashInWithdrawal.js +1 -1
  64. package/dist/components/DepositWithdrawal/Withdrawal/GCashWithdrawal/GCashWithdrawal.js +1 -1
  65. package/dist/components/DepositWithdrawal/Withdrawal/InstapayWithdrawal/InstapayWithdrawal.js +1 -1
  66. package/dist/components/DepositWithdrawal/Withdrawal/MayaAppWithdrawal/MayaAppWithdrawal.js +1 -1
  67. package/dist/components/DepositWithdrawal/Withdrawal/MayaWithdrawal/MayaWithdrawal.js +1 -1
  68. package/dist/components/DepositWithdrawal/Withdrawal/PisoPayWithdrawal/PisoPayWithdrawal.js +1 -1
  69. package/dist/components/DepositWithdrawal/Withdrawal/VentajaWithdrawal/VentajaWithdrawal.js +1 -1
  70. package/dist/components/DigitainLauncher/Loading.d.ts +1 -0
  71. package/dist/components/DigitainLauncher/Loading.js +5 -0
  72. package/dist/components/Jackpots/JackpotsCarousel/JackpotsCarouselItem.module.css +184 -0
  73. package/dist/components/Jackpots/JackpotsList/JackpotsListItem.module.css +184 -0
  74. package/dist/components/KYC/BasicInformation.d.ts +1 -0
  75. package/dist/components/KYC/BasicInformation.js +101 -0
  76. package/dist/components/KYC/IdentityVerification.d.ts +1 -0
  77. package/dist/components/KYC/IdentityVerification.js +120 -0
  78. package/dist/components/KYC/Indicator.d.ts +1 -0
  79. package/dist/components/KYC/Indicator.js +8 -0
  80. package/dist/components/KYC/KYC.lazy.d.ts +6 -0
  81. package/dist/components/KYC/KYC.lazy.js +45 -0
  82. package/dist/components/KYC/KYCContext.d.ts +6 -0
  83. package/dist/components/KYC/KYCContext.js +2 -0
  84. package/dist/components/KYC/KYCDefault/BasicInformation.d.ts +1 -0
  85. package/dist/components/KYC/KYCDefault/BasicInformation.js +101 -0
  86. package/dist/components/KYC/KYCVerificationStatus.d.ts +1 -0
  87. package/dist/components/KYC/KYCVerificationStatus.js +10 -0
  88. package/dist/components/KYC/KYCVerificationStatus.lazy.d.ts +1 -0
  89. package/dist/components/KYC/KYCVerificationStatus.lazy.js +36 -0
  90. package/dist/components/KYC/PersonalInformation.d.ts +1 -0
  91. package/dist/components/KYC/PersonalInformation.js +122 -0
  92. package/dist/components/KYC/useKYC.d.ts +25 -0
  93. package/dist/components/KYC/useKYC.js +38 -0
  94. package/dist/components/KYCNotRequired/KYCNotRequired.d.ts +0 -0
  95. package/dist/components/KYCNotRequired/KYCNotRequired.js +1 -0
  96. package/dist/components/PortalProvider/AndroidOnlyComponents.d.ts +1 -0
  97. package/dist/components/PortalProvider/AndroidOnlyComponents.js +12 -0
  98. package/dist/components/PortalProvider/CXDTokenObserver.d.ts +1 -0
  99. package/dist/components/PortalProvider/CXDTokenObserver.js +30 -0
  100. package/dist/components/PortalProvider/LinkGoogleAccountObserver.d.ts +1 -0
  101. package/dist/components/PortalProvider/LinkGoogleAccountObserver.js +29 -0
  102. package/dist/components/Quests/MultiWageringQuest.d.ts +1 -0
  103. package/dist/components/Quests/MultiWageringQuest.js +111 -0
  104. package/dist/components/SessionWatcher/SessionWatcher.d.ts +1 -0
  105. package/dist/components/SessionWatcher/SessionWatcher.js +20 -0
  106. package/dist/components/SessionWatcher/index.d.ts +1 -0
  107. package/dist/components/SessionWatcher/index.js +1 -0
  108. package/dist/components/SignIn/utils.d.ts +8 -0
  109. package/dist/components/SignIn/utils.js +26 -0
  110. package/dist/constants/Branches.d.ts +2 -0
  111. package/dist/constants/Branches.js +42 -0
  112. package/dist/images/game-providers/ALPHACHINKO.png +0 -0
  113. package/dist/images/responsible-gaming-yellow.png +0 -0
  114. package/dist/services/graphqlRequest.js +31 -0
  115. package/dist/services/httpRequest.js +16 -0
  116. package/dist/third-parties/FacebookPixel/FacebookPixel.d.ts +4 -0
  117. package/dist/third-parties/FacebookPixel/FacebookPixel.js +4 -0
  118. package/dist/third-parties/FacebookPixel/api.d.ts +0 -0
  119. package/dist/third-parties/FacebookPixel/api.js +1 -0
  120. package/dist/third-parties/FacebookPixel/index.d.ts +1 -0
  121. package/dist/third-parties/FacebookPixel/index.js +1 -0
  122. package/dist/third-parties/GoogleRecaptcha/GoogleRecaptcha.d.ts +4 -0
  123. package/dist/third-parties/GoogleRecaptcha/GoogleRecaptcha.js +4 -0
  124. package/dist/third-parties/GoogleRecaptcha/api.d.ts +0 -0
  125. package/dist/third-parties/GoogleRecaptcha/api.js +1 -0
  126. package/dist/third-parties/GoogleRecaptcha/index.d.ts +1 -0
  127. package/dist/third-parties/GoogleRecaptcha/index.js +1 -0
  128. package/dist/third-parties/index.d.ts +2 -0
  129. package/dist/third-parties/index.js +2 -0
  130. package/dist/ui/AlertDialog/AlertDialog.d.ts +187 -187
  131. package/dist/ui/AlertDialog/alertDialog.recipe.d.ts +17 -17
  132. package/dist/ui/Avatar/Avatar.d.ts +9 -9
  133. package/dist/ui/Avatar/avatar.recipe.d.ts +3 -3
  134. package/dist/ui/Checkbox/Checkbox.d.ts +23 -23
  135. package/dist/ui/Checkbox/checkbox.recipe.d.ts +3 -3
  136. package/dist/ui/Clipboard/Clipboard.d.ts +18 -18
  137. package/dist/ui/Clipboard/clipboard.recipe.d.ts +3 -3
  138. package/dist/ui/Collapsible/Collapsible.d.ts +20 -20
  139. package/dist/ui/Collapsible/collapsible.recipe.d.ts +5 -5
  140. package/dist/ui/Combobox/Combobox.d.ts +42 -42
  141. package/dist/ui/Combobox/combobox.recipe.d.ts +3 -3
  142. package/dist/ui/DatePicker/DatePicker.d.ts +72 -72
  143. package/dist/ui/DatePicker/datePicker.recipe.d.ts +3 -3
  144. package/dist/ui/Dialog/Dialog.d.ts +33 -33
  145. package/dist/ui/Dialog/dialog.recipe.d.ts +3 -3
  146. package/dist/ui/Drawer/Drawer.d.ts +33 -33
  147. package/dist/ui/Drawer/drawer.recipe.d.ts +3 -3
  148. package/dist/ui/Menu/Menu.d.ts +144 -144
  149. package/dist/ui/Menu/menu.recipe.d.ts +8 -8
  150. package/dist/ui/NumberInput/NumberInput.d.ts +24 -24
  151. package/dist/ui/NumberInput/numberInput.recipe.d.ts +3 -3
  152. package/dist/ui/Popover/Popover.d.ts +154 -154
  153. package/dist/ui/Popover/popover.recipe.d.ts +14 -14
  154. package/dist/ui/QrCode/QrCode.d.ts +25 -25
  155. package/dist/ui/QrCode/qrCode.recipe.d.ts +5 -5
  156. package/dist/ui/Select/Select.d.ts +45 -45
  157. package/dist/ui/Select/select.recipe.d.ts +3 -3
  158. package/dist/ui/Table/Table.d.ts +21 -21
  159. package/dist/ui/Table/table.anatomy.d.ts +1 -1
  160. package/dist/ui/Table/table.recipe.d.ts +3 -3
  161. package/dist/ui/Tabs/Tabs.d.ts +15 -15
  162. package/dist/ui/Tabs/tabs.recipe.d.ts +3 -3
  163. package/dist/ui/Tooltip/Tooltip.d.ts +30 -30
  164. package/dist/ui/Tooltip/tooltip.recipe.d.ts +5 -5
  165. package/package.json +1 -1
  166. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Confirmed.d.ts +0 -1
  167. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Confirmed.js +0 -11
  168. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Failed.d.ts +0 -1
  169. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Failed.js +0 -11
  170. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Form.d.ts +0 -1
  171. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Form.js +0 -126
  172. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/GeneratingQrCode.d.ts +0 -1
  173. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/GeneratingQrCode.js +0 -10
  174. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDeposit.d.ts +0 -1
  175. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDeposit.js +0 -12
  176. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDepositContext.d.ts +0 -17
  177. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDepositContext.js +0 -2
  178. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QrCodeGenerated.d.ts +0 -1
  179. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QrCodeGenerated.js +0 -41
  180. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/useQRPHDeposit.d.ts +0 -13
  181. package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/useQRPHDeposit.js +0 -91
@@ -3,9 +3,9 @@ export declare const tooltipRecipe: import("tailwind-variants").TVReturnType<{
3
3
  [key: string]: import("tailwind-variants").ClassValue | {
4
4
  content?: import("tailwind-variants").ClassValue;
5
5
  trigger?: import("tailwind-variants").ClassValue;
6
- positioner?: import("tailwind-variants").ClassValue;
7
6
  arrow?: import("tailwind-variants").ClassValue;
8
7
  arrowTip?: import("tailwind-variants").ClassValue;
8
+ positioner?: import("tailwind-variants").ClassValue;
9
9
  };
10
10
  };
11
11
  } | {
@@ -13,19 +13,19 @@ export declare const tooltipRecipe: import("tailwind-variants").TVReturnType<{
13
13
  [x: string]: import("tailwind-variants").ClassValue | {
14
14
  content?: import("tailwind-variants").ClassValue;
15
15
  trigger?: import("tailwind-variants").ClassValue;
16
- positioner?: import("tailwind-variants").ClassValue;
17
16
  arrow?: import("tailwind-variants").ClassValue;
18
17
  arrowTip?: import("tailwind-variants").ClassValue;
18
+ positioner?: import("tailwind-variants").ClassValue;
19
19
  };
20
20
  };
21
- } | {}, Record<"content" | "trigger" | "positioner" | "arrow" | "arrowTip", string | string[]>, undefined, {
21
+ } | {}, Record<"content" | "trigger" | "arrow" | "arrowTip" | "positioner", string | string[]>, undefined, {
22
22
  [key: string]: {
23
23
  [key: string]: import("tailwind-variants").ClassValue | {
24
24
  content?: import("tailwind-variants").ClassValue;
25
25
  trigger?: import("tailwind-variants").ClassValue;
26
- positioner?: import("tailwind-variants").ClassValue;
27
26
  arrow?: import("tailwind-variants").ClassValue;
28
27
  arrowTip?: import("tailwind-variants").ClassValue;
28
+ positioner?: import("tailwind-variants").ClassValue;
29
29
  };
30
30
  };
31
- } | {}, Record<"content" | "trigger" | "positioner" | "arrow" | "arrowTip", string | string[]>, import("tailwind-variants").TVReturnType<unknown, Record<"content" | "trigger" | "positioner" | "arrow" | "arrowTip", string | string[]>, undefined, unknown, unknown, undefined>>;
31
+ } | {}, Record<"content" | "trigger" | "arrow" | "arrowTip" | "positioner", string | string[]>, import("tailwind-variants").TVReturnType<unknown, Record<"content" | "trigger" | "arrow" | "arrowTip" | "positioner", string | string[]>, undefined, unknown, unknown, undefined>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opexa/portal-components",
3
- "version": "0.0.836",
3
+ "version": "0.0.838",
4
4
  "exports": {
5
5
  "./ui/*": {
6
6
  "types": "./dist/ui/*/index.d.ts",
@@ -1 +0,0 @@
1
- export declare function Confirmed(): import("react/jsx-runtime").JSX.Element;
@@ -1,11 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { CheckCircleIcon } from '../../../../icons/CheckCircleIcon.js';
3
- import { XIcon } from '../../../../icons/XIcon.js';
4
- import { AlertDialog } from '../../../../ui/AlertDialog/index.js';
5
- import { Button } from '../../../../ui/Button/index.js';
6
- import { Portal } from '../../../../ui/Portal/index.js';
7
- import { useQRPHDepositContext } from './QRPHDepositContext.js';
8
- export function Confirmed() {
9
- const context = useQRPHDepositContext();
10
- return (_jsx(AlertDialog.Root, { open: context.status === 'confirmed', lazyMount: true, closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(AlertDialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+3)]" }), _jsx(AlertDialog.Positioner, { className: "!z-[calc(var(--z-dialog)+4)]", children: _jsxs(AlertDialog.Content, { children: [_jsx("button", { type: "button", className: "absolute top-4 right-4 icon:size-6 p-md text-text-quinary disabled:cursor-not-allowed disabled:opacity-50", onClick: context.reset, children: _jsx(XIcon, {}) }), _jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-success-secondary", children: _jsx(CheckCircleIcon, { className: "size-6 text-text-featured-icon-light-success" }) }), _jsx(AlertDialog.Title, { className: "mt-xl", children: "Your deposit was successful!" }), _jsx(AlertDialog.Description, { className: "mt-xl px-3", children: "The funds have been added to your account." }), _jsx(Button, { className: "mt-4xl w-full", onClick: context.reset, children: "Ok" })] }) })] }) }));
11
- }
@@ -1 +0,0 @@
1
- export declare function Failed(): import("react/jsx-runtime").JSX.Element;
@@ -1,11 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { AlertCircleIcon } from '../../../../icons/AlertCircleIcon.js';
3
- import { XIcon } from '../../../../icons/XIcon.js';
4
- import { AlertDialog } from '../../../../ui/AlertDialog/index.js';
5
- import { Button } from '../../../../ui/Button/index.js';
6
- import { Portal } from '../../../../ui/Portal/index.js';
7
- import { useQRPHDepositContext } from './QRPHDepositContext.js';
8
- export function Failed() {
9
- const context = useQRPHDepositContext();
10
- return (_jsx(AlertDialog.Root, { open: context.status === 'failed', lazyMount: true, closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(AlertDialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+3)]" }), _jsx(AlertDialog.Positioner, { className: "!z-[calc(var(--z-dialog)+4)]", children: _jsxs(AlertDialog.Content, { children: [_jsx("button", { type: "button", className: "absolute top-4 right-4 icon:size-6 p-md text-text-quinary disabled:cursor-not-allowed disabled:opacity-50", onClick: context.reset, children: _jsx(XIcon, {}) }), _jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-error-secondary", children: _jsx(AlertCircleIcon, { className: "size-6 text-text-featured-icon-light-error" }) }), _jsx(AlertDialog.Title, { className: "mt-xl", children: "Your deposit failed or was cancelled." }), _jsx(AlertDialog.Description, { className: "mt-xl px-3", children: "Your deposit was not completed or has been cancelled. You can try again by generating a\u00A0new\u00A0QR code." }), _jsx(Button, { className: "mt-4xl w-full", variant: "outline", onClick: context.regenerateQRCode, children: "Generate New QR Code" })] }) })] }) }));
11
- }
@@ -1 +0,0 @@
1
- export declare function Form(): import("react/jsx-runtime").JSX.Element;
@@ -1,126 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { zodResolver } from '@hookform/resolvers/zod';
3
- import Link from 'next/link';
4
- import { useEffect } from 'react';
5
- import { Controller, useForm } from 'react-hook-form';
6
- import { useBoolean } from 'usehooks-ts';
7
- import { z } from 'zod';
8
- import { useShallow } from 'zustand/shallow';
9
- import { useAvailablePromosQuery } from '../../../../client/hooks/useAvailablePromosQuery.js';
10
- import { useDepositsCountQuery } from '../../../../client/hooks/useDepositsCountQuery.js';
11
- import { useGlobalStore } from '../../../../client/hooks/useGlobalStore.js';
12
- import { usePaymentSettingsQuery } from '../../../../client/hooks/usePaymentSettingsQuery.js';
13
- import { QrCode02Icon } from '../../../../icons/QrCode02Icon.js';
14
- import { XIcon } from '../../../../icons/XIcon.js';
15
- import { AlertDialog } from '../../../../ui/AlertDialog/index.js';
16
- import { Button } from '../../../../ui/Button/index.js';
17
- import { Field } from '../../../../ui/Field/index.js';
18
- import { Portal } from '../../../../ui/Portal/index.js';
19
- import { parseDecimal } from '../../../../utils/parseDecimal.js';
20
- import { AmountChoices } from '../../AmountChoices.js';
21
- import { useDepositWithdrawalPropsContext } from '../../DepositWithdrawalContext.js';
22
- import { AvailablePromos } from '../AvailablePromos.js';
23
- import { useQRPHDepositContext } from './QRPHDepositContext.js';
24
- export function Form() {
25
- const depositWithdrawalProps = useDepositWithdrawalPropsContext();
26
- const globalStore = useGlobalStore(useShallow((ctx) => ({
27
- depositWithdrawal: ctx.depositWithdrawal,
28
- })));
29
- const context = useQRPHDepositContext();
30
- const depositsCountQuery = useDepositsCountQuery();
31
- const depositsCount = depositsCountQuery.data ?? 0;
32
- const paymentSettingsQuery = usePaymentSettingsQuery();
33
- const paymentSettings = paymentSettingsQuery.data;
34
- const gatewaySettings = paymentSettings?.qrphDepositGatewaySettings;
35
- const maximumAmount = parseDecimal(gatewaySettings?.maximumAmount, 0);
36
- const minimumAmount = depositsCount <= 0
37
- ? parseDecimal(paymentSettingsQuery.data?.minimumFirstDepositAmount, 0)
38
- : parseDecimal(gatewaySettings?.minimumAmount, 0);
39
- const promosQuery = useAvailablePromosQuery();
40
- const promos = promosQuery.data ?? [];
41
- const definition = z
42
- .object({
43
- amount: z.string().superRefine((val, ctx) => {
44
- const n = parseDecimal(val, 0);
45
- if (val.includes('.')) {
46
- ctx.addIssue({
47
- code: z.ZodIssueCode.custom,
48
- message: 'Amount must be a whole number',
49
- });
50
- return;
51
- }
52
- if (n < minimumAmount) {
53
- ctx.addIssue({
54
- type: 'number',
55
- code: z.ZodIssueCode.too_small,
56
- inclusive: true,
57
- minimum: minimumAmount,
58
- message: `Minimum amount is ${minimumAmount.toLocaleString()}`,
59
- });
60
- }
61
- if (n > maximumAmount) {
62
- ctx.addIssue({
63
- type: 'number',
64
- code: z.ZodIssueCode.too_big,
65
- inclusive: true,
66
- maximum: maximumAmount,
67
- message: `Maximum amount is ${maximumAmount.toLocaleString()}`,
68
- });
69
- }
70
- }),
71
- promo: z.string().optional().nullable(),
72
- })
73
- .superRefine((value, ctx) => {
74
- const promo = promos.find((o) => o.id === value.promo);
75
- const promoMinAmount = parseDecimal(promo?.minimumDepositAmount, 0);
76
- const promoMaxAmount = parseDecimal(promo?.maximumDepositAmount, 0);
77
- const amount = parseDecimal(value.amount, 0);
78
- if (promo && amount < promoMinAmount) {
79
- ctx.addIssue({
80
- path: ['amount'],
81
- code: z.ZodIssueCode.custom,
82
- message: `Minimum amount for this promo is ${promoMinAmount.toLocaleString()}`,
83
- });
84
- }
85
- if (promo && amount > promoMaxAmount) {
86
- ctx.addIssue({
87
- path: ['amount'],
88
- code: z.ZodIssueCode.custom,
89
- message: `Maximum amount for this promo is ${promoMaxAmount}`,
90
- });
91
- }
92
- });
93
- const form = useForm({
94
- mode: 'all',
95
- resolver: zodResolver(definition),
96
- defaultValues: {
97
- amount: '0',
98
- promo: globalStore.depositWithdrawal.promo ?? null,
99
- },
100
- });
101
- useEffect(() => {
102
- if (minimumAmount) {
103
- form.reset({
104
- amount: minimumAmount.toString(),
105
- promo: form.getValues('promo') ?? null,
106
- });
107
- }
108
- }, [form, minimumAmount]);
109
- const confirm = useBoolean();
110
- return (_jsxs("form", { onSubmit: (e) => {
111
- e.preventDefault();
112
- confirm.setTrue();
113
- }, noValidate: true, children: [_jsxs(Field.Root, { invalid: !!form.formState.errors.amount, className: "mt-3xl", children: [_jsx(Field.Label, { children: "Enter the amount you want to deposit" }), _jsx(Field.Input, { type: "number", ...form.register('amount') }), _jsx(Field.ErrorText, { children: form.formState.errors.amount?.message })] }), _jsx(AmountChoices, { value: parseDecimal(form.watch('amount'), 0), onChange: (value) => {
114
- form.setValue('amount', value.toString(), {
115
- shouldTouch: true,
116
- shouldDirty: true,
117
- shouldValidate: true,
118
- });
119
- }, min: minimumAmount, max: maximumAmount, className: "mt-lg" }), _jsx(Controller, { control: form.control, name: "promo", render: (o) => (_jsx(AvailablePromos, { value: o.field.value, onChange: (value) => {
120
- o.field.onChange(value);
121
- globalStore.depositWithdrawal.setPromo(null);
122
- }, className: "mt-3xl" })) }), _jsx(Button, { type: "submit", className: "mt-3xl", children: "Deposit" }), depositWithdrawalProps.hasPrivacyPolicyAndTermsOfUse && (_jsxs("p", { className: "mt-lg text-text-tertiary-600 text-xs", children: ["By depositing, you agree to our", ' ', _jsx(Link, { href: depositWithdrawalProps.termsOfUseUrl ?? '/terms-of-use', onClick: () => globalStore.depositWithdrawal.setOpen(false), className: "text-text-warning-primary-600 underline underline-offset-2", children: "Terms of Use" }), ' ', "and", ' ', _jsx(Link, { href: depositWithdrawalProps.privacyPolicyUrl ?? '/privacy-policy', onClick: () => globalStore.depositWithdrawal.setOpen(false), className: "text-text-warning-primary-600 underline underline-offset-2", children: "Privacy Policy" }), "."] })), _jsx(AlertDialog.Root, { open: confirm.value, lazyMount: true, closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(AlertDialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+2)]" }), _jsx(AlertDialog.Positioner, { className: "!z-[calc(var(--z-dialog)+3)]", children: _jsxs(AlertDialog.Content, { children: [_jsx(AlertDialog.CloseTrigger, { children: _jsx(XIcon, {}) }), _jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary", children: _jsx(QrCode02Icon, { className: "size-6 text-text-featured-icon-light-brand" }) }), _jsx(AlertDialog.Title, { className: "mt-xl", children: "Generate Single Use QR Code" }), _jsx(AlertDialog.Description, { className: "mt-xs px-2", children: "To proceed with your QRPH deposit, please generate a QR code first." }), _jsx(Button, { className: "mt-4xl", variant: "outline", colorScheme: "gray", onClick: form.handleSubmit(async (data) => {
123
- confirm.setFalse();
124
- await context.generateQRCode(data);
125
- }), children: "Generate QR code" })] }) })] }) })] }));
126
- }
@@ -1 +0,0 @@
1
- export declare function GeneratingQrCode(): import("react/jsx-runtime").JSX.Element;
@@ -1,10 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Spinner02Icon } from '../../../../icons/Spinner02Icon.js';
3
- import { XIcon } from '../../../../icons/XIcon.js';
4
- import { AlertDialog } from '../../../../ui/AlertDialog/index.js';
5
- import { Portal } from '../../../../ui/Portal/index.js';
6
- import { useQRPHDepositContext } from './QRPHDepositContext.js';
7
- export function GeneratingQrCode() {
8
- const context = useQRPHDepositContext();
9
- return (_jsx(AlertDialog.Root, { open: context.status === 'generating-qr-code', lazyMount: true, closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(AlertDialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+2)]" }), _jsx(AlertDialog.Positioner, { className: "!z-[calc(var(--z-dialog)+3)]", children: _jsxs(AlertDialog.Content, { children: [_jsx(AlertDialog.CloseTrigger, { disabled: true, children: _jsx(XIcon, {}) }), _jsx(Spinner02Icon, { className: "mx-auto size-12 text-text-featured-icon-light-brand" }), _jsx(AlertDialog.Title, { className: "mt-xl", children: "Generating Single Use QR Code" }), _jsxs(AlertDialog.Description, { className: "mt-xs px-3", children: [_jsx("span", { className: "block", children: "Please hold tight as we verify the account details and amount. Once verified, a QRPH code will be displayed for you to scan and complete the transaction." }), _jsxs("span", { className: "mt-3 block", children: ["Please wait ", _jsx("span", { className: "font-bold", children: "60" }), " seconds..."] })] })] }) })] }) }));
10
- }
@@ -1 +0,0 @@
1
- export declare function QRPHDeposit(): import("react/jsx-runtime").JSX.Element;
@@ -1,12 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Confirmed } from './Confirmed.js';
3
- import { Failed } from './Failed.js';
4
- import { Form } from './Form.js';
5
- import { GeneratingQrCode } from './GeneratingQrCode.js';
6
- import { QRPHDepositContext } from './QRPHDepositContext.js';
7
- import { QrCodeGenerated } from './QrCodeGenerated.js';
8
- import { useQRPHDeposit } from './useQRPHDeposit.js';
9
- export function QRPHDeposit() {
10
- const context = useQRPHDeposit();
11
- return (_jsxs(QRPHDepositContext, { value: context, children: [_jsx(Form, {}), _jsx(GeneratingQrCode, {}), _jsx(QrCodeGenerated, {}), _jsx(Failed, {}), _jsx(Confirmed, {})] }));
12
- }
@@ -1,17 +0,0 @@
1
- export declare const QRPHDepositContext: (props: {
2
- value: {
3
- status: "idle" | "confirmed" | "failed" | "generating-qr-code" | "qr-code-generated";
4
- deposit: import("../../../../types").Deposit | null;
5
- generateQRCode: (input: import("./useQRPHDeposit").GenerateQRCodeInput) => Promise<void>;
6
- regenerateQRCode: () => Promise<void>;
7
- reset: () => void;
8
- };
9
- } & {
10
- children?: import("react").ReactNode | undefined;
11
- }) => React.ReactNode, useQRPHDepositContext: () => {
12
- status: "idle" | "confirmed" | "failed" | "generating-qr-code" | "qr-code-generated";
13
- deposit: import("../../../../types").Deposit | null;
14
- generateQRCode: (input: import("./useQRPHDeposit").GenerateQRCodeInput) => Promise<void>;
15
- regenerateQRCode: () => Promise<void>;
16
- reset: () => void;
17
- };
@@ -1,2 +0,0 @@
1
- import { createContext } from '../../../../client/utils/createContext.js';
2
- export const [QRPHDepositContext, useQRPHDepositContext] = createContext();
@@ -1 +0,0 @@
1
- export declare function QrCodeGenerated(): import("react/jsx-runtime").JSX.Element;
@@ -1,41 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Image from 'next/image';
3
- import { useBoolean } from 'usehooks-ts';
4
- import { AlertCircleIcon } from '../../../../icons/AlertCircleIcon.js';
5
- import { ArrowCircleDownIcon } from '../../../../icons/ArrowCircleDownIcon.js';
6
- import { QrCode02Icon } from '../../../../icons/QrCode02Icon.js';
7
- import { XIcon } from '../../../../icons/XIcon.js';
8
- import qrphIcon from '../../../../images/qrph-icon.png';
9
- import { AlertDialog } from '../../../../ui/AlertDialog/index.js';
10
- import { Button } from '../../../../ui/Button/index.js';
11
- import { Portal } from '../../../../ui/Portal/index.js';
12
- import { QrCode } from '../../../../ui/QrCode/index.js';
13
- import { useQRPHDepositContext } from './QRPHDepositContext.js';
14
- export function QrCodeGenerated() {
15
- const context = useQRPHDepositContext();
16
- const confirm = useBoolean(false);
17
- return (_jsx(AlertDialog.Root, { open: context.status === 'qr-code-generated', lazyMount: true, closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(AlertDialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+2)]" }), _jsx(AlertDialog.Positioner, { className: "!z-[calc(var(--z-dialog)+3)]", children: _jsxs(AlertDialog.Content, { children: [_jsx("button", { type: "button", className: "absolute top-4 right-4 icon:size-6 p-md text-text-quinary disabled:cursor-not-allowed disabled:opacity-50", onClick: () => {
18
- if (!confirm.value) {
19
- confirm.setTrue();
20
- return;
21
- }
22
- confirm.setFalse();
23
- }, children: _jsx(XIcon, {}) }), !confirm.value ? (_jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary", children: _jsx(QrCode02Icon, { className: "size-6 text-text-featured-icon-light-brand" }) })) : (_jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-error-secondary", children: _jsx(AlertCircleIcon, { className: "size-6 text-text-featured-icon-light-error" }) })), _jsx(AlertDialog.Title, { className: "mt-xl", dangerouslySetInnerHTML: {
24
- __html: confirm.value
25
- ? 'Are you sure you want to close this&nbsp;window?'
26
- : 'Single Use QR Code',
27
- } }), _jsx(AlertDialog.Description, { className: "mt-xs px-3", children: confirm.value
28
- ? 'Closing this window will cancel your current deposit. Do you want to continue?'
29
- : 'Scan the QR code below with your banking app, or upload it to complete your deposit.' }), !confirm.value && (_jsx("div", { className: "mx-auto mt-xl w-[14.125rem] rounded-xl bg-bg-primary-alt p-6", children: _jsxs(QrCode.Root, { value: context.deposit?.qrCode ?? '', encoding: {
30
- ecc: 'H',
31
- boostEcc: true,
32
- }, children: [_jsxs("div", { className: "relative", children: [_jsx(QrCode.Frame, { className: "mx-auto size-[10rem] rounded-[0.25rem] border border-border-primary bg-white", children: _jsx(QrCode.Pattern, {}) }), _jsx(QrCode.Overlay, { className: "bg-white p-0.5", children: _jsx(Image, { src: qrphIcon, alt: "", className: "size-8", width: 40, height: 40 }) })] }), _jsxs(QrCode.DownloadTrigger, { type: "button", fileName: `QRPH-${Date.now()}.jpg`, mimeType: "image/jpeg", className: "mx-auto mt-5 flex w-fit items-center gap-1 font-semibold text-button-tertiary-fg", children: [_jsx(ArrowCircleDownIcon, { className: "size-5" }), "Download QR Code"] })] }) })), confirm.value && (_jsxs("div", { className: "mt-4xl flex gap-lg", children: [_jsx(Button, { variant: "outline", onClick: confirm.setFalse, children: "Go back" }), _jsx(Button, { onClick: () => {
33
- context.reset();
34
- setTimeout(() => {
35
- confirm.setFalse();
36
- }, 2);
37
- }, children: "Continue" })] })), !confirm.value && _jsx(Instruction, {})] }) })] }) }));
38
- }
39
- function Instruction() {
40
- return (_jsxs(AlertDialog.Root, { lazyMount: true, closeOnEscape: false, closeOnInteractOutside: false, children: [_jsxs("p", { className: "mt-lg text-center text-text-tertiary-600 text-xs", children: ["Need help using the QR Code?", ' ', _jsx(AlertDialog.Trigger, { className: "text-text-brand", children: "See instructions" })] }), _jsxs(Portal, { children: [_jsx(AlertDialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+3)]" }), _jsx(AlertDialog.Positioner, { className: "!z-[calc(var(--z-dialog)+4)]", children: _jsxs(AlertDialog.Content, { children: [_jsx(AlertDialog.CloseTrigger, { children: _jsx(XIcon, {}) }), _jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary", children: _jsx(QrCode02Icon, { className: "size-6 text-text-featured-icon-light-brand" }) }), _jsx(AlertDialog.Title, { className: "mt-xl", children: "How to Use the QR Code for Payment" }), _jsx(AlertDialog.Description, { className: "mt-xl px-3", children: "Follow these simple steps to complete your\u00A0transaction:" }), _jsx("div", { className: "mt-4 text-sm text-text-tertiary-600", children: _jsxs("ol", { className: "list-decimal pl-4", children: [_jsx("li", { className: "marker:font-mono marker:text-sm", children: "Open your preferred banking or EMI mobile app and select 'Transfer Money' or 'Pay via QR.'" }), _jsx("li", { className: "marker:font-mono marker:text-sm", children: "Scan or upload the generated QR Ph code. If prompted by the app, enter the amount to be sent." }), _jsx("li", { className: "marker:font-mono marker:text-sm", children: "Proceed with the transfer or payment." })] }) })] }) })] })] }));
41
- }
@@ -1,13 +0,0 @@
1
- import type { Deposit } from '../../../../types';
2
- export type UseQRPHDepositReturn = ReturnType<typeof useQRPHDeposit>;
3
- export interface GenerateQRCodeInput {
4
- amount: string;
5
- promo?: string | null;
6
- }
7
- export declare function useQRPHDeposit(): {
8
- status: "idle" | "confirmed" | "failed" | "generating-qr-code" | "qr-code-generated";
9
- deposit: Deposit | null;
10
- generateQRCode: (input: GenerateQRCodeInput) => Promise<void>;
11
- regenerateQRCode: () => Promise<void>;
12
- reset: () => void;
13
- };
@@ -1,91 +0,0 @@
1
- import { useEffect, useRef, useState } from 'react';
2
- import invariant from 'tiny-invariant';
3
- import { useShallow } from 'zustand/shallow';
4
- import { useCreateQRPHDepositMutation } from '../../../../client/hooks/useCreateQRPHDepositMutation.js';
5
- import { useDepositQuery } from '../../../../client/hooks/useDepositQuery.js';
6
- import { useGlobalStore } from '../../../../client/hooks/useGlobalStore.js';
7
- import { useMemberVerificationQuery } from '../../../../client/hooks/useMemberVerificationQuery.js';
8
- export function useQRPHDeposit() {
9
- const globalStore = useGlobalStore(useShallow((ctx) => ({
10
- kycVerificationStatus: ctx.kycVerificationStatus,
11
- })));
12
- const inputRef = useRef(null);
13
- const [deposit, setDeposit] = useState(null);
14
- const [status, setStatus] = useState('idle');
15
- const verificationQuery = useMemberVerificationQuery();
16
- const verificationStatus = verificationQuery.data?.status ?? 'UNVERIFIED';
17
- const mutation = useCreateQRPHDepositMutation({
18
- onMutate() {
19
- setStatus('generating-qr-code');
20
- },
21
- onSuccess(data) {
22
- invariant(data.qrCode);
23
- setStatus('qr-code-generated');
24
- setDeposit(data);
25
- },
26
- onError() {
27
- setStatus('failed');
28
- },
29
- });
30
- const query = useDepositQuery(deposit?.id, {
31
- enabled: !!deposit && status === 'qr-code-generated',
32
- refetchInterval: (ctx) => {
33
- if (ctx.state.data?.status === 'APPROVED' ||
34
- ctx.state.data?.status === 'CONFIRMED' ||
35
- ctx.state.data?.status === 'CANCELLED' ||
36
- ctx.state.data?.status === 'REJECTED' ||
37
- ctx.state.data?.status === 'FAILED') {
38
- return false;
39
- }
40
- return 2000;
41
- },
42
- });
43
- useEffect(() => {
44
- if (query.data?.status === 'APPROVED' ||
45
- query.data?.status === 'CONFIRMED') {
46
- setStatus('confirmed');
47
- return;
48
- }
49
- if (query.data?.status === 'CANCELLED' ||
50
- query.data?.status === 'REJECTED' ||
51
- query.data?.status === 'FAILED') {
52
- setStatus('failed');
53
- return;
54
- }
55
- }, [query.data?.status]);
56
- const generateQRCode = async (input) => {
57
- if (verificationStatus === 'PENDING' ||
58
- verificationStatus === 'UNVERIFIED' ||
59
- verificationStatus === 'REJECTED' ||
60
- verificationStatus === 'CREATED') {
61
- globalStore.kycVerificationStatus.setOpen(true);
62
- return;
63
- }
64
- inputRef.current = input;
65
- mutation.mutate({
66
- amount: input.amount,
67
- promo: input.promo ?? undefined,
68
- });
69
- };
70
- const regenerateQRCode = async () => {
71
- invariant(inputRef.current);
72
- mutation.reset();
73
- await new Promise((resolve) => setTimeout(resolve, 1));
74
- mutation.mutate({
75
- amount: inputRef.current.amount,
76
- promo: inputRef.current.promo ?? undefined,
77
- });
78
- };
79
- const reset = () => {
80
- setStatus('idle');
81
- setDeposit(null);
82
- inputRef.current = null;
83
- };
84
- return {
85
- status,
86
- deposit,
87
- generateQRCode,
88
- regenerateQRCode,
89
- reset,
90
- };
91
- }