Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 10x 10x 10x 10x 10x 10x 10x 10x | import { useRef } from "react";
import { AxiosError } from "axios";
import { showMessage } from "@common/Toast";
import { useBankAccountMutations } from "@hooks/onboarding/useAddOnboardingBankAccounts";
import {
QKEY_GET_MERCHANT_BY_ID,
QKEY_LIST_ALL_BANK_ACCOUNTS,
} from "@constants/queryKeys";
import { MERCHANT_SIDE_PANEL_PREVIEW_API_KEYS } from "@features/Merchants/MerchantSidePanel/constants";
import { useQueryClient } from "react-query";
import { isFunction } from "lodash";
import { isNormalizedInput } from "./utils";
import {
BankAccountDetailsForm,
IBusinessBankAccountConnectFormValues,
} from "@features/GiveOnboarding/types/form";
export const useBankAccountConnect = ({
merchantId,
firstAccount,
}: {
merchantId: number;
firstAccount?: BankAccountDetailsForm;
}) => {
const queryClient = useQueryClient();
const isForceError = useRef<boolean>(false);
const defaultValues = {
name: firstAccount?.name || "",
type: firstAccount?.type?.toLowerCase() || "checking",
routingNumber: firstAccount?.routingNumber || "",
accountNumber: firstAccount?.accountNumber ?? "",
notes: firstAccount?.notes || "",
};
const { create, update } = useBankAccountMutations(
firstAccount?.bankDataAux.id,
);
const backLink = () => {
queryClient.removeQueries(
MERCHANT_SIDE_PANEL_PREVIEW_API_KEYS.GET_BANK_FILES,
);
queryClient.invalidateQueries(QKEY_LIST_ALL_BANK_ACCOUNTS);
queryClient.invalidateQueries([QKEY_GET_MERCHANT_BY_ID, merchantId]);
queryClient.invalidateQueries([
MERCHANT_SIDE_PANEL_PREVIEW_API_KEYS.GET_BANK_ACCOUNTS,
merchantId,
]);
};
const onSubmitInformation = async (
data: { data: IBusinessBankAccountConnectFormValues; dirtyFields: any },
onSuccess?: (data: any, apiData: any) => void,
onError?: (error: any) => void,
) => {
const bankData = data?.data;
const customData = {
routingNumber: bankData.routingNumber,
...(firstAccount?.bankDataAux.status !== "approved" && {
name: bankData.name,
type: bankData.type,
...(isNormalizedInput(bankData.accountNumber) && {
number: bankData.accountNumber,
}),
}),
notes: bankData.notes,
status:
firstAccount?.bankDataAux.status === "approved"
? "approved"
: "pending_review",
...(firstAccount ? {} : { isDefault: true }),
};
if (isForceError.current) return;
const mutation = firstAccount?.bankDataAux.id ? update : create;
return (
!isForceError.current &&
mutation.mutate(
{ params: customData },
{
onSuccess: (apiData) => {
backLink();
isFunction(onSuccess) && onSuccess(data, apiData);
},
onError: (err: unknown) => {
const axiosError = err as AxiosError;
const errorMessage =
(axiosError.response?.data as any)?.message ||
"Whoops.. an error occured. Please try again";
showMessage("Error", errorMessage);
isFunction(onError) && onError(err);
},
},
)
);
};
return {
onSubmitInformation,
isForceError,
defaultValues,
};
};
|