fix(계산묶음): 349-0l 새 노선 상세에 관 · 구조물 측점 폐회로 면적 얹기 — 349-0j 짝 마무리

- 묶음 새 노선 상세(shown)를 지은 뒤 관 · 구조물 측점 면적을 상세 가게 · 서버와 같은 얹기로(structureAreaRows)
- 화면 부품 계산이라 종단 보기가 옵션(structureAreas)으로 넘김 — 묶음 시험 틀이 그 부품을 안 끌어오게
- 관련 시험 414 통과 · typecheck 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TteK8mfYZetk5P3bEZkyVZ
This commit is contained in:
2026-10-16 16:07:18 +09:00
co-authored by Claude Opus 5.5
parent 5a364461ad
commit f38f6d7d70
3 changed files with 13 additions and 0 deletions
@@ -123,6 +123,9 @@ export interface PagePipelineOptions {
/** 노선 조작 뒤 follow 가 가게 관 · 구조물을 다시 씀(목록 · 알약 다시) — `far` = 새 노선에서
* `STRUCTURE_ROUTE_DRIFT_MAX_M` 넘게 먼 구조물 수(초안을 버려 되돌렸으면 0). */
onFacilitiesFollowed?: (far: number) => void;
/** 새 노선 상세에 관 · 구조물 측점 폐회로 면적을 얹음(상세 가게 · 서버와 같은 얹기 · 349-0j) — 화면
* 부품 계산이라 페이지가 넘김(묶음은 안 끌어옴). */
structureAreas?: (detail: SectionDetailResponse) => void;
/** 노선 초안을 버림(349-0k) — 초안 전 상세(`saved` · 없으면 null)로 되돌림 · `stations` = 저장 노선 측점 ·
* 돌려주는 값 = 되돌림 길 한 단어(묶음 기록 `restoreWhy`). 끝난 뒤 종단도가 저장 기준으로 돌아옴. */
onDraftDropped?: (
@@ -387,6 +390,7 @@ function createPagePipeline(
)
: null;
if (shown) drafted.add(shown);
if (shown) options.structureAreas?.(shown); // 관 · 구조물이 선 측점 = 폐회로 면적(349-0j)
if (event.stage === "cross") return void (draft && link.redraw?.());
const base = pipe.output("planline");
const edits = (pipe.input("alignment") as AlignmentEdits | null) ?? emptyEdits();
+6
View File
@@ -48,6 +48,10 @@ import {
rememberStandardDefaults,
} from "../../B06_Section/B06_Section_UI_Standard_Panel";
import { fetchSectionContext } from "../../B06_Section/B06_Section_Api_Fetch";
import {
applyStructureAreaRows,
structureAreaRows,
} from "../../B06_Section/B06_Section_Structure_Layouts";
import {
invalidateSectionDetail,
restoreSectionDetail,
@@ -528,6 +532,8 @@ export async function mountProfileView(
stationIntervalM: panel.values().stationInterval ?? undefined,
onCorridorStale: () => sections.setCorridorPending(true),
onFacilitiesFollowed: followFacilities,
structureAreas: ({ cross_sections: rows }) =>
applyStructureAreaRows(rows, structureAreaRows(rows)),
// 초안을 버림 — 초안 전 상세 그대로(349-0k) · 그 상세가 없거나(초안 둔 채 새로고침) 측점이 다르면 갈아끼움
onDraftDropped: async (routeId, saved, stations) => {
const back =
@@ -204,6 +204,7 @@ const pageMod = load("A00_Common", "design", "design_pipeline_page.ts");
const storeMod = load("A00_Common", "design", "design_store.ts");
const sectionStore = load("B06_Section", "B06_Section_Section_Store.ts");
const common = load("B06_Section", "B06_Section_UI_Section_Common.ts");
const layouts = load("B06_Section", "B06_Section_Structure_Layouts.ts");
const profileData = load("B05_Profile", "logic", "B05_Profile_UI_Profile_Data.ts");
const alignmentMod = load("B05_Profile", "logic", "B05_Profile_UI_Profile_Alignment.ts");
const baseMod = load("A00_Common", "design", "design_profile_base.ts");
@@ -290,6 +291,8 @@ async function run() {
const live = () => sectionStore.loadSectionDetail(P, R);
pageMod.routeDraftBridge(P, profile, {
stationIntervalM: job.interval,
structureAreas: ({ cross_sections: rows }) =>
layouts.applyStructureAreaRows(rows, layouts.structureAreaRows(rows)),
// `design_view_profile` 의 onDraftDropped 그대로
onDraftDropped: async (routeId, saved, stations) => {
const back = saved && (await sectionStore.restoreSectionDetail(P, routeId, saved, stations));