- A00_Common/design/design_store.ts — useDesignStore(projectId, routeId) get · set · subscribe
(structures · pipes · alignmentDraft · sectionDetail · selection) · 밑은 b_page_state 등록 키
(selection 등록 · alignmentDraft 는 옛 키 감쌈 — 브레인 판정 B)
- A00_Common/design/design_save.ts — saveDesign(ctx, {confirm}) 한 줄기:
관 → 구조물 → 계획고 → 암거 옵션 → 오르막 → 횡단 · B05 [임시저장] · B06 [저장] · [확정]이 같은 차례
- 계획고 초안 가게 노선마다 한 벌(B05 Profile_Edit 주인 · B06 Grade_Edit 는 useProfileEditStore)
- 관 목록 주인 = 가게 pipes(Pipes_Draft 창구)
- 시험: test_design_store_save 추가 · save_channels · save_recompute · save_roundtrip 새 차례로
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
37 lines
1.9 KiB
TypeScript
37 lines
1.9 KiB
TypeScript
/* =============================================================================
|
|
* B05_Profile_Api_Pipes_Draft.ts
|
|
* B05 배수유역도에서 고친 **관 목록 초안**(세션) — [저장]·[확정]에서만 정본으로 나간다.
|
|
*
|
|
* 왜 생겼나(2026-09-06 대응표 조사) — 관 추가·이동·삭제가 패널 메모리에만 있어, B06 으로
|
|
* 넘어가 [저장]하면 그 편집이 통째로 사라졌다(`savePipes()` 를 부르는 곳이 B05 [임시저장]
|
|
* 하나뿐이었다). 다른 조작값과 같은 규칙으로 세션에 쌓고 저장 앞단에서 함께 내보낸다.
|
|
*
|
|
* 자동저장은 하지 않는다(CLAUDE.md 5장).
|
|
*
|
|
* 관 목록의 주인은 설계 가게(`design_store` 의 `pipes`) 하나다(계획서 24-2a) — B05 배수유역도 ·
|
|
* B06 구조물 목록 모두 이 창구로 읽고 쓴다.
|
|
* ========================================================================== */
|
|
|
|
import { useDesignStore } from "../A00_Common/design/design_store";
|
|
import { saveDetailPipePoints } from "../B04_PreProcess/B04_PreProcess_Api_Fetch";
|
|
import type { DetailPipeInput } from "../B04_PreProcess/B04_PreProcess_Api_Fetch";
|
|
|
|
/** 세션에 담는 관 한 벌 — 정본 PUT 이 그대로 받는 꼴이다. */
|
|
export type PendingPipes = DetailPipeInput[];
|
|
|
|
export function readPendingPipes(projectId: string): PendingPipes | null {
|
|
return useDesignStore(projectId, null).get("pipes");
|
|
}
|
|
|
|
export function writePendingPipes(projectId: string, next: PendingPipes | null): void {
|
|
useDesignStore(projectId, null).set("pipes", next);
|
|
}
|
|
|
|
/** 초안이 있으면 정본에 쓰고 비운다. 없으면 아무 일도 하지 않는다. */
|
|
export async function flushPendingPipes(projectId: string): Promise<void> {
|
|
const pending = readPendingPipes(projectId);
|
|
if (!pending) return;
|
|
await saveDetailPipePoints(projectId, pending);
|
|
writePendingPipes(projectId, null);
|
|
}
|