import { useState, Fragment, useRef } from 'react'; import { useRecoilValue } from 'recoil'; import { useTranslation } from 'react-i18next'; import 'react-datepicker/dist/react-datepicker.css'; import { BuildingView, LandAuctionDelete, LandAuctionDetailView, LandView, } from '../../apis'; import { authList } from '../../store/authList'; import { authType, modalTypes, landAuctionStatusType, landAuctionStatus, landSize, caliumStatus, commonStatus, } from '../../assets/data'; import { Title, FormWrapper, TableStyle, TableWrapper} from '../../styles/Components'; import { CheckBox, Button, DynamicModal, Pagination, ViewTableInfo, ExcelDownButton, } from '../../components/common'; import { convertKTC, timeDiffMinute } from '../../utils'; import { LandAuctionModal, LandAuctionSearchBar } from '../../components/ServiceManage'; import { INITIAL_PAGE_SIZE, INITIAL_PAGE_LIMIT } from '../../assets/data/adminConstants'; import { useDataFetch, useModal, useTable, withAuth } from '../../utils/hook'; import { useLandAuctionSearch } from '../../components/ServiceManage/searchBar/LandAuctionSearchBar'; import { StatusWapper, ChargeBtn, StatusLabel } from '../../styles/ModuleComponents'; const LandAuction = () => { const token = sessionStorage.getItem('token'); const userInfo = useRecoilValue(authList); const { t } = useTranslation(); const tableRef = useRef(null); const [detailData, setDetailData] = useState({}); const { modalState, handleModalView, handleModalClose } = useModal({ detail: 'hidden', deleteConfirm: 'hidden', deleteComplete: 'hidden' }); const [alertMsg, setAlertMsg] = useState(''); const [modalType, setModalType] = useState('regist'); const { searchParams, data: dataList, handleSearch, handleReset, handlePageChange, handlePageSizeChange, handleOrderByChange, updateSearchParams } = useLandAuctionSearch(token, INITIAL_PAGE_SIZE); const { selectedRows, handleSelectRow, isRowSelected } = useTable(dataList?.auction_list || [], {mode: 'single'}); const { data: landData } = useDataFetch(() => LandView(token), [token]); const { data: buildingData } = useDataFetch(() => BuildingView(token), [token]); const handleModalSubmit = async (type, param = null) => { switch (type) { case "regist": setModalType('regist'); handleModalView('detail'); break; case "detail": await LandAuctionDetailView(token, param).then(data => { setDetailData(data.auction_detail); setModalType('modify'); handleModalView('detail'); }); break; case "delete": const date_check = selectedRows.every(row => { const timeDiff = timeDiffMinute(convertKTC(row.auction_start_dt), (new Date)); return timeDiff < 3; }); if(date_check){ setAlertMsg(t('LAND_AUCTION_DELETE_DATE_WARNING')); return; } if(selectedRows[0].status === landAuctionStatusType.auction_start || selectedRows[0].status === landAuctionStatusType.stl_end){ setAlertMsg(t('LAND_AUCTION_DELETE_STATUS_WARNING')); return; } handleModalView('deleteConfirm'); break; case "deleteConfirm": let list = []; let isChecked = false; selectedRows.map(data => { // const row = dataList.list.find(row => row.id === Number(data.id)); // if(row.status !== commonStatus.wait) isChecked = true; list.push({ id: data.id, }); }); if(isChecked) { setAlertMsg(t('LAND_AUCTION_WARNING_DELETE')) handleModalClose('deleteConfirm'); return; } await LandAuctionDelete(token, list).then(data => { handleModalClose('deleteConfirm'); if(data.result === "SUCCESS") { handleModalView('deleteComplete'); }else if(data.result === "ERROR_AUCTION_STATUS_IMPOSSIBLE"){ setAlertMsg(t('LAND_AUCTION_ERROR_DELETE_STATUS')); }else{ setAlertMsg(t('DELETE_FAIL')); } }).catch(reason => { setAlertMsg(t('API_FAIL')); }); break; case "deleteComplete": handleModalClose('deleteComplete'); window.location.reload(); break; case "warning": setAlertMsg('') break; } } return ( <> 랜드 경매 관리 { if (executeSearch) { handleSearch(newParams); } else { updateSearchParams(newParams); } }} onReset={handleReset} /> {userInfo.auth_list?.some(auth => auth.id === authType.landAuctionDelete) && (