- 좌측 패널 · 아래 단추 넷 · 종단도 · 구조물 배치 폼을 페이지에 한 번만 만듦(design_shared) — 두 보기가 같은 노드 - 보기는 가운데 위 칸만: 종단 보기 = 3D(design_view_profile) · 횡단 보기 = 횡단 카드(design_view_cross · 처음 보일 때 그림) - 옛 B05_Profile_UI_Page · B06_Section_UI_Page 삭제 · 한 벌이 받은 조작은 지금 보기로, 관 목록 · 횡단 재계산 알림은 두 보기 모두로 - 진행 단계 종단설계 · 횡단설계 두 칸이 보기를 따라 켜짐 · 누르면 주소만 바꿈 · 제목도 따라감(setTitle · setActiveStep) - [저장] · [확정] 한 벌 — 두 보기 몫을 모아 saveDesign 한 번 · 종단 보기 [확정] 켬(횡단 보기를 숨긴 채 세워 횡단 자료를 얻음) - [초기화] · 계획노선 편집은 같은 페이지라도 다시 세움(remountRoute) - 덧붙임: 방향키는 초점 있는 쪽만(조정창 ↔ 종단도 계획고) · 횡단 보기 계획고 편집에도 [3D 업데이트] 대기 표시 · 종단 보기 폼 관 옵션을 횡단 캐시에도 얹음 · 종단 보기에서 횡단 조정 칸 가림 - 나눔: Cross_View 756→658(_Cross_View_Frame) · Page_Structures_Panel 700→547(_Structures_Spec) · 옛 B05 Page 786 → design_view_profile 638(_Page_Latest · _Page_Stations) - 시험: test_design_view_parity 한 벌 기준(한 패널 · 보기 오가도 같은 노드) · page_single · profile_single · save_channels · save_recompute 등 옮긴 자리로 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
38 lines
1.8 KiB
TypeScript
38 lines
1.8 KiB
TypeScript
/* =============================================================================
|
|
* 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<void>;
|
|
/** 고른 것(한 곳 `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());
|
|
}
|