From 1db2f8f44873a47f0e29ecf9e048dba81ba138ed Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 18 Oct 2026 12:43:15 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05=C2=B7B06=20=ED=95=9C=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80):=20=ED=9A=A1=EB=8B=A8=20=EB=8B=A4=EC=8B=9C?= =?UTF-8?q?=20=EC=85=88=20=EB=92=A4=20=EC=A2=8C=EC=B8=A1=20=EC=8B=9C?= =?UTF-8?q?=EC=84=A4=20=ED=8F=BC=20=EC=9E=90=EB=8F=99=20=EC=B9=B8=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EA=B7=B8=EB=A6=BC=20=E2=80=94=20=EA=B4=80?= =?UTF-8?q?=20=EC=98=AE=EA=B8=B4=20=EB=92=A4=20=EA=B4=80=20=EA=B8=B8?= =?UTF-8?q?=EC=9D=B4=20=3D=20B06=20=EC=B9=B4=EB=93=9C=20(416-1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - design_shared crossDesignsUpdated 한 곳 — 두 보기 알림 + 좌측 시설 폼 recount(관 길이 · 흙막이 수) - 관을 옮긴 순간 셈한 옛 길이(6.9)가 횡단이 늦게 선 뒤에도 남던 것(캐시 6.6 · B06 카드 L=7 m (6.6)) - 시험 test_416_page_cache.py 한 칸 더 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VmC34fsxxbweEG3RUjs3Mn --- A00_Common/design/design_shared.ts | 11 +++++++++-- resources/tester/test_416_page_cache.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/A00_Common/design/design_shared.ts b/A00_Common/design/design_shared.ts index a04f8f8b0..d87638d8a 100644 --- a/A00_Common/design/design_shared.ts +++ b/A00_Common/design/design_shared.ts @@ -167,6 +167,13 @@ function toAll( )) as NonNullable; } +/** 횡단 설계가 다시 셈됨 — 두 보기에 알리고 좌측 시설 폼 자동 칸(관 길이 · 흙막이 수)을 공용 캐시 새 값으로 다시 + * 그림(416 · 관을 옮긴 뒤 측점 횡단이 늦게 서도 B05 좌측 = B06 카드). */ +function crossDesignsUpdated(shared: DesignPageShared, updated: ReadonlyArray): void { + toAll(shared, "onCrossDesignsUpdated")(updated); + shared.structures?.facility.recount(); +} + /** 종단도 한 벌 — 처음 부를 때 만들어 종단도 자리에 붙인다. */ export function sharedProfile(shared: DesignPageShared): DesignProfile { if (shared.profile) return shared.profile; @@ -183,7 +190,7 @@ export function sharedProfile(shared: DesignPageShared): DesignProfile { shared.lastPipes = pipes; toAll(shared, "onPipesChanged")(pipes); }, - onCrossDesignsUpdated: toAll(shared, "onCrossDesignsUpdated"), + onCrossDesignsUpdated: (updated) => crossDesignsUpdated(shared, updated), onStructureMove: toView(shared, "onStructureMove"), onStructureRemove: toView(shared, "onStructureRemove"), onPipeAdd: toView(shared, "onPipeAdd"), @@ -227,7 +234,7 @@ function startPagePipeline(shared: DesignPageShared, profile: DesignProfile): vo if (!detailCross(detail, stations)) return null; const edits = profile.pipelineSource().edits; const updated = await refreshCrossDesigns({ projectId, routeId, detail, edits }); - if (updated.length) toAll(shared, "onCrossDesignsUpdated")(updated); + if (updated.length) crossDesignsUpdated(shared, updated); profile.redraw(); return detailCross(detail, stations); }, diff --git a/resources/tester/test_416_page_cache.py b/resources/tester/test_416_page_cache.py index 86a602c3c..be83854a9 100644 --- a/resources/tester/test_416_page_cache.py +++ b/resources/tester/test_416_page_cache.py @@ -63,6 +63,17 @@ def test_M5_관_길이는_공용_캐시(r): ] +def test_M5_횡단_다시_셈_뒤_좌측_폼_다시_그림(): + shared = _read("A00_Common/design/design_shared.ts") + body = shared[shared.index("function crossDesignsUpdated(") :] + body = body[: body.index("\n}\n")] + assert "shared.structures?.facility.recount()" in body + # 종단도 알림 · 저장 노선 다시 셈 두 길 다 이 함수로 + assert "onCrossDesignsUpdated: (updated) => crossDesignsUpdated(shared, updated)" in shared + assert "if (updated.length) crossDesignsUpdated(shared, updated);" in shared + assert 'toAll(shared, "onCrossDesignsUpdated")' in body + + def test_M1_비운_뒤_두_보기는_새_객체_하나(r): assert r["m1"] == { "sameObject": True,