feat: 침수심 범례 기능 추가

This commit is contained in:
swcho
2025-08-05 11:22:22 +09:00
parent 7ad50914b3
commit 115fbbfc99
2 changed files with 39 additions and 6 deletions
+25 -2
View File
@@ -40,6 +40,7 @@ const Map = () => {
const [isOpen, setIsOpen] = useState(false); // 팝업 열기/닫기 상태
const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); // SearchModal 열림 상태
const [featureData, setFeatureData] = useState(null); // 선택된 피쳐 데이터
const [showWaterDepth, setShowWaterDepth] = useState(false); // WaterDepth 표시 여부
useEffect(() => {
@@ -118,6 +119,28 @@ const Map = () => {
setIsSearchModalOpen(false);
};
// WaterDepth 표시 여부를 결정하는 함수
const handleWaterDepthVisibility = useCallback((checkedIds: string[], checkedNodesData: any[]) => {
// 침수 관련 레이어 ID들 (실제 데이터에 맞게 수정 필요)
const waterDepthLayerTypes = [
'tb_ms_flood_dngr_map', // 침수위험지도
'tb_ms_sbmrg_dngr_map' // 도시침수지도
];
// 체크된 레이어 중에 침수 관련 레이어가 있는지 확인
const hasWaterDepthLayer = checkedNodesData.some(node =>
waterDepthLayerTypes.includes(node.data?.lyrTyNm)
);
setShowWaterDepth(hasWaterDepthLayer);
}, []);
// 체크된 레이어 변경 처리 함수
const handleCheckedLayersChange = useCallback((checkedIds: string[], checkedNodesData: any[]) => {
// WaterDepth 표시 여부 결정
handleWaterDepthVisibility(checkedIds, checkedNodesData);
}, [handleWaterDepthVisibility]);
return (
<div className="bg-container">
@@ -135,9 +158,9 @@ const Map = () => {
setIsSearchModalOpen={setIsSearchModalOpen}
isOpen={isOpen}
isSearchModalOpen={isSearchModalOpen}
onCheckedLayersChange={undefined}
onCheckedLayersChange={handleCheckedLayersChange}
searchBar={SearchBar}
// waterDepth={WaterDepth}
waterDepth={showWaterDepth ? WaterDepth : undefined}
/>
</div>
);
@@ -3,18 +3,28 @@
import React, { useRef, useEffect, useState } from "react";
import { Label } from "@common/components/ui/label";
export function WaterDepth({ onClose }: { onClose?: () => void }) {
interface WaterDepthProps {
onClose?: () => void;
}
export function WaterDepth({
onClose,
}: WaterDepthProps) {
const [isPlaying, setIsPlaying] = useState<boolean>(false);
const handlePlayToggle = () => {
setIsPlaying((prev) => !prev);
};
return (
<>
<div className="fixed top-8 left-8 z-50 bg-white rounded-lg shadow-lg border border-gray-200 w-[160px] px-4 py-3">
<div className="bg-white rounded-lg shadow-lg border border-gray-200 w-[160px] px-4 py-3">
<div className="card-header flex items-center justify-between">
<Label className="text-3xl text-gray-900 font-bold">침수심 범례</Label>
<button
type="button"
className="ml-2"
onClick={() => setIsPlaying((prev) => !prev)}
onClick={handlePlayToggle}
>
{isPlaying ? (
<img
@@ -42,7 +52,7 @@ export function WaterDepth({ onClose }: { onClose?: () => void }) {
<LegendItem color="#fce800" label="2.0~3.0m 미만" />
<LegendItem color="#fe0000" label="3.0m 이상" />
</div>
<div className="border-t-4 border-gray-900 mt-2 mx-auto w-full" />
<div className="border-t-2 border-blue-900 mt-1 mx-auto w-full" />
</div>
</div>
</>