import { DefaultRequestPagination, SortTypeKeys } from '@/entities/common/model/types'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { JSX, useEffect, useState } from 'react'; import { ExtensionFundAccountBalanceParams, ExtensionFundAccountBalanceResponse, ExtensionFundAccountTransferExcelParams, ExtensionFundAccountTransferExcelResponse, ExtensionFundAccountTransferListParams, FundAccountSearchCl, FundAccountStatus, FundAccountTransferContentItem } from '../../model/fund-account/types'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import moment from 'moment'; import { useExtensionFundAccountTransferListMutation } from '../../api/fund-account/use-extension-fund-account-transfer-list-mutation'; import { ListDateGroup } from '../list-date-group'; import { AdditionalServiceCategory } from '../../model/types'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { useExtensionFundAccountTransferExcelMutation } from '../../api/fund-account/use-extension-fund-account-transfer-excel-mutation'; import { getFundAccountStatusBtnGroup } from '../../model/fund-account/constant'; import { useExtensionFundAccountBalanceMutation } from '../../api/fund-account/use-extension-fund-account-balance-mutation'; import { NumericFormat } from 'react-number-format'; import { FundAccountTransactionFilter } from '../filter/fund-account-trnasaction-filter'; import { PATHS } from '@/shared/constants/paths'; import { useStore } from '@/shared/model/store'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import useIntersectionObserver from '@/widgets/intersection-observer'; import { useTranslation } from 'react-i18next'; export const FundAccountTransferListWrap = () => { const { navigate } = useNavigate(); const { t } = useTranslation(); const userMid = useStore.getState().UserStore.mid; const [onActionIntersect, setOnActionIntersect] = useState(false); const [sortType, setSortType] = useState(SortTypeKeys.LATEST); const [listItems, setListItems] = useState>([]); const [filterOn, setFilterOn] = useState(false); const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); const [searchCl, setSearchCl] = useState(FundAccountSearchCl.ACCOUNT_NAME); const [searchValue, setSearchValue] = useState(''); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [status, setStatus] = useState(FundAccountStatus.ALL); const [bankCode, setBankCode] = useState(''); const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); const [balance, setBalance] = useState(0); const { mutateAsync: extensionFundAccountTransferList } = useExtensionFundAccountTransferListMutation(); const { mutateAsync: extensionFundAccountTransferExcel } = useExtensionFundAccountTransferExcelMutation(); const { mutateAsync: extensionFundAccountBalance } = useExtensionFundAccountBalanceMutation(); const onIntersect: IntersectionObserverCallback = (entries: Array) => { entries.forEach((entry: IntersectionObserverEntry) => { if(entry.isIntersecting){ if(onActionIntersect && !!pageParam.cursor){ setOnActionIntersect(false); callList('page'); } } }); }; const { setTarget } = useIntersectionObserver({ threshold: 1, onIntersect }); const callList = (type?: string) => { setOnActionIntersect(false); let listParams: ExtensionFundAccountTransferListParams = { mid: mid, searchCl: searchCl, searchValue: searchValue, bankCode: bankCode, fromDate: fromDate, toDate: toDate, resultStatus: status, page: { ...pageParam, ...{ sortType: sortType } } }; if(type !== 'page' && listParams.page){ listParams.page.cursor = null; } extensionFundAccountTransferList(listParams).then((rs: any) => { if(type === 'page'){ setListItems([ ...listItems, ...rs.content ]); } else{ setListItems(rs.content); } if(rs.hasNext && rs.nextCursor !== pageParam.cursor && rs.content.length === DEFAULT_PAGE_PARAM.size ){ setPageParam({ ...pageParam, ...{ cursor: rs.nextCursor } }); } else{ setPageParam({ ...pageParam, ...{ cursor: null } }); } setOnActionIntersect( !!rs.hasNext && rs.nextCursor !== pageParam.cursor && rs.content.length === DEFAULT_PAGE_PARAM.size ); }); callBalance(); }; const onClickToOpenEmailBottomSheet = () => { setEmailBottomSheetOn(true); }; const onSendRequest = (selectedEmail?: string) => { if (selectedEmail) { const params: ExtensionFundAccountTransferExcelParams = { mid: mid, email: selectedEmail, fromDate: fromDate, toDate: toDate, }; extensionFundAccountTransferExcel(params).then((rs: ExtensionFundAccountTransferExcelResponse) => { console.log('Excel Download Status:', rs.status); }); } setEmailBottomSheetOn(false); }; const callBalance = () => { let params: ExtensionFundAccountBalanceParams = { mid: mid }; extensionFundAccountBalance(params).then((rs: ExtensionFundAccountBalanceResponse) => { setBalance(rs.balance); }); }; const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); }; const onClickToStatus = (val: FundAccountStatus) => { setStatus(val); }; const getListDateGroup = () => { let rs = []; let date = ''; let list = []; for (let i = 0; i < listItems.length; i++) { let items = listItems[i]; if (!!items) { let registDate = items?.registDate; registDate = registDate?.substring(0, 8); if (!!registDate) { if (i === 0) { date = registDate; } if (date !== registDate) { if (list.length > 0) { rs.push( ); } date = registDate; list = []; } list.push(items); } } } if (list.length > 0) { rs.push( ); } return rs; }; useEffect(() => { callList(); }, [ mid, searchCl, searchValue, fromDate, toDate, bankCode, status, sortType ]); const onClickToNavigate = () => { navigate(PATHS.additionalService.fundAccount.transferRequest); }; return ( <>
잔액
이체 등록 후에는 별도 ‘이체요청'처리를 해야 이체가 실행됩니다. 미요청 시 이체 미진행.
{ getFundAccountStatusBtnGroup(t).map((value: any, index: number) => ( onClickToStatus(value.value)} >{value.name} )) }
{ getListDateGroup() }
); };