diff --git a/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx b/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx index fa2e8cf84..362d69f0f 100644 --- a/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx +++ b/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx @@ -174,9 +174,16 @@ const postMessageToOpener = ( const getRiskBadgeClassName = (riskStatus: "DANGER" | "NORMAL") => riskStatus === "DANGER" ? "sn-popup-badge-danger" : "sn-popup-badge-normal"; -/** 날짜까지 포함해 과거 이력에서도 결과 행 선택을 유일하게 식별한다. */ +/** 동일 날짜·지역에 여러 강우이벤트가 있어도 실행별 행 키가 겹치지 않게 식별한다. */ const buildResultRowKey = (row: WaterRiskResultRow) => - `${row.analysisDate ?? ""}:${row.ctpvCd ?? ""}:${row.sggCd ?? ""}:${row.areaId}`; + [ + row.analysisDate ?? "", + row.rainStartedAt ?? "", + row.analysisBaseAt ?? "", + row.ctpvCd ?? "", + row.sggCd ?? "", + row.areaId, + ].join(":"); /** 실제 통수위험 API를 조회하고 선택 결과를 부모 지도에 전달하는 팝업이다. */ export default function WaterRiskPopupPage(_props: WindowPopupContentProps) { diff --git a/apps/sn/app/(map-layout)/map/page.tsx b/apps/sn/app/(map-layout)/map/page.tsx index 60b75ee9c..c40d0db73 100644 --- a/apps/sn/app/(map-layout)/map/page.tsx +++ b/apps/sn/app/(map-layout)/map/page.tsx @@ -3432,6 +3432,17 @@ const Map = () => { [selectedWaterRiskApiResult], ); + // 지도카드는 실제 GIS geometry까지 결합된 mapView 위험상태를 목록 상태보다 우선한다. + const selectedWaterRiskDisplayStatus = useMemo< + WaterRiskResultRow["riskStatus"] + >( + () => + selectedWaterRiskMapView?.riskStatus ?? + selectedWaterRiskResultRow?.riskStatus ?? + "NORMAL", + [selectedWaterRiskMapView?.riskStatus, selectedWaterRiskResultRow?.riskStatus], + ); + /** 선택 영역 오른쪽에 중점관리지역 강우·침수 요약카드를 배치한다. */ const syncWaterRiskInfoCardPosition = useCallback(() => { const map = gisMaps.current; @@ -8781,20 +8792,25 @@ const Map = () => { {buildWaterRiskStatusLabel( - selectedWaterRiskResultRow.riskStatus, + selectedWaterRiskDisplayStatus, )}