From 37ac927c4550cdeba475bbebbee9ec3671b3e8ca Mon Sep 17 00:00:00 2001 From: bicochan Date: Fri, 28 Aug 2026 17:05:40 +0900 Subject: [PATCH] =?UTF-8?q?[st]=20feat:=20=EC=8B=9C=EA=B3=84=EC=97=B4=20?= =?UTF-8?q?=EA=B2=80=ED=86=A0=20=EC=9D=B4=EB=A0=A5=20>=20=EC=A7=80?= =?UTF-8?q?=EC=9E=90=EC=B2=B4=20=EC=A7=84=EC=9E=85=20=EC=8B=9C=20=EC=8B=9C?= =?UTF-8?q?=EB=8F=84/=EC=8B=9C=EA=B5=B0=EA=B5=AC=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../verification/ImrVerificationHistory.tsx | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx index 3470a62d6..a160cb203 100644 --- a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx +++ b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx @@ -1,6 +1,7 @@ "use client"; -import { useEffect, useMemo, useState } from "react"; +import type { Dispatch, SetStateAction } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { Line } from "react-chartjs-2"; import { keepPreviousData, useQuery } from "@tanstack/react-query"; @@ -97,6 +98,21 @@ function getVerificationYearOptions(): string[] { ); } +function applySingleOptionRegionDefault( + list: T[] | undefined, + setValue: Dispatch>, + resolveValue: (item: T) => string, +) { + if (!list || list.length !== 1) return; + + const onlyItem = list[0]; + if (!onlyItem) return; + + setValue((prev) => + prev === REGION_ALL_VALUE ? resolveValue(onlyItem) : prev, + ); +} + const ImrVerificationHistory = () => { const yearOptions = useMemo(() => getVerificationYearOptions(), []); const defaultYear: string = @@ -106,7 +122,8 @@ const ImrVerificationHistory = () => { // Area A Search States const [searchSido, setSearchSido] = useState(REGION_ALL_VALUE); - const [searchSigungu, setSearchSigungu] = useState(REGION_ALL_VALUE); + const [searchSigungu, setSearchSigungu] = + useState(REGION_ALL_VALUE); const [searchStatsYr, setSearchStatsYr] = useState(defaultYear); const [searchStatsCd, setSearchStatsCd] = useState(""); const [dateRange, setDateRange] = useState({ @@ -151,6 +168,28 @@ const ImrVerificationHistory = () => { gugunSkipYn: doList.includes(selectedSidoBsnmCd) ? "N" : "Y", }); const sigunguOptions = sigunguData ?? []; + const allowRegionAutoDefaultRef = useRef(true); + + useEffect(() => { + if (!allowRegionAutoDefaultRef.current) return; + + applySingleOptionRegionDefault( + sidoData?.sidoList, + setSearchSido, + (item) => item.sido, + ); + }, [sidoData?.sidoList]); + + useEffect(() => { + if (!allowRegionAutoDefaultRef.current) return; + if (searchSido === REGION_ALL_VALUE) return; + + applySingleOptionRegionDefault( + sigunguData, + setSearchSigungu, + (item) => item.gugun, + ); + }, [sigunguData, searchSido]); const imrDetailColumnInfo = useMemo( () => getImrDetailGridColumnInfo(selectedHistory?.statsCd ?? ""), @@ -272,6 +311,7 @@ const ImrVerificationHistory = () => { }; const handleReset = () => { + allowRegionAutoDefaultRef.current = false; setSearchSido(REGION_ALL_VALUE); setSearchSigungu(REGION_ALL_VALUE); setSearchStatsCd("");