/* ============================================================================= * B05_Profile_UI_Page_Life.ts * 종단 보기의 숨김 · 보임 · 떠남(한 페이지 두 보기 · 계획서 24-3a · 24-3b). * * 숨으면 3D 그리기 루프 · 포인터 듣기를 뗀다. 다시 보이면 잇고, 다른 보기(횡단)에서 바뀐 * 구조물 · 관 · 고른 것을 가게에서 다시 읽어 한 벌 종단도 · 폼에 종단 보기 값을 다시 싣는다. * 떠나면 3D(WebGL 문맥까지)를 정리한다 — 종단도는 한 벌이라 페이지가 정리한다. * ========================================================================== */ import type { DesignPageHost } from "../A00_Common/design/design_page"; export interface ProfileViewLifeDeps { projectId: string; viewer: { setActive: (active: boolean) => void; dispose: () => void }; /** 첫 진입 로딩이 끝났는가 — 끝나기 전에는 다시 읽지 않는다. */ ready: () => boolean; /** 구조물 목록 · 관 목록을 다시 싣는다(초안 우선). */ reload: () => Promise; /** 고른 것(한 곳 `selection`)을 3D · 종단도 · 배수유역도에 다시 맞춘다 — 폼은 한 벌이라 이미 같다. */ syncPick: () => void; /** 숨을 때 — 보기를 떠나는 자리(코리도 영구저장 시점). */ onHide?: () => void; } export function bindProfileViewLife(host: DesignPageHost, deps: ProfileViewLifeDeps): void { host.onHide(() => { deps.viewer.setActive(false); deps.onHide?.(); }); host.onShow(() => { deps.viewer.setActive(true); if (!deps.ready()) return; // 폼을 비우지 않는다 — 한 벌 폼이 이미 다른 보기에서 고른 것을 보이고 있다(24-3b). void deps.reload().then(deps.syncPick); }); host.onDispose(() => deps.viewer.dispose()); }