import moment from 'moment'; import { AdditionalServiceCategory, ProcessResult } from '@/entities/additional-service/model/types'; import { DefaultRequestPagination, HeaderType, SortTypeKeys } from '@/entities/common/model/types'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { JSX, useEffect, useState } from 'react'; import { useStore } from '@/shared/model/store'; import { PATHS } from '@/shared/constants/paths'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { FaceAuthFilter } from '@/entities/additional-service/ui/face-auth/filter/face-auth-filter'; import { ExtensionFaceAuthExcelDownlaodPrams, ExtensionFaceAuthExcelDownlaodResponse, ExtensionFaceAuthListParams, ExtensionFaceAuthListResponse, FaceAuthListItem, FaceAuthResult, FaceAuthTransType } from '@/entities/additional-service/model/face-auth/types'; import { AuthResultBtnGroup } from '@/entities/additional-service/model/face-auth/constant'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import { useExtensionFaceAuthListtMutation } from '@/entities/additional-service/api/face-auth/use-extension-face-auth-list-mutation'; import { useExtensionFaceAuthDownloadExcelMutation } from '@/entities/additional-service/api/face-auth/use-extension-face-auth-download-excel-mutation'; import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { useExtensionAccessCheck } from '@/shared/lib/hooks/use-extension-access-check'; import useIntersectionObserver from '@/widgets/intersection-observer'; import { useTranslation } from 'react-i18next'; export const FaceAuthPage = () => { const { navigate } = useNavigate(); const { t } = useTranslation(); const userMid = useStore.getState().UserStore.mid; let recentCursor: null | string = null; // 권한 체크 const { hasAccess, AccessDeniedDialog } = useExtensionAccessCheck({ extensionCode: 'FACE_AUTH' }); 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 [userMallId, setUserMallId] = useState(''); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [transType, setTransType] = useState(FaceAuthTransType.ALL); const [authResult, setAuthResult] = useState(FaceAuthResult.ALL); const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); useSetHeaderTitle(t('faceAuth.title')); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); useSetOnBack(() => { navigate(PATHS.home); }); const { mutateAsync: faceAuthHistoryList } = useExtensionFaceAuthListtMutation(); const { mutateAsync: downloadExcel } = useExtensionFaceAuthDownloadExcelMutation(); 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) => { let listParams: ExtensionFaceAuthListParams = { mid: mid, userMallId: userMallId, fromDate: fromDate, toDate: toDate, transType: transType, authResult: authResult, page: { ...pageParam, ...{ sortType: sortType } } }; if(type !== 'page' && listParams.page){ listParams.page.cursor = null; } faceAuthHistoryList(listParams).then((rs: ExtensionFaceAuthListResponse) => { 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 ); }); }; const onClickToOpenEmailBottomSheet = () => { setEmailBottomSheetOn(true); }; const onSendRequest = (selectedEmail?: string) => { if(selectedEmail){ const params: ExtensionFaceAuthExcelDownlaodPrams = { mid: "faceauth0m", email: selectedEmail, fromDate: fromDate, toDate: toDate }; downloadExcel(params).then((rs: ExtensionFaceAuthExcelDownlaodResponse) => { console.log('Excel Download Status:', rs.status); }); } setEmailBottomSheetOn(false); }; const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); }; const onClickToAuthResult = (val: FaceAuthResult) => { setAuthResult(val); }; const getListDateGroup = () => { let rs = []; let date = ''; let list = []; for(let i = 0; i < listItems.length; i++){ let item = listItems[i]; if(!!item){ let requestDate = item?.requestDate; requestDate = requestDate?.substring(0, 8); if(!!requestDate){ if(i === 0){ date = requestDate; } if(date !== requestDate){ if(list.length > 0){ rs.push( ); } date = requestDate; list = []; } list.push(item); } } } if(list.length > 0){ rs.push( ); } return rs; }; useEffect(() => { callList(); }, [ mid, userMallId, fromDate, toDate, transType, authResult, sortType ]); if (!hasAccess) { return ; } return ( <>
{ AuthResultBtnGroup.map((value, index) => ( onClickToAuthResult(value.value)} >{value.name} )) }
{ getListDateGroup() }
); };