From d98003b3ec418638ff907b535144cafba14f47a2 Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 28 Apr 2026 15:13:54 +0900 Subject: [PATCH] =?UTF-8?q?[st]=20feat:=20=ED=86=B5=EA=B3=84=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A6=AC=ED=8F=AC=ED=8A=B8=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatisticsVerificationReport.tsx | 113 +++++++++++------- .../st/src/entities/statistics/api/queries.ts | 41 +++---- .../model/general-verification-interface.ts | 3 +- .../statistics-input-status-interface.ts | 1 + 4 files changed, 92 insertions(+), 66 deletions(-) diff --git a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx index 896ee061c..6cd57b4f1 100644 --- a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx +++ b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx @@ -129,6 +129,7 @@ const DEFAULT_FILTERS: StatisticsVerificationFilterState = { statsYr: String(dayjs().year() - 1), sewerBzmnCd: null, statsCd: null, + laeSbmsnSttsCd: "2", }; const DEFAULT_SUB_FILTERS: StatisticsVerificationSubFilterState = { @@ -156,15 +157,6 @@ function StatisticsVerificationReport() { useState(DEFAULT_FILTERS); const [subFilters, setSubFilters] = useState(DEFAULT_SUB_FILTERS); - const [submittedFilters, setSubmittedFilters] = - useState(DEFAULT_FILTERS); - const [submittedParams, setSubmittedParams] = useState<{ - main: StatisticsVerificationFilterState; - sub: StatisticsVerificationSubFilterState; - }>({ - main: DEFAULT_FILTERS, - sub: DEFAULT_SUB_FILTERS, - }); const [selectedReportRows, setSelectedReportRows] = useState< StatsInputStatusList[] >([]); @@ -182,11 +174,30 @@ function StatisticsVerificationReport() { const { data: sigunguData } = useStAnlsSigunguCombo( filters.sewerBzmnCd ?? "", ); + const detailParams = useMemo( + () => ({ + statsYr: filters.statsYr, + ctpvNm: + subFilters.ctpvNm !== "" ? subFilters.ctpvNm : filters.ctpvNm, + sggNm: subFilters.sggNm !== "" ? subFilters.sggNm : filters.sggNm, + sewerBzmnCd: + subFilters.sewerBzmnCd !== "" + ? subFilters.sewerBzmnCd + : filters.sewerBzmnCd, + statsCd: + subFilters.statsCd !== "" + ? subFilters.statsCd + : filters.statsCd, + prcsYnList: subFilters.prcsYnList, + pbcpAprvYn: subFilters.pbcpAprvYn, + laeSbmsnSttsCd: subFilters.laeSbmsnSttsCd, + }), + [filters, subFilters], + ); - const statisticsVerificationReportQuery = - useStatsVrfcRptData(submittedFilters); + const statisticsVerificationReportQuery = useStatsVrfcRptData(filters); const statisticsVerificationResultQuery = - useStatsVrfcRsltData(submittedParams); + useStatsVrfcRsltData(detailParams); const statisticsVerificationReportData = statisticsVerificationReportQuery.data ?? []; @@ -253,11 +264,17 @@ function StatisticsVerificationReport() { const nextRows = statisticsVerificationResultGridRows; const prevLength = prevLengthRef.current; - if (!dataProvider || nextRows.length === 0) { + if (!dataProvider) { prevLengthRef.current = nextRows.length; return; } + if (nextRows.length === 0) { + dataProvider.setRows?.([]); + prevLengthRef.current = 0; + return; + } + if (nextRows.length > prevLength && prevLength > 0) { // 무한스크롤 시 데이터 처리 const newRows = nextRows.slice(prevLength); @@ -327,17 +344,16 @@ function StatisticsVerificationReport() { statisticsVerificationReportQuery.isError, ]); - function handleSearch( - nextFilters: StatisticsVerificationFilterState, - nextSubFilters: StatisticsVerificationSubFilterState, - ) { - setSelectedReportRows([]); + function resetResultState() { setSelectedResultRows([]); - setSubmittedFilters({ ...nextFilters }); - setSubmittedParams({ - main: { ...nextFilters }, - sub: { ...nextSubFilters }, - }); + editedResultRowMapRef.current = new Map(); + prevLengthRef.current = 0; + resultGridRef.current?.dataProvider?.setRows?.([]); + } + + function resetReportState() { + setSelectedReportRows([]); + resetResultState(); } async function handleLoadMoreDetail() { @@ -350,14 +366,6 @@ function StatisticsVerificationReport() { } } - function handleResultSearch() { - setSelectedResultRows([]); - setSubmittedParams({ - main: { ...filters }, - sub: { ...subFilters }, - }); - } - function handleFilterChange< K extends keyof StatisticsVerificationFilterState, >(key: K) { @@ -365,6 +373,7 @@ function StatisticsVerificationReport() { value?: StatisticsVerificationFilterState[K], optionData?: { label: string; value: string }, ) => { + resetReportState(); if (key === "sewerBzmnCd") { setFilters((prev) => ({ ...prev, @@ -372,8 +381,17 @@ function StatisticsVerificationReport() { sewerBzmnCd: optionData?.value, sggNm: "", })); + setSubFilters((prev) => ({ + ...prev, + ctpvNm: "", + sggNm: "", + sewerBzmnCd: "", + })); return; } + if (key === "statsCd") { + setSubFilters((prev) => ({ ...prev, statsCd: "" })); + } setFilters((prev) => ({ ...prev, [key]: value })); }; } @@ -382,10 +400,16 @@ function StatisticsVerificationReport() { K extends keyof StatisticsVerificationSubFilterState, >(key: K) { return (value?: StatisticsVerificationSubFilterState[K]) => { + resetResultState(); setSubFilters((prev) => ({ ...prev, [key]: value })); }; } + function handleSubFilterReset() { + setSubFilters(DEFAULT_SUB_FILTERS); + resetResultState(); + } + function handleCellEdited(params: CellEditedCallbackParams) { const { itemIndex, fieldName, newValue } = params; const dataProvider = resultGridRef.current?.dataProvider as @@ -403,11 +427,7 @@ function StatisticsVerificationReport() { function handleReset() { setFilters(DEFAULT_FILTERS); setSubFilters(DEFAULT_SUB_FILTERS); - setSelectedReportRows([]); - setSelectedResultRows([]); - editedResultRowMapRef.current = new Map(); - prevLengthRef.current = 0; - handleSearch(DEFAULT_FILTERS, DEFAULT_SUB_FILTERS); + resetReportState(); } function handleApprove() { @@ -532,9 +552,6 @@ function StatisticsVerificationReport() { - +