- design_view_profile_sections: 노선마다 상세 갈아끼움을 듣고 종단도 · 표 · 3D 측점선 다시(보일 때만 · 숨으면 flushSwap 이 다시 보일 때) · 가게 stations 도 들어 횡단 보기를 안 열어도 갈아끼움(먼저 부른 쪽만 · 다음은 「같은 목록」) - design_view_profile: 받는 줄만(보임 · 떠날 때 끊음 · 다시 보일 때 flushSwap) - 갈아끼움 알림판 B06_Section_Swap_Bus(가져오기 없음 · 돌고 도는 가져오기 막음) — 조정창 값 · 암 경계 옮김을 어느 보기가 갈아끼웠든 한 번 · 횡단 보기는 알림으로 다시 그림 - 시험: 종단 보기 보임 7 → 8 · 숨음 = 안 그림 · 다시 보임 = 6 · 3D 측점선 같은 차례 · 옛 시험 둘(342-1 화면 선 = listedBase · 323-9 열쇠 모듈 진짜로) 맞춤 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QfHKQs7J3hQELKMWQMUJEy
31 lines
1.7 KiB
TypeScript
31 lines
1.7 KiB
TypeScript
/* =============================================================================
|
|
* B06_Section_UI_Page_Station_Swap.ts
|
|
* 횡단 보기가 계산 묶음 측점을 따라감(PLAN 346-2 4파) — 가게 `stations` 가 측점 목록을 바꾸면(늘고 줄면)
|
|
* 상세 객체를 갈아끼우고(`swapSectionStations` · 조정창 값 · 암 경계 · 암 경사 옮김은 `onAnySwap` 이 맡음) 보일 때
|
|
* 카드 · 종단도를 다시(카드는 보이는 것 먼저 · 다시 셈은 그 길이 맡음 · 안 보이면 다시 보일 때 그림).
|
|
* 종단 보기도 같은 가게를 듣고 같은 함수를 부름 — 먼저 부른 쪽이 갈아끼우고 다음 쪽은 「같은 목록」.
|
|
* ========================================================================== */
|
|
|
|
import { useDesignStore } from "../A00_Common/design/design_store";
|
|
import { onAnySwap, swapSectionStations } from "./B06_Section_Section_Store";
|
|
|
|
/** 묶음 측점을 따라감 — 돌려준 함수로 끊음. `redraw` = 캐시에서 상세를 다시 읽어 카드 · 그림 다시. */
|
|
export function followSwaps(
|
|
projectId: string | null,
|
|
routeId: () => number | null,
|
|
host: { visible: () => boolean },
|
|
redraw: () => Promise<void>,
|
|
): () => void {
|
|
if (!projectId) return () => undefined;
|
|
// 누가 갈아끼웠든(종단 보기가 먼저 불렀어도) 보이면 다시 그림 — 한 페이지 한 노선
|
|
const stopRedraw = onAnySwap(() => void (host.visible() && redraw()));
|
|
const stopStore = useDesignStore(projectId, null).subscribe("stations", (stations) => {
|
|
const route = routeId();
|
|
if (route !== null && stations?.length) void swapSectionStations(projectId, route, stations);
|
|
});
|
|
return () => {
|
|
stopRedraw();
|
|
stopStore();
|
|
};
|
|
}
|