/* ============================================================================= * B06_Section_UI_Page_Link_Session.ts * 연동 기슭막이 옵션(연동 해제·종단경사 반영)의 **세션 보관** — 측점 제어기 * (`_UI_Page_Station_Controls.ts`)에서 700줄 제한으로 분리했다(2026-08-25). * 두 플래그는 한 세션 항목에 같이 담아 확정 전 리로드에도 살아남는다. * ========================================================================== */ export interface LinkFlagMaps { detached: Map; followGrade: Map; load: () => void; persist: () => void; } export function createLinkFlagSession(sessionKey: () => string | null): LinkFlagMaps { const detached = new Map(); const followGrade = new Map(); return { detached, followGrade, load(): void { detached.clear(); followGrade.clear(); const key = sessionKey(); if (!key) return; try { const raw = window.sessionStorage.getItem(key); if (!raw) return; const parsed = JSON.parse(raw) as { detached?: Record; grade?: Record; }; Object.entries(parsed.detached ?? {}).forEach(([at, value]) => detached.set(at, !!value)); Object.entries(parsed.grade ?? {}).forEach(([at, value]) => followGrade.set(at, !!value)); } catch { /* 손상된 세션 값은 무시 — 정본·기본값으로 재시작. */ } }, persist(): void { const key = sessionKey(); if (!key) return; window.sessionStorage.setItem( key, JSON.stringify({ detached: Object.fromEntries(detached), grade: Object.fromEntries(followGrade), }), ); }, }; }