@opexa/portal-components 0.0.841 → 0.0.843
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/dist/client/hooks/useAiOGCashDepositMutation.js +10 -0
- package/dist/client/hooks/useCreateGCashDepositMutation.js +10 -0
- package/dist/client/hooks/useCreateMayaDepositMutation.js +10 -0
- package/dist/client/hooks/useCreateOnlineBankDepositMutation.js +10 -0
- package/dist/client/hooks/useCreateQRPHDepositMutation.js +10 -0
- package/dist/components/AccountInfo/GoogleDisconnect.d.ts +7 -0
- package/dist/components/AccountInfo/GoogleDisconnect.js +11 -0
- package/dist/components/DepositWithdrawal/AiOPaymentMethods.d.ts +11 -0
- package/dist/components/DepositWithdrawal/AiOPaymentMethods.js +55 -0
- package/dist/components/DepositWithdrawal/Deposit/AiOGCashDeposit/AiOGCashDeposit.js +9 -4
- package/dist/components/DepositWithdrawal/Deposit/AiOPayMayaDeposit/AiOPayMayaDeposit.js +9 -4
- package/dist/components/DepositWithdrawal/Deposit/GCashDeposit/GCashDeposit.js +10 -5
- package/dist/components/DepositWithdrawal/Deposit/GCashWebpayDeposit /GCashWebpayDeposit .d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/GCashWebpayDeposit /GCashWebpayDeposit .js +191 -0
- package/dist/components/DepositWithdrawal/Deposit/MayaAppDeposit/MayaAppDeposit.js +9 -4
- package/dist/components/DepositWithdrawal/Deposit/MayaDeposit/MayaDeposit.js +9 -4
- package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/OnlineBankDepositContext.d.ts +2 -2
- package/dist/components/DepositWithdrawal/Deposit/OnlineBankDeposit/useOnlineBankDeposit.d.ts +1 -1
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/Failed.js +1 -1
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/QRPHDepositContext.d.ts +10 -2
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/useQRPHDeposit.d.ts +5 -1
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit/useQRPHDeposit.js +8 -1
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__legacy/QRPHDepositContext.d.ts +2 -2
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__legacy/useQRPHDeposit.d.ts +1 -1
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Confirmed.d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Confirmed.js +11 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Failed.d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Failed.js +11 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Form.d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/Form.js +126 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/GeneratingQrCode.d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/GeneratingQrCode.js +10 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDeposit.d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDeposit.js +12 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDepositContext.d.ts +17 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QRPHDepositContext.js +2 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QrCodeGenerated.d.ts +1 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/QrCodeGenerated.js +41 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/useQRPHDeposit.d.ts +13 -0
- package/dist/components/DepositWithdrawal/Deposit/QRPHDeposit__next/useQRPHDeposit.js +91 -0
- package/dist/components/DepositWithdrawal/Deposit__legacy/OnlineBankDeposit/OnlineBankDepositContext.d.ts +2 -2
- package/dist/components/DepositWithdrawal/Deposit__legacy/OnlineBankDeposit/useOnlineBankDeposit.d.ts +1 -1
- package/dist/components/DepositWithdrawal/Deposit__legacy/QRPHDeposit/QRPHDepositContext.d.ts +2 -2
- package/dist/components/DepositWithdrawal/Deposit__legacy/QRPHDeposit/useQRPHDeposit.d.ts +1 -1
- package/dist/components/DepositWithdrawal/utils.js +1 -0
- package/dist/components/DigitainLauncher/Loading.d.ts +1 -0
- package/dist/components/DigitainLauncher/Loading.js +5 -0
- package/dist/components/Jackpots/JackpotsCarousel/JackpotsCarouselItem.module.css +184 -0
- package/dist/components/Jackpots/JackpotsList/JackpotsListItem.module.css +184 -0
- package/dist/components/KYC/BasicInformation.d.ts +1 -0
- package/dist/components/KYC/BasicInformation.js +101 -0
- package/dist/components/KYC/IdentityVerification.d.ts +1 -0
- package/dist/components/KYC/IdentityVerification.js +120 -0
- package/dist/components/KYC/Indicator.d.ts +1 -0
- package/dist/components/KYC/Indicator.js +8 -0
- package/dist/components/KYC/KYC.lazy.d.ts +6 -0
- package/dist/components/KYC/KYC.lazy.js +45 -0
- package/dist/components/KYC/KYCContext.d.ts +6 -0
- package/dist/components/KYC/KYCContext.js +2 -0
- package/dist/components/KYC/PersonalInformation.d.ts +1 -0
- package/dist/components/KYC/PersonalInformation.js +122 -0
- package/dist/components/KYC/useKYC.d.ts +25 -0
- package/dist/components/KYC/useKYC.js +38 -0
- package/dist/components/PortalProvider/CXDTokenObserver.d.ts +1 -0
- package/dist/components/PortalProvider/CXDTokenObserver.js +30 -0
- package/dist/components/PortalProvider/LinkGoogleAccountObserver.d.ts +1 -0
- package/dist/components/PortalProvider/LinkGoogleAccountObserver.js +29 -0
- package/dist/components/SessionWatcher/SessionWatcher.d.ts +1 -0
- package/dist/components/SessionWatcher/SessionWatcher.js +20 -0
- package/dist/components/SessionWatcher/index.d.ts +1 -0
- package/dist/components/SessionWatcher/index.js +1 -0
- package/dist/handlers/postAuthenticate.js +1 -0
- package/dist/handlers/postSession.js +1 -0
- package/dist/icons/LinkBrokenIcon.d.ts +2 -0
- package/dist/icons/LinkBrokenIcon.js +4 -0
- package/dist/images/responsible-gaming-yellow.png +0 -0
- package/dist/next.config.js +1 -1
- package/dist/ui/AlertDialog/AlertDialog.d.ts +88 -88
- package/dist/ui/AlertDialog/alertDialog.recipe.d.ts +8 -8
- package/dist/ui/Badge/Badge.d.ts +12 -12
- package/dist/ui/Badge/badge.anatomy.d.ts +1 -1
- package/dist/ui/Badge/badge.recipe.d.ts +3 -3
- package/dist/ui/Clipboard/Clipboard.d.ts +18 -18
- package/dist/ui/Clipboard/clipboard.recipe.d.ts +3 -3
- package/dist/ui/Collapsible/Collapsible.d.ts +20 -20
- package/dist/ui/Collapsible/collapsible.recipe.d.ts +5 -5
- package/dist/ui/Combobox/Combobox.d.ts +42 -42
- package/dist/ui/Combobox/combobox.recipe.d.ts +3 -3
- package/dist/ui/DatePicker/DatePicker.d.ts +72 -72
- package/dist/ui/DatePicker/datePicker.recipe.d.ts +3 -3
- package/dist/ui/Dialog/Dialog.d.ts +33 -33
- package/dist/ui/Dialog/dialog.recipe.d.ts +3 -3
- package/dist/ui/Drawer/Drawer.d.ts +33 -33
- package/dist/ui/Drawer/drawer.recipe.d.ts +3 -3
- package/dist/ui/Menu/Menu.d.ts +252 -252
- package/dist/ui/Menu/menu.recipe.d.ts +14 -14
- package/dist/ui/QrCode/QrCode.d.ts +25 -25
- package/dist/ui/QrCode/qrCode.recipe.d.ts +5 -5
- package/dist/ui/Select/Select.d.ts +45 -45
- package/dist/ui/Select/select.recipe.d.ts +3 -3
- package/dist/ui/Table/Table.d.ts +21 -21
- package/dist/ui/Table/table.anatomy.d.ts +1 -1
- package/dist/ui/Table/table.recipe.d.ts +3 -3
- package/dist/ui/Tabs/Tabs.d.ts +15 -15
- package/dist/ui/Tabs/tabs.recipe.d.ts +3 -3
- package/package.json +1 -1
- package/dist/components/PortalProvider/AndroidOnlyComponents.d.ts +0 -1
- package/dist/components/PortalProvider/AndroidOnlyComponents.js +0 -12
|
@@ -2,9 +2,11 @@ import { ObjectId } from '@opexa/object-id';
|
|
|
2
2
|
import { useMutation } from '@tanstack/react-query';
|
|
3
3
|
import { clamp } from 'lodash-es';
|
|
4
4
|
import invariant from 'tiny-invariant';
|
|
5
|
+
import { explainError } from '../../components/DepositWithdrawal/utils.js';
|
|
5
6
|
import { OPEXAPAY_ENDPOINT } from '../../constants/index.js';
|
|
6
7
|
import { ObjectType } from '../../services/ObjectType.js';
|
|
7
8
|
import { createAiOGCashDeposit, getDeposit, } from '../../services/wallet.js';
|
|
9
|
+
import { capitalize } from '../../utils/capitalize.js';
|
|
8
10
|
import { createPoll } from '../../utils/createPoll.js';
|
|
9
11
|
import { getQueryClient } from '../../utils/getQueryClient.js';
|
|
10
12
|
import { getCreateAiOGCashDepositMutationKey } from '../../utils/mutationKeys.js';
|
|
@@ -51,6 +53,14 @@ export const useCreateAiOGCashDepositMutation = (config) => {
|
|
|
51
53
|
maxAttempt: 20,
|
|
52
54
|
});
|
|
53
55
|
const res = await poll();
|
|
56
|
+
if (res?.error) {
|
|
57
|
+
const error = new Error();
|
|
58
|
+
error.name = capitalize(res.error, {
|
|
59
|
+
delimiter: capitalize.delimiters.UNDERSCORE,
|
|
60
|
+
});
|
|
61
|
+
error.message = explainError(res.error);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
54
64
|
if (!res?.checkoutUrl) {
|
|
55
65
|
const error = new Error();
|
|
56
66
|
error.name = 'AiOGCashDepositError';
|
|
@@ -2,8 +2,10 @@ import { ObjectId } from '@opexa/object-id';
|
|
|
2
2
|
import { useMutation } from '@tanstack/react-query';
|
|
3
3
|
import { clamp } from 'lodash-es';
|
|
4
4
|
import invariant from 'tiny-invariant';
|
|
5
|
+
import { explainError } from '../../components/DepositWithdrawal/utils.js';
|
|
5
6
|
import { ObjectType } from '../../services/ObjectType.js';
|
|
6
7
|
import { createGCashDeposit, getDeposit, } from '../../services/wallet.js';
|
|
8
|
+
import { capitalize } from '../../utils/capitalize.js';
|
|
7
9
|
import { createPoll } from '../../utils/createPoll.js';
|
|
8
10
|
import { getQueryClient } from '../../utils/getQueryClient.js';
|
|
9
11
|
import { getCreateGCashDepositMutationKey } from '../../utils/mutationKeys.js';
|
|
@@ -43,6 +45,14 @@ export const useCreateGCashDepositMutation = (config) => {
|
|
|
43
45
|
maxAttempt: 20,
|
|
44
46
|
});
|
|
45
47
|
const res = await poll();
|
|
48
|
+
if (res?.error) {
|
|
49
|
+
const error = new Error();
|
|
50
|
+
error.name = capitalize(res.error, {
|
|
51
|
+
delimiter: capitalize.delimiters.UNDERSCORE,
|
|
52
|
+
});
|
|
53
|
+
error.message = explainError(res.error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
46
56
|
if (!res?.checkoutUrl) {
|
|
47
57
|
const error = new Error();
|
|
48
58
|
error.name = 'GCashDepositError';
|
|
@@ -2,8 +2,10 @@ import { ObjectId } from '@opexa/object-id';
|
|
|
2
2
|
import { useMutation } from '@tanstack/react-query';
|
|
3
3
|
import { clamp } from 'lodash-es';
|
|
4
4
|
import invariant from 'tiny-invariant';
|
|
5
|
+
import { explainError } from '../../components/DepositWithdrawal/utils.js';
|
|
5
6
|
import { ObjectType } from '../../services/ObjectType.js';
|
|
6
7
|
import { createMayaDeposit, getDeposit, } from '../../services/wallet.js';
|
|
8
|
+
import { capitalize } from '../../utils/capitalize.js';
|
|
7
9
|
import { createPoll } from '../../utils/createPoll.js';
|
|
8
10
|
import { getQueryClient } from '../../utils/getQueryClient.js';
|
|
9
11
|
import { getCreateMayaDepositMutationKey } from '../../utils/mutationKeys.js';
|
|
@@ -43,6 +45,14 @@ export const useCreateMayaDepositMutation = (config) => {
|
|
|
43
45
|
maxAttempt: 20,
|
|
44
46
|
});
|
|
45
47
|
const res = await poll();
|
|
48
|
+
if (res?.error) {
|
|
49
|
+
const error = new Error();
|
|
50
|
+
error.name = capitalize(res.error, {
|
|
51
|
+
delimiter: capitalize.delimiters.UNDERSCORE,
|
|
52
|
+
});
|
|
53
|
+
error.message = explainError(res.error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
46
56
|
if (!res?.checkoutUrl) {
|
|
47
57
|
const error = new Error();
|
|
48
58
|
error.name = 'MayaDepositError';
|
|
@@ -2,8 +2,10 @@ import { ObjectId } from '@opexa/object-id';
|
|
|
2
2
|
import { useMutation } from '@tanstack/react-query';
|
|
3
3
|
import { clamp } from 'lodash-es';
|
|
4
4
|
import invariant from 'tiny-invariant';
|
|
5
|
+
import { explainError } from '../../components/DepositWithdrawal/utils.js';
|
|
5
6
|
import { ObjectType } from '../../services/ObjectType.js';
|
|
6
7
|
import { createAIOOnlineBankDeposit, getDeposit, } from '../../services/wallet.js';
|
|
8
|
+
import { capitalize } from '../../utils/capitalize.js';
|
|
7
9
|
import { createPoll } from '../../utils/createPoll.js';
|
|
8
10
|
import { getQueryClient } from '../../utils/getQueryClient.js';
|
|
9
11
|
import { getCreateOnlineBankDepositMutationKey } from '../../utils/mutationKeys.js';
|
|
@@ -46,6 +48,14 @@ export const useCreateOnlineBankDepositMutation = (config) => {
|
|
|
46
48
|
maxAttempt: 5,
|
|
47
49
|
});
|
|
48
50
|
const res = await poll();
|
|
51
|
+
if (res?.error) {
|
|
52
|
+
const error = new Error();
|
|
53
|
+
error.name = capitalize(res.error, {
|
|
54
|
+
delimiter: capitalize.delimiters.UNDERSCORE,
|
|
55
|
+
});
|
|
56
|
+
error.message = explainError(res.error);
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
49
59
|
if (!res?.vca) {
|
|
50
60
|
const error = new Error();
|
|
51
61
|
error.name = 'OnlineBankDepositError';
|
|
@@ -2,8 +2,10 @@ import { ObjectId } from '@opexa/object-id';
|
|
|
2
2
|
import { useMutation } from '@tanstack/react-query';
|
|
3
3
|
import { clamp } from 'lodash-es';
|
|
4
4
|
import invariant from 'tiny-invariant';
|
|
5
|
+
import { explainError } from '../../components/DepositWithdrawal/utils.js';
|
|
5
6
|
import { ObjectType } from '../../services/ObjectType.js';
|
|
6
7
|
import { createAIOQRPHDeposit, getDeposit, } from '../../services/wallet.js';
|
|
8
|
+
import { capitalize } from '../../utils/capitalize.js';
|
|
7
9
|
import { createPoll } from '../../utils/createPoll.js';
|
|
8
10
|
import { getQueryClient } from '../../utils/getQueryClient.js';
|
|
9
11
|
import { getCreateQRPHDepositMutationKey } from '../../utils/mutationKeys.js';
|
|
@@ -46,6 +48,14 @@ export const useCreateQRPHDepositMutation = (config) => {
|
|
|
46
48
|
maxAttempt: 5,
|
|
47
49
|
});
|
|
48
50
|
const res = await poll();
|
|
51
|
+
if (res?.error) {
|
|
52
|
+
const error = new Error();
|
|
53
|
+
error.name = capitalize(res.error, {
|
|
54
|
+
delimiter: capitalize.delimiters.UNDERSCORE,
|
|
55
|
+
});
|
|
56
|
+
error.message = explainError(res.error);
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
49
59
|
if (!res?.qrCode) {
|
|
50
60
|
const error = new Error();
|
|
51
61
|
error.name = 'QRPHDepositError';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type UseDisclosureReturn } from '../../client/hooks/useDisclosure';
|
|
2
|
+
interface GoogleDisconnectProps {
|
|
3
|
+
onConfirmAction?: (ctx: UseDisclosureReturn) => React.ReactNode;
|
|
4
|
+
children?: (ctx: UseDisclosureReturn) => React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export declare function GoogleDisconnect(props: GoogleDisconnectProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useDisclosure, } from '../../client/hooks/useDisclosure.js';
|
|
4
|
+
import { LinkBrokenIcon } from '../../icons/LinkBrokenIcon.js';
|
|
5
|
+
import { XIcon } from '../../icons/XIcon.js';
|
|
6
|
+
import { Dialog } from '../../ui/Dialog/index.js';
|
|
7
|
+
import { Portal } from '../../ui/Portal/index.js';
|
|
8
|
+
export function GoogleDisconnect(props) {
|
|
9
|
+
const disclosure = useDisclosure();
|
|
10
|
+
return (_jsxs(_Fragment, { children: [props.children?.(disclosure), _jsx(Dialog.Root, { lazyMount: true, unmountOnExit: true, open: disclosure.open, onOpenChange: (details) => disclosure.setOpen(details.open), closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(Dialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+1)]" }), _jsx(Dialog.Positioner, { className: "!z-[calc(var(--z-dialog)+2)] flex items-center justify-center", children: _jsxs(Dialog.Content, { className: "mx-auto min-h-auto max-w-[25rem] overflow-y-auto rounded-xl p-6", children: [_jsx(Dialog.CloseTrigger, { children: _jsx(XIcon, {}) }), _jsxs("div", { className: "flex flex-col ", children: [_jsx("div", { className: "mx-auto flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary text-text-brand", children: _jsx(LinkBrokenIcon, {}) }), _jsx("h2", { className: "mb-1 text-center font-semibold text-lg xl:mt-xl", children: "Disconnect Google Account" }), _jsx("p", { className: "text-center text-sm text-text-tertiary-600 leading-2xl", children: "Are you sure you want to disconnect your Google account? This may affect your ability to log in or sync data." })] }), _jsx("div", { className: "pt-6", children: props.onConfirmAction?.(disclosure) })] }) })] }) })] }));
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AiOeWalletPaymentMethod } from './utils';
|
|
2
|
+
interface AiOPaymentMethodsProps {
|
|
3
|
+
value?: AiOeWalletPaymentMethod;
|
|
4
|
+
onChange?: (value: AiOeWalletPaymentMethod) => void;
|
|
5
|
+
defaultValue?: AiOeWalletPaymentMethod;
|
|
6
|
+
options?: AiOeWalletPaymentMethod[];
|
|
7
|
+
className?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function AiOPaymentMethods(props: AiOPaymentMethodsProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import Image from 'next/image';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import { useControllableState } from '../../client/hooks/useControllableState.js';
|
|
5
|
+
import { CheckIcon } from '../../icons/CheckIcon.js';
|
|
6
|
+
import gcash from '../../images/gcash.png';
|
|
7
|
+
import grabPay from '../../images/grabpay.png';
|
|
8
|
+
import maya from '../../images/maya.png';
|
|
9
|
+
import palawanPay from '../../images/palawanpay.png';
|
|
10
|
+
import { Checkbox } from '../../ui/Checkbox/index.js';
|
|
11
|
+
import { Field } from '../../ui/Field/index.js';
|
|
12
|
+
import { AiOeWalletPaymentMethodDefinition, } from './utils.js';
|
|
13
|
+
const AIO_EWALLET_OPTIONS = [
|
|
14
|
+
{
|
|
15
|
+
value: 'AIO_GCASH',
|
|
16
|
+
label: 'GCash',
|
|
17
|
+
image: gcash,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
value: 'AIO_PAY_MAYA',
|
|
21
|
+
label: 'Maya',
|
|
22
|
+
image: maya,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
value: 'AIO_GRAB_PAY',
|
|
26
|
+
label: 'GrabPay',
|
|
27
|
+
image: grabPay,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
value: 'AIO_PALAWAN_PAY',
|
|
31
|
+
label: 'Palawan Pay',
|
|
32
|
+
image: palawanPay,
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
export function AiOPaymentMethods(props) {
|
|
36
|
+
const options = props.options && props.options.length > 0
|
|
37
|
+
? AIO_EWALLET_OPTIONS.filter((option) => props.options?.includes(option.value))
|
|
38
|
+
: AIO_EWALLET_OPTIONS;
|
|
39
|
+
const [value, setValue] = useControllableState({
|
|
40
|
+
value: props.value,
|
|
41
|
+
defaultValue: props.defaultValue ?? options[0]?.value,
|
|
42
|
+
onChange: props.onChange,
|
|
43
|
+
});
|
|
44
|
+
const parseValue = (val) => {
|
|
45
|
+
return AiOeWalletPaymentMethodDefinition.parse(val);
|
|
46
|
+
};
|
|
47
|
+
return (_jsxs("div", { className: props.className, children: [_jsx(Field.Label, { asChild: true, children: _jsx("div", { children: props.label || 'AIO eWallet payment methods' }) }), _jsx(Checkbox.Group, { value: [value], onValueChange: (newValue) => {
|
|
48
|
+
const lastValue = newValue.at(-1);
|
|
49
|
+
if (!lastValue)
|
|
50
|
+
return;
|
|
51
|
+
setValue(parseValue(lastValue));
|
|
52
|
+
}, className: "grid grid-cols-2 gap-x-4 gap-y-3", children: options.map((option) => (_jsxs(Checkbox.Root, { value: option.value, className: "flex cursor-pointer items-center justify-between rounded-xl border border-border-secondary ui-checked:border-border-brand-solid p-lg", children: [_jsx("div", { className: twMerge('rounded-xs', option.value === 'AIO_GRAB_PAY'
|
|
53
|
+
? 'bg-transparent px-0 py-0'
|
|
54
|
+
: 'bg-white px-sm py-[0.688rem]', option.value === 'AIO_GCASH' && 'bg-[#017EFF]', option.value === 'AIO_PALAWAN_PAY' && 'bg-[#026308]', option.value === 'AIO_PAY_MAYA' && 'bg-black'), children: _jsx(Image, { src: option.image, alt: "", width: 200, height: 40, className: twMerge('h-[1.063rem] w-auto', option.value === 'AIO_GRAB_PAY' && 'h-[3rem] rounded-[4px]', option.value === 'AIO_PALAWAN_PAY' && 'h-[2rem]'), draggable: false }) }), _jsx(Checkbox.Control, { className: "shrink-0", children: _jsx(Checkbox.Indicator, { asChild: true, children: _jsx(CheckIcon, {}) }) }), _jsx(Checkbox.HiddenInput, {})] }, option.value))) })] }));
|
|
55
|
+
}
|
|
@@ -48,6 +48,7 @@ export function AiOGCashDeposit() {
|
|
|
48
48
|
const verificationQuery = useMemberVerificationQuery();
|
|
49
49
|
const verificationStatus = verificationQuery.data?.status ?? 'UNVERIFIED';
|
|
50
50
|
const [status, setStatus] = useState('waiting');
|
|
51
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
51
52
|
const createDepositMutation = useCreateAiOGCashDepositMutation({
|
|
52
53
|
onMutate() {
|
|
53
54
|
disclosure.setOpen(true);
|
|
@@ -62,8 +63,12 @@ export function AiOGCashDeposit() {
|
|
|
62
63
|
});
|
|
63
64
|
setStatus('success');
|
|
64
65
|
},
|
|
65
|
-
onError() {
|
|
66
|
+
onError(data) {
|
|
66
67
|
setStatus('failed');
|
|
68
|
+
setErrorMessage({
|
|
69
|
+
name: data.name,
|
|
70
|
+
message: data.message,
|
|
71
|
+
});
|
|
67
72
|
},
|
|
68
73
|
});
|
|
69
74
|
const warn = useBoolean();
|
|
@@ -192,6 +197,7 @@ export function AiOGCashDeposit() {
|
|
|
192
197
|
disclosure.setOpen(details.open);
|
|
193
198
|
}, lazyMount: true, unmountOnExit: true, closeOnEscape: false, closeOnInteractOutside: false, onExitComplete: () => {
|
|
194
199
|
setStatus('waiting');
|
|
200
|
+
setErrorMessage(null);
|
|
195
201
|
form.reset();
|
|
196
202
|
warn.setFalse();
|
|
197
203
|
}, 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.Context, { children: (api) => (_jsx("button", { type: "button", className: "absolute top-2.5 right-2.5 flex icon:size-6 size-11 items-center justify-center text-text-quinary", onClick: () => {
|
|
@@ -203,14 +209,13 @@ export function AiOGCashDeposit() {
|
|
|
203
209
|
}
|
|
204
210
|
}, children: _jsx(XIcon, {}) })) }), _jsxs(AlertDialog.Header, { children: [status === 'processing' && (_jsx(SpinnerIcon, { className: "size-12 text-text-brand-primary-600" })), status === 'success' && !warn.value && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary text-text-featured-icon-light-brand", children: _jsx(RefreshCcw01Icon, {}) })), status === 'success' && warn.value && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) })), status === 'confirmed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-success-secondary text-text-featured-icon-light-success", children: _jsx(AlertCircleIcon, {}) })), status === 'failed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) }))] }), _jsxs(AlertDialog.Body, { children: [_jsxs(AlertDialog.Title, { children: [status === 'processing' && 'Processing Deposit', status === 'success' &&
|
|
205
211
|
!warn.value &&
|
|
206
|
-
'Didn’t see the payment window?', status === 'success' && warn.value && (_jsx(_Fragment, { children: "Are you sure you want to close this\u00A0window?" })), status === 'confirmed' && 'Deposit Successful', status === 'failed' &&
|
|
212
|
+
'Didn’t see the payment window?', status === 'success' && warn.value && (_jsx(_Fragment, { children: "Are you sure you want to close this\u00A0window?" })), status === 'confirmed' && 'Deposit Successful', status === 'failed' && errorMessage?.name] }), _jsxs(AlertDialog.Description, { children: [status === 'processing' &&
|
|
207
213
|
"We're verifying your account and amount. Please hold a moment.", status === 'success' &&
|
|
208
214
|
!warn.value &&
|
|
209
215
|
'Sometimes the payment pop up doesn’t appear right away. Don’t worry, just click the button below to reopen it and continue your deposit.', status === 'success' &&
|
|
210
216
|
warn.value &&
|
|
211
217
|
'Closing this window might cancel your current deposit. Do you want to continue?', status === 'confirmed' &&
|
|
212
|
-
'Your deposit has been successfully processed.', status === 'failed' &&
|
|
213
|
-
'Something went wrong while processing your deposit. Please try again or contact support.'] })] }), (status === 'failed' ||
|
|
218
|
+
'Your deposit has been successfully processed.', status === 'failed' && errorMessage?.message] })] }), (status === 'failed' ||
|
|
214
219
|
status === 'success' ||
|
|
215
220
|
status === 'confirmed') && (_jsxs(AlertDialog.Footer, { children: [status === 'success' && !warn.value && (_jsx(Button, { asChild: true, children: _jsx("a", { href: createDepositMutation.data?.checkoutUrl ?? '', target: "_blank", rel: "noopener noreferrer", children: "Try Again" }) })), status === 'success' && warn.value && (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => {
|
|
216
221
|
warn.setFalse();
|
|
@@ -48,6 +48,7 @@ export function AiOPayMayaDeposit() {
|
|
|
48
48
|
const verificationQuery = useMemberVerificationQuery();
|
|
49
49
|
const verificationStatus = verificationQuery.data?.status ?? 'UNVERIFIED';
|
|
50
50
|
const [status, setStatus] = useState('waiting');
|
|
51
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
51
52
|
const createDepositMutation = useCreateAiOPayMayaDepositMutation({
|
|
52
53
|
onMutate() {
|
|
53
54
|
disclosure.setOpen(true);
|
|
@@ -60,8 +61,12 @@ export function AiOPayMayaDeposit() {
|
|
|
60
61
|
queryClient.invalidateQueries({ queryKey: getDepositsCountQueryKey() });
|
|
61
62
|
setStatus('success');
|
|
62
63
|
},
|
|
63
|
-
onError() {
|
|
64
|
+
onError(data) {
|
|
64
65
|
setStatus('failed');
|
|
66
|
+
setErrorMessage({
|
|
67
|
+
name: data.name,
|
|
68
|
+
message: data.message,
|
|
69
|
+
});
|
|
65
70
|
},
|
|
66
71
|
});
|
|
67
72
|
const warn = useBoolean();
|
|
@@ -190,6 +195,7 @@ export function AiOPayMayaDeposit() {
|
|
|
190
195
|
disclosure.setOpen(details.open);
|
|
191
196
|
}, lazyMount: true, unmountOnExit: true, closeOnEscape: false, closeOnInteractOutside: false, onExitComplete: () => {
|
|
192
197
|
setStatus('waiting');
|
|
198
|
+
setErrorMessage(null);
|
|
193
199
|
form.reset();
|
|
194
200
|
warn.setFalse();
|
|
195
201
|
}, 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.Context, { children: (api) => (_jsx("button", { type: "button", className: "absolute top-2.5 right-2.5 flex icon:size-6 size-11 items-center justify-center text-text-quinary", onClick: () => {
|
|
@@ -201,14 +207,13 @@ export function AiOPayMayaDeposit() {
|
|
|
201
207
|
}
|
|
202
208
|
}, children: _jsx(XIcon, {}) })) }), _jsxs(AlertDialog.Header, { children: [status === 'processing' && (_jsx(SpinnerIcon, { className: "size-12 text-text-brand-primary-600" })), status === 'success' && !warn.value && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary text-text-featured-icon-light-brand", children: _jsx(RefreshCcw01Icon, {}) })), status === 'success' && warn.value && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) })), status === 'confirmed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-success-secondary text-text-featured-icon-light-success", children: _jsx(AlertCircleIcon, {}) })), status === 'failed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) }))] }), _jsxs(AlertDialog.Body, { children: [_jsxs(AlertDialog.Title, { children: [status === 'processing' && 'Processing Deposit', status === 'success' &&
|
|
203
209
|
!warn.value &&
|
|
204
|
-
'Didn’t see the payment window?', status === 'success' && warn.value && (_jsx(_Fragment, { children: "Are you sure you want to close this\u00A0window?" })), status === 'confirmed' && 'Deposit Successful', status === 'failed' &&
|
|
210
|
+
'Didn’t see the payment window?', status === 'success' && warn.value && (_jsx(_Fragment, { children: "Are you sure you want to close this\u00A0window?" })), status === 'confirmed' && 'Deposit Successful', status === 'failed' && errorMessage?.name] }), _jsxs(AlertDialog.Description, { children: [status === 'processing' &&
|
|
205
211
|
"We're verifying your account and amount. Please hold a moment.", status === 'success' &&
|
|
206
212
|
!warn.value &&
|
|
207
213
|
'Sometimes the payment pop up doesn’t appear right away. Don’t worry, just click the button below to reopen it and continue your deposit.', status === 'success' &&
|
|
208
214
|
warn.value &&
|
|
209
215
|
'Closing this window might cancel your current deposit. Do you want to continue?', status === 'confirmed' &&
|
|
210
|
-
'Your deposit has been successfully processed.', status === 'failed' &&
|
|
211
|
-
'Something went wrong while processing your deposit. Please try again or contact support.'] })] }), (status === 'failed' ||
|
|
216
|
+
'Your deposit has been successfully processed.', status === 'failed' && errorMessage?.message] })] }), (status === 'failed' ||
|
|
212
217
|
status === 'success' ||
|
|
213
218
|
status === 'confirmed') && (_jsxs(AlertDialog.Footer, { children: [status === 'success' && !warn.value && (_jsx(Button, { asChild: true, children: _jsx("a", { href: createDepositMutation.data?.checkoutUrl ?? '', target: "_blank", rel: "noopener noreferrer", children: "Try Again" }) })), status === 'success' && warn.value && (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => {
|
|
214
219
|
warn.setFalse();
|
|
@@ -46,6 +46,7 @@ export function GCashDeposit() {
|
|
|
46
46
|
const verificationQuery = useMemberVerificationQuery();
|
|
47
47
|
const verificationStatus = verificationQuery.data?.status ?? 'UNVERIFIED';
|
|
48
48
|
const [status, setStatus] = useState('waiting');
|
|
49
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
49
50
|
const createDepositMutation = useCreateGCashDepositMutation({
|
|
50
51
|
onMutate() {
|
|
51
52
|
disclosure.setOpen(true);
|
|
@@ -56,8 +57,12 @@ export function GCashDeposit() {
|
|
|
56
57
|
window.open(data.checkoutUrl, '_blank', 'noopener,noreferrer');
|
|
57
58
|
setStatus('success');
|
|
58
59
|
},
|
|
59
|
-
onError() {
|
|
60
|
+
onError(data) {
|
|
60
61
|
setStatus('failed');
|
|
62
|
+
setErrorMessage({
|
|
63
|
+
name: data.name,
|
|
64
|
+
message: data.message,
|
|
65
|
+
});
|
|
61
66
|
},
|
|
62
67
|
});
|
|
63
68
|
const warn = useBoolean();
|
|
@@ -183,6 +188,7 @@ export function GCashDeposit() {
|
|
|
183
188
|
disclosure.setOpen(details.open);
|
|
184
189
|
}, lazyMount: true, unmountOnExit: true, closeOnEscape: false, closeOnInteractOutside: false, onExitComplete: () => {
|
|
185
190
|
setStatus('waiting');
|
|
191
|
+
setErrorMessage(null);
|
|
186
192
|
form.reset();
|
|
187
193
|
warn.setFalse();
|
|
188
194
|
}, 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.Context, { children: (api) => (_jsx("button", { type: "button", className: "absolute top-2.5 right-2.5 flex icon:size-6 size-11 items-center justify-center text-text-quinary", onClick: () => {
|
|
@@ -194,14 +200,13 @@ export function GCashDeposit() {
|
|
|
194
200
|
}
|
|
195
201
|
}, children: _jsx(XIcon, {}) })) }), _jsxs(AlertDialog.Header, { children: [status === 'processing' && (_jsx(SpinnerIcon, { className: "size-12 text-text-brand-primary-600" })), status === 'success' && !warn.value && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-brand-secondary text-text-featured-icon-light-brand", children: _jsx(RefreshCcw01Icon, {}) })), status === 'success' && warn.value && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) })), status === 'confirmed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-success-secondary text-text-featured-icon-light-success", children: _jsx(AlertCircleIcon, {}) })), status === 'failed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) }))] }), _jsxs(AlertDialog.Body, { children: [_jsxs(AlertDialog.Title, { children: [status === 'processing' && 'Processing Deposit', status === 'success' &&
|
|
196
202
|
!warn.value &&
|
|
197
|
-
'
|
|
203
|
+
"Didn't see the payment window?", status === 'success' && warn.value && (_jsx(_Fragment, { children: "Are you sure you want to close this\u00A0window?" })), status === 'confirmed' && 'Deposit Successful', status === 'failed' && errorMessage?.name] }), _jsxs(AlertDialog.Description, { children: [status === 'processing' &&
|
|
198
204
|
"We're verifying your account and amount. Please hold a moment.", status === 'success' &&
|
|
199
205
|
!warn.value &&
|
|
200
|
-
|
|
206
|
+
"Sometimes the payment pop up doesn't appear right away. Don't worry, just click the button below to reopen it and continue your deposit.", status === 'success' &&
|
|
201
207
|
warn.value &&
|
|
202
208
|
'Closing this window might cancel your current deposit. Do you want to continue?', status === 'confirmed' &&
|
|
203
|
-
'Your deposit has been successfully processed.', status === 'failed' &&
|
|
204
|
-
'Something went wrong while processing your deposit. Please try again or contact support.'] })] }), (status === 'failed' ||
|
|
209
|
+
'Your deposit has been successfully processed.', status === 'failed' && errorMessage?.message] })] }), (status === 'failed' ||
|
|
205
210
|
status === 'success' ||
|
|
206
211
|
status === 'confirmed') && (_jsxs(AlertDialog.Footer, { children: [status === 'success' && !warn.value && (_jsx(Button, { asChild: true, children: _jsx("a", { href: createDepositMutation.data?.checkoutUrl ?? '', target: "_blank", rel: "noopener noreferrer", children: "Try Again" }) })), status === 'success' && warn.value && (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => {
|
|
207
212
|
warn.setFalse();
|
package/dist/components/DepositWithdrawal/Deposit/GCashWebpayDeposit /GCashWebpayDeposit .d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function GCashWebpayDeposit(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,191 @@
|
|
|
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, useState } from 'react';
|
|
5
|
+
import { Controller, useForm } from 'react-hook-form';
|
|
6
|
+
import invariant from 'tiny-invariant';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { useShallow } from 'zustand/shallow';
|
|
9
|
+
import { useAvailablePromosQuery } from '../../../../client/hooks/useAvailablePromosQuery.js';
|
|
10
|
+
import { useCreateGCashWebpayDepositMutation } from '../../../../client/hooks/useCreateGCashWebpayDepositMutation.js';
|
|
11
|
+
import { useDepositQuery } from '../../../../client/hooks/useDepositQuery.js';
|
|
12
|
+
import { useDepositsCountQuery } from '../../../../client/hooks/useDepositsCountQuery.js';
|
|
13
|
+
import { useDisclosure } from '../../../../client/hooks/useDisclosure.js';
|
|
14
|
+
import { useGlobalStore } from '../../../../client/hooks/useGlobalStore.js';
|
|
15
|
+
import { useMemberVerificationQuery } from '../../../../client/hooks/useMemberVerificationQuery.js';
|
|
16
|
+
import { usePaymentSettingsQuery } from '../../../../client/hooks/usePaymentSettingsQuery.js';
|
|
17
|
+
import { AlertCircleIcon } from '../../../../icons/AlertCircleIcon.js';
|
|
18
|
+
import { ChevronDownIcon } from '../../../../icons/ChevronDownIcon.js';
|
|
19
|
+
import { ChevronUpIcon } from '../../../../icons/ChevronUpIcon.js';
|
|
20
|
+
import { SpinnerIcon } from '../../../../icons/SpinnerIcon.js';
|
|
21
|
+
import { XIcon } from '../../../../icons/XIcon.js';
|
|
22
|
+
import { AlertDialog } from '../../../../ui/AlertDialog/index.js';
|
|
23
|
+
import { Button } from '../../../../ui/Button/index.js';
|
|
24
|
+
import { Field } from '../../../../ui/Field/index.js';
|
|
25
|
+
import { NumberInput } from '../../../../ui/NumberInput/index.js';
|
|
26
|
+
import { Portal } from '../../../../ui/Portal/index.js';
|
|
27
|
+
import { parseDecimal } from '../../../../utils/parseDecimal.js';
|
|
28
|
+
import { AmountChoices } from '../../AmountChoices.js';
|
|
29
|
+
import { useDepositWithdrawalPropsContext } from '../../DepositWithdrawalContext.js';
|
|
30
|
+
import { AvailablePromos } from '../AvailablePromos.js';
|
|
31
|
+
export function GCashWebpayDeposit() {
|
|
32
|
+
const depositWithdrawalProps = useDepositWithdrawalPropsContext();
|
|
33
|
+
const disclosure = useDisclosure();
|
|
34
|
+
const globalStore = useGlobalStore(useShallow((ctx) => ({
|
|
35
|
+
depositWithdrawal: ctx.depositWithdrawal,
|
|
36
|
+
kycVerificationStatus: ctx.kycVerificationStatus,
|
|
37
|
+
})));
|
|
38
|
+
const verificationQuery = useMemberVerificationQuery();
|
|
39
|
+
const verificationStatus = verificationQuery.data?.status ?? 'UNVERIFIED';
|
|
40
|
+
const [status, setStatus] = useState('waiting');
|
|
41
|
+
const createDepositMutation = useCreateGCashWebpayDepositMutation({
|
|
42
|
+
onMutate() {
|
|
43
|
+
disclosure.setOpen(true);
|
|
44
|
+
setStatus('processing');
|
|
45
|
+
},
|
|
46
|
+
onSuccess(data) {
|
|
47
|
+
invariant(data.checkoutUrl);
|
|
48
|
+
window.open(data.checkoutUrl, '_blank', 'noopener,noreferrer');
|
|
49
|
+
form.reset();
|
|
50
|
+
disclosure.setOpen(false);
|
|
51
|
+
},
|
|
52
|
+
onError() {
|
|
53
|
+
disclosure.setOpen(true);
|
|
54
|
+
setStatus('failed');
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const depositQuery = useDepositQuery(createDepositMutation.data?.id, {
|
|
58
|
+
enabled: createDepositMutation.data != null,
|
|
59
|
+
refetchInterval(ctx) {
|
|
60
|
+
if (ctx.state.data?.status === 'CANCELLED' ||
|
|
61
|
+
ctx.state.data?.status === 'CONFIRMED') {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return 2500;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (depositQuery.data?.status === 'CANCELLED') {
|
|
71
|
+
disclosure.setOpen(true);
|
|
72
|
+
setStatus('failed');
|
|
73
|
+
}
|
|
74
|
+
else if (depositQuery.data?.status === 'CONFIRMED') {
|
|
75
|
+
disclosure.setOpen(true);
|
|
76
|
+
setStatus('success');
|
|
77
|
+
}
|
|
78
|
+
}, [depositQuery.data?.status, disclosure]);
|
|
79
|
+
const depositsCountQuery = useDepositsCountQuery();
|
|
80
|
+
const depositsCount = depositsCountQuery.data ?? 0;
|
|
81
|
+
const paymentSettingsQuery = usePaymentSettingsQuery();
|
|
82
|
+
const paymentSettings = paymentSettingsQuery.data;
|
|
83
|
+
const gatewaySettings = paymentSettings?.gcashWebpayDepositGatewaySettings;
|
|
84
|
+
const maximumAmount = parseDecimal(gatewaySettings?.maximumAmount, 0);
|
|
85
|
+
const minimumAmount = depositsCount <= 0
|
|
86
|
+
? parseDecimal(paymentSettingsQuery.data?.minimumFirstDepositAmount, 0)
|
|
87
|
+
: parseDecimal(gatewaySettings?.minimumAmount, 0);
|
|
88
|
+
const promosQuery = useAvailablePromosQuery();
|
|
89
|
+
const promos = promosQuery.data ?? [];
|
|
90
|
+
const definition = z
|
|
91
|
+
.object({
|
|
92
|
+
amount: z.string().superRefine((val, ctx) => {
|
|
93
|
+
const n = parseDecimal(val, 0);
|
|
94
|
+
if (n < minimumAmount) {
|
|
95
|
+
ctx.addIssue({
|
|
96
|
+
type: 'number',
|
|
97
|
+
code: z.ZodIssueCode.too_small,
|
|
98
|
+
inclusive: true,
|
|
99
|
+
minimum: minimumAmount,
|
|
100
|
+
message: `Minimum amount is ${minimumAmount.toLocaleString()}`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
if (n > maximumAmount) {
|
|
104
|
+
ctx.addIssue({
|
|
105
|
+
type: 'number',
|
|
106
|
+
code: z.ZodIssueCode.too_big,
|
|
107
|
+
inclusive: true,
|
|
108
|
+
maximum: maximumAmount,
|
|
109
|
+
message: `Maximum amount is ${maximumAmount.toLocaleString()}`,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}),
|
|
113
|
+
promo: z.string().optional().nullable(),
|
|
114
|
+
})
|
|
115
|
+
.superRefine((value, ctx) => {
|
|
116
|
+
const promo = promos.find((o) => o.id === value.promo);
|
|
117
|
+
const promoMinAmount = parseDecimal(promo?.minimumDepositAmount, 0);
|
|
118
|
+
const promoMaxAmount = parseDecimal(promo?.maximumDepositAmount, 0);
|
|
119
|
+
const amount = parseDecimal(value.amount, 0);
|
|
120
|
+
if (promo && amount < promoMinAmount) {
|
|
121
|
+
ctx.addIssue({
|
|
122
|
+
path: ['amount'],
|
|
123
|
+
code: z.ZodIssueCode.custom,
|
|
124
|
+
message: `Minimum amount for this promo is ${promoMinAmount.toLocaleString()}`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (promo && amount > promoMaxAmount) {
|
|
128
|
+
ctx.addIssue({
|
|
129
|
+
path: ['amount'],
|
|
130
|
+
code: z.ZodIssueCode.custom,
|
|
131
|
+
message: `Maximum amount for this promo is ${promoMaxAmount}`,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const form = useForm({
|
|
136
|
+
mode: 'all',
|
|
137
|
+
resolver: zodResolver(definition),
|
|
138
|
+
defaultValues: {
|
|
139
|
+
amount: '0',
|
|
140
|
+
promo: globalStore.depositWithdrawal.promo ?? null,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
if (minimumAmount) {
|
|
145
|
+
form.reset({
|
|
146
|
+
amount: minimumAmount.toString(),
|
|
147
|
+
promo: form.getValues('promo') ?? null,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}, [form, minimumAmount]);
|
|
151
|
+
return (_jsxs("form", { onSubmit: form.handleSubmit(async (data) => {
|
|
152
|
+
//handle new kyc process
|
|
153
|
+
if (verificationStatus === 'PENDING' ||
|
|
154
|
+
verificationStatus === 'UNVERIFIED' ||
|
|
155
|
+
verificationStatus === 'REJECTED' ||
|
|
156
|
+
verificationStatus === 'CREATED') {
|
|
157
|
+
globalStore.kycVerificationStatus.setOpen(true);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
createDepositMutation.reset();
|
|
162
|
+
createDepositMutation.mutate({
|
|
163
|
+
amount: data.amount.toString(),
|
|
164
|
+
promo: data.promo ?? undefined,
|
|
165
|
+
successRedirectionUrl: window.location.origin,
|
|
166
|
+
cancelRedirectionUrl: window.location.origin,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}), noValidate: true, children: [_jsx(Controller, { control: form.control, name: "amount", render: (o) => (_jsxs(Field.Root, { invalid: !!form.formState.errors.amount, children: [_jsxs(NumberInput.Root, { min: 0, step: 1, value: o.field.value, onValueChange: (details) => {
|
|
170
|
+
o.field.onChange(details.value);
|
|
171
|
+
}, formatOptions: {
|
|
172
|
+
maximumFractionDigits: 2,
|
|
173
|
+
minimumFractionDigits: 0,
|
|
174
|
+
}, allowMouseWheel: true, children: [_jsx(NumberInput.Label, { children: "Enter amount you want to deposit" }), _jsxs(NumberInput.Control, { children: [_jsx(NumberInput.Input, {}), _jsx(NumberInput.IncrementTrigger, { children: _jsx(ChevronUpIcon, {}) }), _jsx(NumberInput.DecrementTrigger, { children: _jsx(ChevronDownIcon, {}) })] })] }), _jsx(Field.ErrorText, { children: form.formState.errors.amount?.message })] })) }), _jsx(AmountChoices, { value: parseDecimal(form.watch('amount'), 0), onChange: (value) => {
|
|
175
|
+
form.setValue('amount', value.toString(), {
|
|
176
|
+
shouldTouch: true,
|
|
177
|
+
shouldDirty: true,
|
|
178
|
+
shouldValidate: true,
|
|
179
|
+
});
|
|
180
|
+
}, min: minimumAmount, max: maximumAmount, className: "mt-lg" }), _jsx(Controller, { control: form.control, name: "promo", render: (o) => (_jsx(AvailablePromos, { value: o.field.value, onChange: (value) => {
|
|
181
|
+
o.field.onChange(value);
|
|
182
|
+
globalStore.depositWithdrawal.setPromo(null);
|
|
183
|
+
}, className: "mt-3xl" })) }), _jsx(Button, { type: "submit", className: "mt-3xl", disabled: createDepositMutation.isPending, children: "Deposit" }), _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: disclosure.open, onOpenChange: (details) => {
|
|
184
|
+
disclosure.setOpen(details.open);
|
|
185
|
+
}, lazyMount: true, unmountOnExit: true, 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, {}) }), _jsxs(AlertDialog.Header, { children: [status === 'processing' && (_jsx(SpinnerIcon, { className: "size-12 text-text-brand-primary-600" })), status === 'success' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-success-secondary text-text-featured-icon-light-success", children: _jsx(AlertCircleIcon, {}) })), status === 'failed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) }))] }), _jsxs(AlertDialog.Body, { children: [_jsxs(AlertDialog.Title, { children: [status === 'processing' && 'Processing Deposit', status === 'success' && 'Deposit Successful', status === 'failed' && 'Deposit Failed'] }), _jsxs(AlertDialog.Description, { children: [status === 'processing' &&
|
|
186
|
+
"We're verifying your account and amount. Please hold a moment.", status === 'success' &&
|
|
187
|
+
'Your deposit has been successfully processed.', status === 'failed' &&
|
|
188
|
+
'Something went wrong while processing your deposit. Please try again or contact support.'] })] }), (status === 'failed' || status === 'success') && (_jsx(AlertDialog.Footer, { children: _jsx(AlertDialog.Context, { children: (api) => (_jsx(Button, { onClick: () => {
|
|
189
|
+
api.setOpen(false);
|
|
190
|
+
}, children: status === 'failed' ? 'Try Again' : 'Ok' })) }) }))] }) })] }) })] }));
|
|
191
|
+
}
|
|
@@ -34,6 +34,7 @@ export function MayaAppDeposit() {
|
|
|
34
34
|
const verificationQuery = useMemberVerificationQuery();
|
|
35
35
|
const verificationStatus = verificationQuery.data?.status ?? 'UNVERIFIED';
|
|
36
36
|
const [status, setStatus] = useState('waiting');
|
|
37
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
37
38
|
const createDepositMutation = useCreateMayaAppDepositMutation({
|
|
38
39
|
onMutate() {
|
|
39
40
|
setStatus('processing');
|
|
@@ -42,8 +43,12 @@ export function MayaAppDeposit() {
|
|
|
42
43
|
setStatus('success');
|
|
43
44
|
form.reset();
|
|
44
45
|
},
|
|
45
|
-
onError() {
|
|
46
|
+
onError(data) {
|
|
46
47
|
setStatus('failed');
|
|
48
|
+
setErrorMessage({
|
|
49
|
+
name: data.name,
|
|
50
|
+
message: data.message,
|
|
51
|
+
});
|
|
47
52
|
},
|
|
48
53
|
});
|
|
49
54
|
const depositsCountQuery = useDepositsCountQuery();
|
|
@@ -149,10 +154,10 @@ export function MayaAppDeposit() {
|
|
|
149
154
|
}, className: "mt-3xl" })) }), _jsx(Button, { type: "submit", className: "mt-3xl", disabled: createDepositMutation.isPending, 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: status !== 'waiting', onOpenChange: (details) => {
|
|
150
155
|
if (!details.open) {
|
|
151
156
|
setStatus('waiting');
|
|
157
|
+
setErrorMessage(null);
|
|
152
158
|
}
|
|
153
|
-
}, lazyMount: true, unmountOnExit: 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: status === 'processing', children: _jsx(XIcon, {}) }), _jsxs(AlertDialog.Header, { children: [status === 'processing' && (_jsx(SpinnerIcon, { className: "size-12 text-text-brand-primary-600" })), status === 'success' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-success-secondary text-text-featured-icon-light-success", children: _jsx(AlertCircleIcon, {}) })), status === 'failed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) }))] }), _jsxs(AlertDialog.Body, { children: [_jsxs(AlertDialog.Title, { children: [status === 'processing' && 'Processing Deposit', status === 'success' && 'Deposit Successful', status === 'failed' &&
|
|
154
|
-
"We're verifying your account and amount. Please hold a moment.", status === 'success' && (_jsxs(_Fragment, { children: ["Your deposit has been successfully processed. ", _jsx("br", {}), " If you are not redirected automatically, click", ' ', !!createDepositMutation.data?.checkoutUrl && (_jsx("a", { href: createDepositMutation.data?.checkoutUrl, target: "_blank", rel: "noopener noreferrer", className: "text-text-brand underline underline-offset-2", children: "here" })), "."] })), status === 'failed' &&
|
|
155
|
-
'Something went wrong while processing your deposit. Please try again or contact support.'] })] }), (status === 'failed' || status === 'success') && (_jsx(AlertDialog.Footer, { children: _jsx(AlertDialog.Context, { children: (api) => (_jsx(Button, { onClick: () => {
|
|
159
|
+
}, lazyMount: true, unmountOnExit: 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: status === 'processing', children: _jsx(XIcon, {}) }), _jsxs(AlertDialog.Header, { children: [status === 'processing' && (_jsx(SpinnerIcon, { className: "size-12 text-text-brand-primary-600" })), status === 'success' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-success-secondary text-text-featured-icon-light-success", children: _jsx(AlertCircleIcon, {}) })), status === 'failed' && (_jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-bg-error-secondary text-text-featured-icon-light-error", children: _jsx(AlertCircleIcon, {}) }))] }), _jsxs(AlertDialog.Body, { children: [_jsxs(AlertDialog.Title, { children: [status === 'processing' && 'Processing Deposit', status === 'success' && 'Deposit Successful', status === 'failed' && errorMessage?.name] }), _jsxs(AlertDialog.Description, { children: [status === 'processing' &&
|
|
160
|
+
"We're verifying your account and amount. Please hold a moment.", status === 'success' && (_jsxs(_Fragment, { children: ["Your deposit has been successfully processed. ", _jsx("br", {}), " If you are not redirected automatically, click", ' ', !!createDepositMutation.data?.checkoutUrl && (_jsx("a", { href: createDepositMutation.data?.checkoutUrl, target: "_blank", rel: "noopener noreferrer", className: "text-text-brand underline underline-offset-2", children: "here" })), "."] })), status === 'failed' && errorMessage?.message] })] }), (status === 'failed' || status === 'success') && (_jsx(AlertDialog.Footer, { children: _jsx(AlertDialog.Context, { children: (api) => (_jsx(Button, { onClick: () => {
|
|
156
161
|
api.setOpen(false);
|
|
157
162
|
}, children: status === 'failed' ? 'Try Again' : 'Ok' })) }) }))] }) })] }) })] }));
|
|
158
163
|
}
|