fix(B05 배수유역): 392-1 배수유역 판 기본 닫힘 — 기억 없음 = 닫힘 · 옛 "false" 기억 한 번 버림
- b_page_state drainage-collapsed version 2(옛 열쇠 · 옛 legacy 열쇠 안 읽음) · 전역 열쇠라 B06 도 같이
- 판은 사용자가 펼친 기억("false")만 펼침
- 시험 test_392_1_drainage_default_closed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Se7ytqbohmBQnfYpwYFnYf
This commit is contained in:
@@ -51,11 +51,8 @@ export const STATE_REGISTRY = {
|
|||||||
legacy: () => "b05-route-profile-collapsed",
|
legacy: () => "b05-route-profile-collapsed",
|
||||||
},
|
},
|
||||||
"profile-height": { bucket: "pref", scope: "global", legacy: () => "b05-route-profile-height" },
|
"profile-height": { bucket: "pref", scope: "global", legacy: () => "b05-route-profile-height" },
|
||||||
"drainage-collapsed": {
|
/** 배수유역 판 접힘 — 기억 없음 = 닫힘(392-1 · 옛 "false" 기억 버림). */
|
||||||
bucket: "pref",
|
"drainage-collapsed": { bucket: "pref", scope: "global", version: 2 },
|
||||||
scope: "global",
|
|
||||||
legacy: () => "b05-route-drainage-collapsed",
|
|
||||||
},
|
|
||||||
"drainage-width": { bucket: "pref", scope: "global", legacy: () => "b05-route-drainage-width" },
|
"drainage-width": { bucket: "pref", scope: "global", legacy: () => "b05-route-drainage-width" },
|
||||||
/** M02 면적산출 오른쪽 일위대가 패널(`AreaPanel`) — 접힘 · 폭(옛 조합 패널 키 그대로) */
|
/** M02 면적산출 오른쪽 일위대가 패널(`AreaPanel`) — 접힘 · 폭(옛 조합 패널 키 그대로) */
|
||||||
"m02-combo-panel-collapsed": { bucket: "pref", scope: "global" },
|
"m02-combo-panel-collapsed": { bucket: "pref", scope: "global" },
|
||||||
|
|||||||
@@ -556,9 +556,8 @@ export function createDrainagePanel(callbacks: DrainagePanelCallbacks = {}): Dra
|
|||||||
panelHandle.root.addEventListener("click", () =>
|
panelHandle.root.addEventListener("click", () =>
|
||||||
setCollapsed(!root.classList.contains("is-collapsed")),
|
setCollapsed(!root.classList.contains("is-collapsed")),
|
||||||
);
|
);
|
||||||
// 상세 배수유역 정보는 페이지에 들어오면 바로 보여야 한다 — 저장값이 없으면 펼침이 기본이다
|
// 저장값이 없으면 닫힘이 기본(392-1) — 사용자가 펼친 기억("false")만 펼친다.
|
||||||
// (같은 페이지의 하단 종단 패널과 같은 규칙).
|
setCollapsed(readStateRaw("drainage-collapsed") !== "false");
|
||||||
setCollapsed(readStateRaw("drainage-collapsed") === "true");
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
root,
|
root,
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""배수유역 판 기본 닫힘(계획서 392-1).
|
||||||
|
|
||||||
|
진짜 `b_page_state.ts` 를 가짜 저장소 위에서 돌림 — 옛 기억("false" · 옛 키 · 판 없는 키)은
|
||||||
|
버리고 기억 없음 = null. 판은 "false"(사용자가 펼친 기억)만 펼침 · B06 도 같은 전역 키.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
ROOT = os.path.dirname(os.path.dirname(HERE))
|
||||||
|
|
||||||
|
NODE = r"""
|
||||||
|
const path = require("path"), fs = require("fs");
|
||||||
|
const ts = require(path.join(process.argv[1], "config", "node_modules", "typescript"));
|
||||||
|
const src = fs.readFileSync(path.join(process.argv[1], "A00_Common", "b_page_state.ts"), "utf8");
|
||||||
|
const js = ts.transpileModule(src, { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 } }).outputText;
|
||||||
|
const mk = (init) => { const m = new Map(Object.entries(init)); return {
|
||||||
|
getItem: (k) => (m.has(k) ? m.get(k) : null), setItem: (k, v) => m.set(k, String(v)),
|
||||||
|
removeItem: (k) => m.delete(k), key: (i) => [...m.keys()][i] ?? null, get length() { return m.size; }, _m: m }; };
|
||||||
|
const local = mk({ "aislo:pref:drainage-collapsed": "false", "b05-route-drainage-collapsed": "false" });
|
||||||
|
const window = { localStorage: local, sessionStorage: mk({}) };
|
||||||
|
const exports = {};
|
||||||
|
new Function("exports", "window", "require", js)(exports, window, () => ({}));
|
||||||
|
const out = { key: exports.stateKey("drainage-collapsed"), old: exports.readStateRaw("drainage-collapsed") };
|
||||||
|
exports.writeStateRaw("drainage-collapsed", "false");
|
||||||
|
out.kept = exports.readStateRaw("drainage-collapsed");
|
||||||
|
process.stdout.write(JSON.stringify(out));
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def test_old_memory_dropped_and_new_kept():
|
||||||
|
res = subprocess.run(
|
||||||
|
["node", "-e", NODE, ROOT], capture_output=True, text=True, encoding="utf-8", check=True
|
||||||
|
)
|
||||||
|
out = json.loads(res.stdout)
|
||||||
|
assert out["key"] == "aislo:pref:drainage-collapsed-v2"
|
||||||
|
assert out["old"] is None # 옛 "false" 두 키 모두 안 읽음
|
||||||
|
assert out["kept"] == "false" # 새 기억은 그대로
|
||||||
|
|
||||||
|
|
||||||
|
def test_panel_default_closed():
|
||||||
|
with open(
|
||||||
|
os.path.join(ROOT, "B05_Profile", "B05_Profile_UI_Drainage_Panel.ts"), encoding="utf-8"
|
||||||
|
) as f:
|
||||||
|
src = f.read()
|
||||||
|
# 기억 없음(null) = 닫힘 · "false" 만 펼침
|
||||||
|
assert 'setCollapsed(readStateRaw("drainage-collapsed") !== "false")' in src
|
||||||
Reference in New Issue
Block a user