fix(472-5 남음): 암선 · 암 경사 · B05 상단측 메모리 맵 걷음 · 노선 저장 뒤 옛 노선 칸 · hold 비움
- 암 경계 · 암 절토 경사 저장소(`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>
This commit is contained in:
@@ -26,9 +26,6 @@ export interface PageActionContext {
|
||||
panel: () => ReturnType<typeof createRoutePanel>;
|
||||
profilePanel: () => ReturnType<typeof createRouteProfilePanel>;
|
||||
bridge: () => ReturnType<typeof createStructuresBridge>;
|
||||
/** 상단측(측구 방향) 사용자 변경분 — 키는 누가거리 문자열. */
|
||||
uphillOverrides: Map<string, "left" | "right">;
|
||||
persistUphillOverrides: () => void;
|
||||
loadLatest: (forceFresh?: boolean) => Promise<RouteLatestResponse>;
|
||||
renderLatest: (next: RouteLatestResponse) => void;
|
||||
restoreSections: (routeId: number) => Promise<void>;
|
||||
@@ -44,15 +41,7 @@ export function profileSaveParts(ctx: PageActionContext): DesignViewSave {
|
||||
parts: {
|
||||
// 구조물 — 보낼 것 = 세션 초안 ?? 이 보기 목록 · 저장 뒤 서버 목록(새 식별자)으로 화면을 맞춘다(472-6).
|
||||
structures: () => ctx.bridge().structuresSavePart(),
|
||||
// 상단측 + 비정규 측점 횡단 맞춤 — 기본 조각 본문 그대로(463) · 저장 뒤 세션(기본) · 메모리 값도 비움.
|
||||
uphill: (base) =>
|
||||
base && {
|
||||
body: base.body,
|
||||
after: async (response) => {
|
||||
await base.after?.(response);
|
||||
ctx.uphillOverrides.clear();
|
||||
},
|
||||
},
|
||||
// 상단측 + 비정규 측점 횡단 맞춤 = 기본 조각 그대로(463 · 값 주인 = 세션 칸 `uphill` · 메모리 사본 없음 · 472-5)
|
||||
},
|
||||
// 횡단 본문은 늘 횡단 보기 몫 — [저장]이 숨긴 채라도 세움(386-6 · 옛 캐시 패치 길 지움)
|
||||
// 공유 캐시는 한 벌(`design_shared`)이 저장 끝에 한 번 비움 — 여기서는 새 자료를 다시 읽어 종단 ·
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
* 전부 상태를 갖지 않는 변환 함수라 화면 흐름과 독립적이다.
|
||||
* ========================================================================== */
|
||||
|
||||
import { readState, writeState } from "../A00_Common/b_page_state";
|
||||
import type { RoutePanelValues } from "./B05_Profile_UI_Panel";
|
||||
import type {
|
||||
ModelBounds,
|
||||
@@ -224,33 +223,3 @@ export function interpolateIrregularStations(
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/* ── 측점 상단측(=측구 방향) 사용자 변경분 세션 보관 ─────────────────────
|
||||
* 3D 램프 클릭으로 바꾼 값. 경로 확정 때 uphill_overrides로 백엔드에 병합한다.
|
||||
* 화면 본체가 700줄에 닿아 읽기·쓰기만 여기로 뺐다(2026-09-04, 동작 불변). */
|
||||
/** 세션에 남은 상단측 변경분을 읽는다. 손상된 값은 무시하고 빈 것으로 시작한다. */
|
||||
export function loadUphillOverrides(projectId: string): Map<string, "left" | "right"> {
|
||||
const overrides = new Map<string, "left" | "right">();
|
||||
try {
|
||||
const stored = readState<Record<string, "left" | "right">>("uphill", projectId);
|
||||
if (!stored) return overrides;
|
||||
Object.entries(stored).forEach(([chainage, side]) => {
|
||||
if (side === "left" || side === "right") overrides.set(chainage, side);
|
||||
});
|
||||
} catch {
|
||||
/* 손상된 세션 값은 무시 — 자동 판정값으로 재시작. */
|
||||
}
|
||||
return overrides;
|
||||
}
|
||||
|
||||
/** 상단측 변경분을 세션에 적는다. 저장 실패는 무시한다(값은 메모리에 남는다). */
|
||||
export function saveUphillOverrides(
|
||||
projectId: string,
|
||||
overrides: ReadonlyMap<string, "left" | "right">,
|
||||
): void {
|
||||
try {
|
||||
writeState("uphill", Object.fromEntries(overrides), projectId);
|
||||
} catch {
|
||||
/* 세션 저장 실패는 무시 — 값은 메모리에 유지된다. */
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user