- 암 경계 · 암 절토 경사 저장소(`B06_Section_UI_Page_Persist`) = 세션 칸이 주인 — 읽을 때마다 측점 열쇠 칸(`readCells`) · 고칠 때 지금 칸을 읽어 그 측점만 바꿔 씀(`putCell`) · 메모리 맵 · load · 갈아끼움 다시 읽기(keyedStores · reloadKeyedStores) 걷음 · ↶ 뒤 다음 조작이 되돌림을 덮던 흠(N5) 고침 - 저장 재료 = `offsets()` · `ratios()`(새 Map) · ↶ ↷ 가 rockb · cutslope 칸을 바꾸면 조정창과 같은 onRestore 로 카드 · 면적 다시 - B05 상단측 메모리 맵(uphillOverrides · load/saveUphillOverrides) 걷음 — 읽는 곳 없이 저장 뒤 비우기만 하던 사본 · 값 주인 = 세션 칸 `uphill` · 상단측 차례 = 기본 조각 그대로 - 노선 바뀐 [저장] 성공 뒤(페이지 다시 세운 뒤) 옛 노선 번호의 노선 범위 초안(`clearRouteDrafts`) · `route-draft-hold` 비움 · 넘김 규칙 그대로 · 같은 번호면 노선 칸 안 지움 · 실패면 그대로 - 시험 test_472_5r_rock_owner 7(옛 코드 빨강 5) · 옛 단언 고침(176_3 · 271 · 443 상단측 조각 · 344_3 저장소 load) - 위키 암선 · 암 경사 · ↶ ↷ 규칙 · 노선 저장 뒤 정리 줄 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
3.4 KiB
TypeScript
56 lines
3.4 KiB
TypeScript
/* =============================================================================
|
|
* B05_Profile_UI_Page_Actions.ts
|
|
* 종단 보기의 **버튼 동작** — [저장]·[확정]에 보태는 종단 보기 몫. [경로 계산]은 `Old/` 로 옮김(54-24).
|
|
*
|
|
* 종단 보기 본체(`design_view_profile`)에서 떼어냈다(700줄 제한, 2026-09-02). 화면 조립·로딩
|
|
* 순서는 본체에 남고, 여기에는 영구저장소를 건드리는 갈래만 둔다(CLAUDE.md 5장: 세션에 쌓인
|
|
* 조작은 [저장]·[확정]에서만 정본으로 나간다). [초기화]는 한 벌(`design_reset`)이 한다.
|
|
* ========================================================================== */
|
|
|
|
import type { RouteLatestResponse } from "./B05_Profile_Api_Fetch";
|
|
import type { DesignViewSave } from "../A00_Common/design/design_shared";
|
|
import { pageRouteId } from "../A00_Common/design/design_page_route";
|
|
import type { createRoutePanel } from "./B05_Profile_UI_Panel";
|
|
import type { createRouteProfilePanel } from "./B05_Profile_UI_Profile_Panel";
|
|
import type { createStructuresBridge } from "./B05_Profile_UI_Page_Structures";
|
|
import type { createRouteViewer } from "./B05_Profile_UI_Viewer";
|
|
|
|
/** 버튼 동작이 페이지에서 받아 쓰는 창구 — 값은 바뀌므로 함수로 받는다. */
|
|
export interface PageActionContext {
|
|
projectId: string;
|
|
latest: () => RouteLatestResponse | null;
|
|
/** 확정 지표면 응답 — 모델 id 는 `model_id` 다(2026-09-06 호출 정리). */
|
|
confirmedSurface: () => { model_id: number | null } | null;
|
|
routeReady: () => boolean;
|
|
viewer: () => ReturnType<typeof createRouteViewer>;
|
|
panel: () => ReturnType<typeof createRoutePanel>;
|
|
profilePanel: () => ReturnType<typeof createRouteProfilePanel>;
|
|
bridge: () => ReturnType<typeof createStructuresBridge>;
|
|
loadLatest: (forceFresh?: boolean) => Promise<RouteLatestResponse>;
|
|
renderLatest: (next: RouteLatestResponse) => void;
|
|
restoreSections: (routeId: number) => Promise<void>;
|
|
}
|
|
|
|
/** [저장] · [확정]에 종단 보기가 보태는 몫 — 차례는 저장 한 줄기(`saveDesign`)가 정하고
|
|
* 한 벌(`design_shared`)이 두 보기 몫을 모아 한 번에 보낸다(계획서 24-2a · 24-3b). 관(배수유역도) ·
|
|
* 계획고는 한 벌 종단도가 낸다. */
|
|
export function profileSaveParts(ctx: PageActionContext): DesignViewSave {
|
|
const projectId = ctx.projectId;
|
|
return {
|
|
routeId: () => (ctx.routeReady() ? pageRouteId(projectId) : null), // 노선 id 한 칸(386-2b)
|
|
parts: {
|
|
// 구조물 — 보낼 것 = 세션 초안 ?? 이 보기 목록 · 저장 뒤 서버 목록(새 식별자)으로 화면을 맞춘다(472-6).
|
|
structures: () => ctx.bridge().structuresSavePart(),
|
|
// 상단측 + 비정규 측점 횡단 맞춤 = 기본 조각 그대로(463 · 값 주인 = 세션 칸 `uphill` · 메모리 사본 없음 · 472-5)
|
|
},
|
|
// 횡단 본문은 늘 횡단 보기 몫 — [저장]이 숨긴 채라도 세움(386-6 · 옛 캐시 패치 길 지움)
|
|
// 공유 캐시는 한 벌(`design_shared`)이 저장 끝에 한 번 비움 — 여기서는 새 자료를 다시 읽어 종단 ·
|
|
// 평면 오른쪽 판을 그림(416 · 노선 안 바뀐 [저장]도 · B06 다녀오지 않아도 면적 = B06)
|
|
done: async () => {
|
|
ctx.renderLatest(await ctx.loadLatest(true));
|
|
const routeId = pageRouteId(projectId);
|
|
if (routeId !== null) await ctx.restoreSections(routeId);
|
|
},
|
|
};
|
|
}
|