From 87cda451f3e2cf24b9c092f36c5d3d1b0d87f5af Mon Sep 17 00:00:00 2001 From: kiminchan Date: Mon, 29 Jun 2026 17:08:31 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=80=EB=B0=98=EC=B9=A8=ED=95=98=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=ED=8C=A8=EB=84=90=20=EC=97=B0=EB=8F=84?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20UI=20=EB=B0=8F=20=EC=9A=B0=EC=B8=A1=20?= =?UTF-8?q?=ED=83=AD=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sinkhole/SinkholeLayerSettingPanel.tsx | 88 +++++++++++-------- apps/sn/app/(map-layout)/map/page.tsx | 2 +- .../001-fe-SFR-010-010-지반침하정보-통합구현기록.md | 17 ++++ 3 files changed, 67 insertions(+), 40 deletions(-) diff --git a/apps/sn/app/(map-layout)/map/components/sinkhole/SinkholeLayerSettingPanel.tsx b/apps/sn/app/(map-layout)/map/components/sinkhole/SinkholeLayerSettingPanel.tsx index 0c60d535a..b2935032a 100644 --- a/apps/sn/app/(map-layout)/map/components/sinkhole/SinkholeLayerSettingPanel.tsx +++ b/apps/sn/app/(map-layout)/map/components/sinkhole/SinkholeLayerSettingPanel.tsx @@ -1,8 +1,10 @@ "use client"; import { useEffect, useState } from "react"; +import { SelectBox } from "@common/business_components/ui"; import { normalizeSinkholeYearRange, + SINKHOLE_MIN_SEARCH_YEAR, validateSinkholeYearRange, type SinkholeSyncSummary, type SinkholeYearRange, @@ -77,18 +79,33 @@ export default function SinkholeLayerSettingPanel({ const updateYearRangeDraft = (key: keyof SinkholeYearRange, value: string) => { setYearRangeDraft((current) => ({ ...current, - [key]: value.replace(/[^0-9]/g, "").slice(0, 4), + [key]: String(value).replace(/[^0-9]/g, "").slice(0, 4), })); }; + const currentYear = new Date().getFullYear(); + const yearSelectClass = "h-[22px] w-[62px] rounded-none border border-[#ccd6df] bg-white px-[4px] text-center text-[1rem] leading-none text-[#222]"; + const startYearOptions = Array.from( + { length: currentYear - SINKHOLE_MIN_SEARCH_YEAR + 1 }, + (_, index) => String(currentYear - index), + ) + .filter((year) => !yearRangeDraft.endYear || Number(year) <= Number(yearRangeDraft.endYear)) + .map((year) => ({ val: year, text: year })); + const endYearOptions = Array.from( + { length: currentYear - SINKHOLE_MIN_SEARCH_YEAR + 1 }, + (_, index) => String(currentYear - index), + ) + .filter((year) => !yearRangeDraft.startYear || Number(year) >= Number(yearRangeDraft.startYear)) + .map((year) => ({ val: year, text: year })); + const inputClass = "h-[22px] border border-[#ccd6df] px-[2px] text-center text-[1rem] leading-none text-[#222]"; const numberInputClass = inputClass + " w-[40px]"; const applyButtonClass = "grid h-[20px] w-[20px] shrink-0 place-items-center rounded-full bg-[#31a83b] text-[0.95rem] font-bold leading-none text-white"; const indicator = ; const settingRows = ( -
-
+
+
{indicator} @@ -119,44 +136,37 @@ export default function SinkholeLayerSettingPanel({
-
+
{indicator} - - event.currentTarget.select()} - onChange={(event) => updateYearRangeDraft("startYear", event.target.value)} - onKeyDown={(event) => { - if (event.key === "Enter") void commitYearRange(); - }} - /> - ~ +
-
- - event.currentTarget.select()} - onChange={(event) => updateYearRangeDraft("endYear", event.target.value)} - onKeyDown={(event) => { - if (event.key === "Enter") void commitYearRange(); - }} - /> +
+
+ updateYearRangeDraft("startYear", String(value))} + selectContentClass="z-[101]" + labelClass="hidden" + /> +
+ ~ +
+ updateYearRangeDraft("endYear", String(value))} + selectContentClass="z-[101]" + labelClass="hidden" + /> +