import moment from 'moment'; import { useEffect, useState } from 'react'; import { useStore } from '@/shared/model/store'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { EscrowList } from '@/entities/transaction/ui/escrow-list'; import { TransactionCategory, EscrowDeliveryStatus, EscrowSearchType, EscrowSettlementStatus, ListItemProps, EscrowListParams, EscrowListResponse } from '@/entities/transaction/model/types'; import { useEscrowListMutation } from '@/entities/transaction/api/use-escrow-list-mutation'; import { useDownloadExcelMutation } from '@/entities/transaction/api/use-download-excel-mutation'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { EscrowFilter } from '@/entities/transaction/ui/filter/escrow-filter'; import { EscrowDeliveryStatusBtnGroup } from '@/entities/transaction/model/contant'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { SortTypeKeys, HeaderType, DefaultRequestPagination } from '@/entities/common/model/types'; import { useSetOnBack, useSetHeaderTitle, useSetHeaderType, useSetFooterMode } from '@/widgets/sub-layout/use-sub-layout'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; export const EscrowListPage = () => { const { navigate } = useNavigate(); const userInfo = useStore((state) => state.UserStore.userInfo); 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 [searchType, setSearchType] = useState(EscrowSearchType.ALL); const [searchKeyword, setSearchKeyword] = useState(''); const [startDate, setStartDate] = useState(moment().subtract(1, 'month').format('YYYYMMDD')); // const [startDate, setStartDate] = useState(moment().format('YYYYMMDD')); const [endDate, setEndDate] = useState(moment().format('YYYYMMDD')); const [deliveryStatus, setDeliveryStatus] = useState(EscrowDeliveryStatus.ALL); const [settlementStatus, setSettlementStatus] = useState(EscrowSettlementStatus.ALL); const [minAmount, setMinAmount] = useState(); const [maxAmount, setMaxAmount] = useState(); const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); useSetHeaderTitle('에스크로'); useSetHeaderType(HeaderType.LeftArrow); useSetOnBack(() => { navigate(PATHS.home); }); useSetFooterMode(false); const { mutateAsync: escrowList } = useEscrowListMutation(); const { mutateAsync: downloadExcel } = useDownloadExcelMutation(); const callList = (option?: { sortType?: SortTypeKeys, val?: string }) => { let newMinAmount = minAmount; if(!!minAmount && typeof(minAmount) === 'string'){ newMinAmount = parseInt(minAmount); } let newMaxAmount = maxAmount; if(!!maxAmount && typeof(maxAmount) === 'string'){ newMaxAmount = parseInt(maxAmount); } let listParams: EscrowListParams = { mid: mid, searchType: 'ORDER_NUMBER', searchKeyword: searchKeyword, startDate: startDate, endDate: endDate, deliveryStatus: deliveryStatus, settlementStatus: settlementStatus, minAmount: newMinAmount, maxAmount: newMaxAmount, page: pageParam }; if(listParams.page){ listParams.page.sortType = option?.sortType || sortType; setPageParam(listParams.page); } escrowList(listParams).then((rs: EscrowListResponse) => { setListItems(rs.content); }); }; const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const onClickToDownloadExcel = () => { setEmailBottomSheetOn(true); }; const onRequestDownloadExcel = (userEmail?: string) => { // tid??? 확인 필요 /* downloadExcel({ // tid: tid }).then((rs) => { }); */ }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); callList({ sortType: sort }); }; const onClickToDeliveryStatus = (val: EscrowDeliveryStatus) => { setDeliveryStatus(val); callList({ val: val }); }; useEffect(() => { callList(); }, []); useEffect(() => { callList(); }, [ mid, searchType, searchKeyword, startDate, endDate, deliveryStatus, settlementStatus, minAmount, maxAmount ]); return ( <>
{ EscrowDeliveryStatusBtnGroup.map((value, index) => ( onClickToDeliveryStatus(value.value) } >{ value.name } )) }
{ !!emailBottomSheetOn && } ); };