import { useEffect, useState } from "react"; import useSWR, { useSWRConfig } from "swr"; import { useAlertStore } from "@/shared/lib"; import { StatisticsInputStatusApi } from "@/entities/statistics/api/input/statistics-input-status-service"; import type { StatsInputStatusListRequestParams } from "@/entities/statistics/model/input/statistics-input-status-interface"; import type { StatsInputStatusListApiResponse } from "@/entities/statistics/model/input/statistics-input-status-interface"; import { LoadingWithAnimation } from "@common/components"; import ApproveButton from "@/components/button/ApproveButton"; import RejectButton from "@/components/button/RejectButton"; import DataGrid from "@/components/module/DataGrid"; import SearchForm from "@/components/module/SearchForm"; import type { SearchFormValues } from "@/components/type/SearchForm.type"; import { StatsInputStatusInpColumn } from "@/components/util/column/input/StatsInputStatusInpColumn"; import { toGridRows } from "@/components/util/grid/gridFunction"; import { useTabStore } from "@/store/tab-store"; const getStatsInputStatusFetcher = async ( key: [string, StatsInputStatusListRequestParams], ): Promise => { return StatisticsInputStatusApi.getStatisticsInputStatusList(key[1]); }; // 하수도 통계 관리 > 00. 통계 입력 현황 const StatsInputStatusInp = () => { const { setMessage: alert } = useAlertStore((state) => state); const activeTabId = useTabStore((state) => state.activeTabId); const [rowData, setRowData] = useState[]>( [], ); const [searchParams, setSearchParams] = useState(null); const swrKey = searchParams ? (["stats-input-status", searchParams] as const) : null; const { mutate } = useSWRConfig(); const { isLoading } = useSWR( swrKey, getStatsInputStatusFetcher, { revalidateOnFocus: true, onSuccess: (data) => { if (data.status === "success" && data.data) { setRowData(toGridRows(data.data)); } else { alert(data.message ?? "조회에 실패했습니다."); } }, onError: () => { alert("데이터 조회 중 오류가 발생했습니다."); setRowData([]); }, }, ); useEffect(() => { if (activeTabId === "StatsInputStatusInp" && swrKey) { mutate(swrKey); } }, [activeTabId]); const handleSearch = (values: SearchFormValues) => { if (values.sido === "" || values.sido === "ALL") { alert("시도를 선택해주세요."); return; } const params: StatsInputStatusListRequestParams = { ctpvNm: values.sido, sewerBzmnCd: values.bsnmCd, sggNm: values.gugun === "ALL" ? "" : values.gugun, statsYr: values.year ?? "", }; setSearchParams(params); mutate(["stats-input-status", params]); }; const handleReset = () => { setSearchParams(null); setRowData([]); }; const rejectFunc = () => { // 보완 요청 로직 }; const approveFunc = () => { // 승인 요청 로직 }; return ( <>
{isLoading && (
)}
); }; export default StatsInputStatusInp;