/* ============================================================================= * D03_PlanAnalysis_UI_Features.ts * 노선 그리기 기능 표(PLAN 635-1 · 요구서 546 4장) — 예정노선(d03) · B05 평면이 같은 그리기 부품을 쓰고 이 표로만 가름. * 한 줄 = 기능 열쇠 · 이름 · 페이지마다 쓰임(use 사용 · view 보기만 · hide 숨김) · 까닭. * 숨김을 바꿀 때 = 이 표만 고침(부품 · 키트가 `featureUse` 로 읽음) · 꼴 = 지도 도구줄 표(`map_toolbar`). * ========================================================================== */ import type { MapPage } from "../A00_Common/map/map_layer_list"; export type PlanPage = MapPage; export type FeatureUse = "use" | "view" | "hide"; export type PlanFeature = | "site" | "draw" | "extend" | "select" | "props" | "history" | "terrain" | "road-upload" | "branch" | "years" | "set" | "join" | "others" | "points" | "plan-work"; export interface PlanFeatureRow { key: PlanFeature; name: string; pages: Record; why?: string; } export const PLAN_FEATURES: readonly PlanFeatureRow[] = [ { key: "site", name: "주소 · 장소 찾기(B05 = 지도 이동만)", pages: { d03: "use", b05: "use" } }, { key: "draw", name: "긋기 네 방식 · 길이 · 기울기 · Tab · Shift · 부채꼴 · ± 색", pages: { d03: "use", b05: "use" }, }, { key: "extend", name: "이어 긋기 · 다시 긋기 · 빈 땅 새 선(선 없을 때)", pages: { d03: "use", b05: "use" }, }, { key: "select", name: "고름 노드 → 선 → 전체 · 끌어 고르기 · 노드 끌기 · 꺾임점 · 지움", pages: { d03: "use", b05: "use" }, }, { key: "props", name: "속성 판 지반고 · 측점 · 길이 · 기울기 · 경위도(B05 = 서버 변환)", pages: { d03: "use", b05: "use" }, }, { key: "history", name: "되돌리기 · 다시하기 · 길이측정 · 3D(B05 = B05 것)", pages: { d03: "use", b05: "use" }, }, { key: "terrain", name: "기준점 · 지형 받기 · 다시 받기 · 10 km 알림", pages: { d03: "use", b05: "hide" }, why: "B 지형 = 전처리 확정", }, { key: "road-upload", name: "임도(업로드) 올리기 · 묶음 목록", pages: { d03: "use", b05: "hide" }, why: "서버 B 400 · 받은 자료로 보임", }, { key: "branch", name: "갈래 · 둘째 선 · 다른 선과 잇기 · 가운데 토막 지움(끝 토막 지움은 사용)", pages: { d03: "use", b05: "hide" }, why: "B 계획선 한 줄", }, { key: "years", name: "구간 나눔 마커 · 구역 · 연도 고침 · 선 이름", pages: { d03: "use", b05: "view" }, why: "받은 몫 고정", }, { key: "set", name: "노선 세트(연도-번호) 칸 · 세트 줄 · 이름표", pages: { d03: "use", b05: "view" }, why: "받은 몫 고정", }, { key: "join", name: "[잇기] 두 선 끝 이음", pages: { d03: "use", b05: "hide" }, why: "B 계획선 한 줄", }, { key: "others", name: "같은 예정노선 다른 세트(다른 해 · 같은 해 다른 업체) 흐린 겹 · 이음점 붙기", pages: { d03: "hide", b05: "view" }, why: "B 는 받은 세트만 고침 · 예정노선은 모든 세트를 고침", }, { key: "points", name: "지점 칸 · 핀 · 지점에서 긋기", pages: { d03: "use", b05: "hide" }, why: "B 저장 자리 없음", }, { key: "plan-work", name: "등록 기준점 · 확정 · 업체 지정 · 배포 · 산림청 [저장]", pages: { d03: "use", b05: "hide" }, why: "예정노선 업무", }, ]; /** 그 페이지 쓰임 — 표에 없는 열쇠 = 숨김. */ export function featureUse(page: PlanPage, key: PlanFeature): FeatureUse { return PLAN_FEATURES.find((row) => row.key === key)?.pages[page] ?? "hide"; } /** 고칠 수 있게 씀(보기만 · 숨김 = 거짓). */ export const featureOn = (page: PlanPage, key: PlanFeature): boolean => featureUse(page, key) === "use"; /** 보임(사용 · 보기만). */ export const featureShown = (page: PlanPage, key: PlanFeature): boolean => featureUse(page, key) !== "hide";