import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { DefaultRequestPagination, HeaderType, SortTypeKeys } from '@/entities/common/model/types'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { useExtensionPayoutListMutation } from '@/entities/additional-service/api/payout/use-extension-payout-list-mutation'; import { ExtensionPayoutExcelParams, ExtensionPayoutExcelResponse, ExtensionPayoutListParams, ExtensionPayoutListResponse, PayoutContent, PayoutDisbursementStatus, PayoutSearchDateType } from '@/entities/additional-service/model/payout/types'; import { JSX, useEffect, useState } from 'react'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import moment from 'moment'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { useExtensionPayoutExcelMutation } from '@/entities/additional-service/api/payout/use-extension-payout-excel-mutation'; import { PayoutFilter } from '@/entities/additional-service/ui/filter/payout-filter'; import { PayoutDisbursementStatusBtnGroup } from '@/entities/additional-service/model/payout/constant'; import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { useStore } from '@/shared/model/store'; export const PayoutListPage = () => { const { navigate } = useNavigate(); const userMid = useStore.getState().UserStore.mid; 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 [searchDateType, setSearchDateType] = useState(PayoutSearchDateType.REQUEST_DATE); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [status, setStatus] = useState(PayoutDisbursementStatus.ALL); const [minAmount, setMinAmount] = useState(0); const [maxAmount, setMaxAmount] = useState(50000000); const { mutateAsync: extensionPayoutList } = useExtensionPayoutListMutation(); const { mutateAsync: extensionPayoutExcel } = useExtensionPayoutExcelMutation(); useSetHeaderTitle('지급대행'); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); useSetOnBack(() => { navigate(PATHS.home); }); const onClickToNavigation = () => { navigate(PATHS.additionalService.payout.request); }; const callExtensionPayoutList = (option?: { sortType?: SortTypeKeys, status?: PayoutDisbursementStatus }) => { let newMinAmount = minAmount; if(!!minAmount && typeof(minAmount) === 'string'){ newMinAmount = parseInt(minAmount); } let newMaxAmount = maxAmount; if(!!maxAmount && typeof(maxAmount) === 'string'){ newMaxAmount = parseInt(maxAmount); } let params: ExtensionPayoutListParams = { mid: mid, searchDateType: searchDateType, fromDate: fromDate, toDate: toDate, status: option?.status ?? status, minAmount: newMinAmount, maxAmount: newMaxAmount, page: pageParam }; if(params.page){ params.page.sortType = option?.sortType || sortType; setPageParam(params.page); } extensionPayoutList(params).then((rs: ExtensionPayoutListResponse) => { setListItems(rs.content); }); }; const callDownloadExcel = () => { let params: ExtensionPayoutExcelParams = { mid: mid, searchDateType: searchDateType, fromDate: fromDate, toDate: toDate, status: status, minAmount: minAmount, maxAmount: maxAmount, }; extensionPayoutExcel(params).then((rs: ExtensionPayoutExcelResponse) => { }); }; const onClickToDownloadExcel = () => { callDownloadExcel(); }; const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); callExtensionPayoutList({ sortType: sort }); }; const onClickToDisbursementStatus = (val: PayoutDisbursementStatus) => { setStatus(val); callExtensionPayoutList({ status: val }); }; useEffect(() => { callExtensionPayoutList(); }, [ mid, searchDateType, fromDate, toDate, status, minAmount, maxAmount ]); const getListDateGroup = () => { let rs: JSX.Element[] = []; let date = ''; let list: PayoutContent[] = []; for (let i = 0; i < listItems.length; i++) { // requestDate 또는 settlementDate format: "20211018140420" (YYYYMMDDHHmmss) let itemDateStr = ''; if (searchDateType === PayoutSearchDateType.REQUEST_DATE) { itemDateStr = listItems[i]?.requestDate || ''; } else if (searchDateType === PayoutSearchDateType.SETTLEMENT_DATE) { itemDateStr = listItems[i]?.settlementDate || ''; } let itemDate = itemDateStr.substring(0, 8); if (i === 0) { date = itemDate; } if (date !== itemDate) { // 날짜가 바뀌면 이전 리스트를 푸시 (날짜 업데이트 전에!) if (list.length > 0) { rs.push( ); } date = itemDate; // 그 다음에 날짜 업데이트 list = []; } list.push(listItems[i] as any); } if (list.length > 0) { rs.push( ); } return rs; }; return ( <>
예치금 잔액 50,000,000
{ PayoutDisbursementStatusBtnGroup.map((value, index) => ( onClickToDisbursementStatus(value.value) } >{ value.name } )) }
{ getListDateGroup() }
); };