/** 시설 선택 결과의 우측 탭 식별·표시 변환. 기존 값과 처리 순서를 유지한다. */ import { type RightPanelTabCategory } from "@/app/(map-layout)/map/components/right-panel/right-panel-bookmark-tabs"; import { FLDNG_HSTRY_LAYER_NAME } from "@/entities/flood-history/model/flood-history-types"; export const getSelectedFeatureLayerTypeName = (data: any) => { const previewLayerId = String(data?.get?.("layerId") ?? "").trim(); if (String(data?.get?.("changeId") ?? "").trim() && previewLayerId) { return previewLayerId; } if (typeof data?.getId === "function") { return String(data.getId() ?? "").split(".")[0]; } if (typeof data?.id_ === "string") { return String(data.id_).split(".")[0]; } return String(data?.lyrTypeNm ?? data?.values_?.lyrTypeNm ?? "").trim(); }; export const getRightPanelFeatureIdentifier = (data: any) => { const rawId = data?.get?.("changeId") ?? data?.get?.("fid") ?? data?.values_?.fid ?? data?.fid ?? data?.getId?.() ?? data?.id_ ?? data?.fcltMngNo ?? data?.values_?.fclt_mng_no ?? data?.swtrmtFcltCd ?? data?.values_?.swtrmt_fclt_cd ?? ""; return String(rawId).trim(); }; export const getRightPanelFeatureTitle = (data: any) => { const layerTypeName = getSelectedFeatureLayerTypeName(data); switch (layerTypeName) { case "tb_ms_swage_ppl": return "하수관로"; case "tb_ms_swage_mhl": return "하수맨홀"; case "tb_ms_swage_pmstn": return "펌프장"; case "tb_ms_stofcbr": return "우수토실"; case "tb_il_swage_prcs_fclt": return "처리시설"; case "tb_ms_swage_prcs_zone": return "처리구역"; case "tb_ms_fldng_wtlv_map": return FLDNG_HSTRY_LAYER_NAME; case "tb_ms_fldng_dpth_map": return "침수흔적심선"; case "om_dt_untrt_swg_rain": return "중점우수"; default: return ( String(data?.lyrNm ?? data?.values_?.lyrNm ?? "상세").trim() || "상세" ); } }; // OpenLayers Feature와 plain object 양쪽에서 탭 표시값 후보를 같은 순서로 읽는다. export const getRightPanelFeatureProperty = (data: any, keys: string[]) => { for (const key of keys) { const value = data?.get?.(key) ?? data?.values_?.[key] ?? data?.[key]; const normalizedValue = String(value ?? "").trim(); if (normalizedValue) return normalizedValue; } return ""; }; export const getRightPanelTabCategory = (data: any): RightPanelTabCategory => { const surveyOverlayType = getRightPanelFeatureProperty(data, [ "surveyOverlayType", ]); if (surveyOverlayType === "EXMN_RESULT") return "exmnSurvey"; const layerTypeName = getSelectedFeatureLayerTypeName(data); if (layerTypeName === "tb_ms_swage_ppl") return "pipe"; if (layerTypeName === "tb_il_swage_prcs_fclt") return "treatmentFacility"; if (layerTypeName === "tb_ms_swage_prcs_zone") return "treatmentZone"; return "defaultFeature"; }; export const getRightPanelFeatureDisplayLabel = ( data: any, category: RightPanelTabCategory, ) => { if (category === "exmnSurvey") { const managementNo = getRightPanelFeatureProperty(data, [ "gisManagementNo", "fclt_mng_no", "fcltMngNo", ]) || "-"; const jobType = getRightPanelFeatureProperty(data, ["jobType"]); const surveyLabel = jobType === "PPL" ? "관로조사" : jobType === "MNHL" ? "맨홀조사" : "조사사업"; return `${surveyLabel}(${managementNo})`; } if (category === "pipe") { const managementNo = getRightPanelFeatureProperty(data, [ "fclt_mng_no", "fcltMngNo", "pipeId", "fid", ]) || getRightPanelFeatureIdentifier(data) || "-"; return `관로(${managementNo})`; } if (category === "treatmentFacility") { const facilityName = getRightPanelFeatureProperty(data, ["swtrmt_fclt_nm", "swtrmtFcltNm"]) || getRightPanelFeatureProperty(data, ["swtrmt_fclt_cd", "swtrmtFcltCd"]) || "-"; return `처리시설(${facilityName})`; } if (category === "treatmentZone") { const zoneName = getRightPanelFeatureProperty(data, ["swtrmt_zone_nm", "swtrmtZoneNm"]) || getRightPanelFeatureProperty(data, [ "swtrmt_zone_sn", "swtrmtZoneSn", "swtrmt_fclt_cd", "swtrmtFcltCd", ]) || "-"; return `처리구역(${zoneName})`; } return getRightPanelFeatureTitle(data); };