지도 대상 선택 이동 시 지역·시설 검색조건 초기화

This commit is contained in:
kiminchan
2026-10-02 16:51:47 +09:00
parent 8c614b84a7
commit 6ef4603a7c
25 changed files with 433 additions and 70 deletions
@@ -4,7 +4,7 @@
*/
"use client";
import { useEffect, useMemo, useState } from "react";
import { useEffect, useMemo, useState, useRef } from "react";
import { windowPopupDefinitions } from "@/features/window-popup/model/popup-definitions";
import {
@@ -462,26 +462,37 @@ export default function WaterRiskPopupPage(_props: WindowPopupContentProps) {
setSelectedResultKey("");
};
/** 늦게 끝난 이전 행 요청이 최신 선택을 덮지 않도록 식별한다. */
const mapRequestRef = useRef<string>("");
/** 선택 행의 실제 GeoJSON을 조회한 뒤 부모 지도 창에 전달한다. */
const handleSelectResultRow = async (row: WaterRiskResultRow) => {
const requestId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
mapRequestRef.current = requestId;
postMessageToOpener(WINDOW_POPUP_MESSAGE_TYPE.WATER_RISK_SELECT_RESULT, {
phase: "loading", requestId,
});
setSelectedResultKey(buildResultRowKey(row));
setIsMapLoading(true);
setErrorMessage("");
try {
const mapView = await fetchWaterRiskMapView(row);
if (mapRequestRef.current !== requestId) return;
postMessageToOpener(WINDOW_POPUP_MESSAGE_TYPE.WATER_RISK_SELECT_RESULT, {
requestId,
areaId: row.areaId,
resultRow: row,
mapView,
});
} catch (error) {
if (mapRequestRef.current !== requestId) return;
setErrorMessage(
error instanceof Error
? error.message
: "통수위험 지도 결과를 조회하지 못했습니다.",
);
} finally {
setIsMapLoading(false);
if (mapRequestRef.current === requestId) setIsMapLoading(false);
}
};