import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { DefaultRequestPagination, HeaderType, SortTypeKeys } from '@/entities/common/model/types'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { JSX, useEffect, useState } from 'react'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { ArsListContent, ExtensionArsDownloadExcelParams, ExtensionArsDownloadExcelResponse, ExtensionArsListParams, ExtensionArsListResponse, OrderStatus, PaymentStatus } from '@/entities/additional-service/model/ars/types'; import { useExtensionArsListMutation } from '@/entities/additional-service/api/ars/use-extension-ars-list-mutation'; import moment from 'moment'; import { useExtensionArsDownloadExcelMutation } from '@/entities/additional-service/api/ars/use-extension-ars-download-excel-mutation'; import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { ArsPaymentStatusBtnGroup } from '@/entities/additional-service/model/ars/constant'; import { ArsFilter } from '@/entities/additional-service/ui/filter/ars-filter'; import { useStore } from '@/shared/model/store'; export const ArsListPage = () => { 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 [moid, setMoid] = useState(''); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [paymentStatus, setPaymentStatus] = useState(PaymentStatus.ALL); const [orderStatus, setOrderStatus] = useState(OrderStatus.ALL); const [minAmount, setMinAmount] = useState(); const [maxAmount, setMaxAmount] = useState(); const { mutateAsync: extensionArsList } = useExtensionArsListMutation(); const { mutateAsync: extensionArsDownloadExcel } = useExtensionArsDownloadExcelMutation(); useSetHeaderTitle('신용카드 ARS 결제'); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); useSetOnBack(() => { navigate(PATHS.home); }); const callList = (option?: { sortType?: SortTypeKeys, paymentStatus?: PaymentStatus }) => { let params: ExtensionArsListParams = { mid: mid, moid: moid, fromDate: fromDate, toDate: toDate, paymentStatus: option?.paymentStatus ?? paymentStatus, orderStatus: orderStatus, minAmount: minAmount, maxAmount: maxAmount, page: pageParam }; if (params.page) { params.page.sortType = option?.sortType || sortType; setPageParam(params.page); } extensionArsList(params).then((rs: ExtensionArsListResponse) => { setListItems(rs.content); }); }; const callDownloadExcel = () => { let params: ExtensionArsDownloadExcelParams = { mid: mid, moid: moid, fromDate: fromDate, toDate: toDate, paymentStatus: paymentStatus, orderStatus: orderStatus, minAmount: minAmount, maxAmount: maxAmount, }; extensionArsDownloadExcel(params).then((rs: ExtensionArsDownloadExcelResponse) => { }); }; const onClickToNavigate = () => { navigate(PATHS.additionalService.ars.request, { state: { mid } }); }; const onClickToDownloadExcel = () => { callDownloadExcel(); }; const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); callList({ sortType: sort }); }; const onClickToPaymentStatus = (val: PaymentStatus) => { setPaymentStatus(val); callList({ paymentStatus: val }); }; useEffect(() => { callList(); }, []); useEffect(() => { callList(); }, [ mid, moid, fromDate, toDate, paymentStatus, orderStatus, minAmount, maxAmount ]); const getListDateGroup = () => { let rs = []; let date = ''; let list = []; for (let i = 0; i < listItems.length; i++) { let item = listItems[i]; if (!!item) { let paymentDate = item?.paymentDate || ''; let itemDate = paymentDate.substring(0, 8); if (!!itemDate) { if (i === 0) { date = itemDate; } if (date !== itemDate) { date = itemDate; if (list.length > 0) { rs.push( ); } list = []; } list.push(item); } } } if (list.length > 0) { rs.push( ); } return rs; } return ( <>
{ ArsPaymentStatusBtnGroup.map((value, index) => ( onClickToPaymentStatus(value.value)} >{value.name} )) }
{getListDateGroup()}
); };