/* eslint-disable @typescript-eslint/no-explicit-any */ import React, { useEffect, useState } from "react"; import { Formik, Form } from "formik"; import * as Yup from "yup"; import InputFieldCustom from "../TextField/InputFieldCustom"; // import SelectField from "../TextField/ReactSelect"; import HourGlassLoader from "../Loader/Loader"; import { createCustomerBankDetail, getCustomerBankDetails, updateCustomerBankDetails, } from "../../Api/CustomerApi"; import { getMasterList } from "../../Api/MastersApi"; import { toast } from "react-toastify"; interface BankFormData { account_holder_name: string; account_number: string; confirm_account_number: string; bank_name: string; branch_name: string; country_id: string; swift_code: string; iban: string; ifsc_code: string; upi_code: string; is_primary: string; // "yes" or "no" } interface Option { id: string; name: string; } const validationSchema = Yup.object().shape({ account_holder_name: Yup.string().required("Account holder name is required"), account_number: Yup.string() .matches(/^[0-9]+$/, "Account number must be numeric") .required("Account number is required"), confirm_account_number: Yup.string() .oneOf([Yup.ref("account_number")], "Account numbers must match") .required("Please confirm account number"), bank_name: Yup.string().required("Bank name is required"), branch_name: Yup.string().optional(), country_id: Yup.string().optional(), swift_code: Yup.string().required("Swift code is required"), iban: Yup.string().required("IBAN is required"), ifsc_code: Yup.string().optional(), upi_code: Yup.string().optional(), is_primary: Yup.string().oneOf(["yes", "no"]), }); const AddBankDetailsModal: React.FC = ({ onHide, data }) => { const [isLoading, setIsLoading] = useState(false); const [isPrimaryAvailable, setIsPrimaryAvailable] = useState(false); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [countries, setCountries] = useState([]); const initialValues: BankFormData = { account_holder_name: data?.accountHolderName || "", account_number: data?.accountNumber || "", confirm_account_number: data?.accountNumber || "", bank_name: data?.bankName || "", branch_name: data?.branchName || "", country_id: data?.countryId || "", swift_code: data?.swiftCode || "", iban: data?.iban || "", ifsc_code: data?.ifscCode || "", upi_code: data?.upiCode || "", is_primary: data?.isPrimary ? "yes" : !isPrimaryAvailable ? "yes" : "no", }; useEffect(() => { const fetchInit = async () => { setIsLoading(true); try { const [primaryRes, countriesRes] = await Promise.all([ getCustomerBankDetails({ is_primary: true }), getMasterList("country"), ]); const primary = primaryRes?.data?.length > 0; setIsPrimaryAvailable(primary); setCountries(countriesRes?.data || []); } catch (err) { console.error("Initialization failed", err); } finally { setIsLoading(false); } }; fetchInit(); }, []); const handleSubmit = async (values: BankFormData) => { const payload = { ...values, is_primary: values.is_primary === "yes", country_id: Number(values.country_id), }; try { setIsLoading(true); const response = data?.id ? await updateCustomerBankDetails(data.id, payload) : await createCustomerBankDetail(payload); if (response?.status) { toast.success("Bank account details saved successfully."); onHide(); } else { toast.error(response.message || "Something went wrong."); } } catch (err) { console.error("Submission error", err); toast.error("Unexpected error occurred."); onHide(); } finally { setIsLoading(false); } }; return ( <> {isLoading && }
{({ values, handleChange, handleSubmit, setFieldValue, errors }) => (

{data?.id ? "Edit Bank Details" : "Add Bank Details"}

{/* */} {/* c.id === values.country_id) || null} onChange={(opt) => setFieldValue("country_id", opt?.id || "")} placeholder="Select Country" usageType={1} page="bank" name="country_id" icon="ri-earth-line" /> {touched.country_id && errors.country_id && (
{errors.country_id}
)} */} {/* */} {/* */}
)}
); }; export default AddBankDetailsModal;