import { useState, useEffect } from 'react'; import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { HeaderType } from '@/entities/common/model/types'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { useExtensionAccountHolderSearchRequestMutation } from '@/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-reqeust-mutation'; import { ExtensionAccountHolderSearchRequestParams } from '@/entities/additional-service/model/account-holder-search/types'; import { useStore } from '@/shared/model/store'; import { NumericFormat } from 'react-number-format'; import { snackBar } from '@/shared/lib'; import { useTranslation } from 'react-i18next'; export const AccountHolderSearchRequestPage = () => { const { navigate } = useNavigate(); const { t } = useTranslation(); const userMid = useStore.getState().UserStore.mid; const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids; const bankList = useStore.getState().CommonStore.bankList useSetHeaderTitle(t('additionalService.services.accountHolderSearch') + ' ' + t('common.request')); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); useSetOnBack(() => { navigate(PATHS.additionalService.accountHolderSearch.list); }); const { mutateAsync: accountHolderSearchRequest } = useExtensionAccountHolderSearchRequestMutation(); const [formData, setFormData] = useState({ mid: '', bankCode: '', accountNo: '' }) // MID 초기값 설정 useEffect(() => { if (!formData.mid && midOptionsWithoutGids.length > 0) { // userMid가 옵션에 있으면 userMid 사용, 없으면 첫 번째 옵션 사용 const midItem = midOptionsWithoutGids.filter((value) => value.value === userMid); const initialMid = (midItem.length > 0) ? userMid : midOptionsWithoutGids[0]?.value || ''; if (initialMid) { setFormData({ ...formData, mid: initialMid }); } } }, [midOptionsWithoutGids, userMid]); const handleInputChange = (field: string, value: string) => { setFormData({ ...formData, [field]: value }); }; const onClickToRequest = () => { const reuqestParams: ExtensionAccountHolderSearchRequestParams = { mid: formData.mid, bankCode: formData.bankCode, accountNo: formData.accountNo } console.log("Account holder search request params: ", reuqestParams); accountHolderSearchRequest(reuqestParams) .then((response) => { if (response.status) { console.log("Account holder search request success: ", response.status) snackBar(t('common.requestSuccess')) navigate(PATHS.additionalService.accountHolderSearch.list); } else { const errorMessage = response.error?.message || t('common.requestFailed'); snackBar(`[${t('common.failed')}] ${errorMessage}`); } }) .catch((error) => { console.error("Account holder search request failed: ", error) const errorMessage = error?.response?.data?.error?.message || error?.message || t('common.errorOccurred'); snackBar(`[${t('common.failed')}] ${errorMessage}`); }) }; const isFormValid = () => { return ( formData.mid.trim() !== '' && formData.bankCode.trim() !== '' && formData.accountNo.trim() !== '' ) } return ( <>
{t('filter.merchant')}
{t('transaction.fields.bank')}
{t('transaction.fields.accountNo')}
{ const { value } = values; return !value || value.length <= 14; }} onValueChange={(values) => { setFormData({ ...formData, accountNo: values.value }); }} />
) }