fix(nav): 지표면이 필요 없는 화면은 준비 화면을 거치지 않도록

파일을 아직 올리지 않은 새 프로젝트에서 대시보드 -> 파일 입력으로 이동하면
준비 화면(B11)이 확정 지표면을 찾다 실패해 "담당자에게 연락" 장애 안내를 띄웠다.
파일 입력 화면은 3D 지표면을 쓰지 않으므로 준비 자체가 필요 없다.

- goToWorkflowStage: 담아 둔 지표면을 실제로 쓰는 B04/B05로 갈 때만 준비 화면 경유,
  나머지(B03/B06~B09)는 바로 이동
- 확정 지표면이 없을 때는 장애가 아니라 순서 문제이므로 전용 표식(PRELOAD_NO_SURFACE)을
  던지고, 준비 화면은 안내 문구 + [파일 입력 화면으로] 버튼을 보여 준다

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-08 13:49:37 +09:00
co-authored by Claude Fable 5
parent 9b4f603405
commit 22ecf3ad73
4 changed files with 50 additions and 1 deletions
+23
View File
@@ -6,6 +6,7 @@ import { createProgressCircle } from "@ui/ui_template_progress";
import {
markProjectPreloaded,
preloadSurfaceAssets,
PRELOAD_NO_SURFACE,
purgeOtherProjects,
readPreloadTarget,
} from "../A00_Common/b_asset_cache";
@@ -64,10 +65,32 @@ export async function renderB11Loading(root: HTMLElement): Promise<void> {
markProjectPreloaded(projectId, signature);
navigateTo(target);
} catch (error) {
// 확정 지표면이 아직 없는 것은 고장이 아니라 순서 문제다 — 장애 안내 대신 할 일을 알린다.
if (error instanceof Error && error.message === PRELOAD_NO_SURFACE) {
showNoSurface();
return;
}
const detail = error instanceof Error ? ` (${error.message})` : "";
showFailure(`${t("B11_Loading_Failed")}${detail}`);
}
function showNoSurface(): void {
progress.root.hidden = true;
message.textContent = t("B11_Loading_NoSurface");
actions.replaceChildren(
createButton({
label: t("B11_Loading_Btn_FileInput"),
variant: "filled",
onClick: () => navigateTo(ROUTES.B03_FILE_INPUT),
}),
createButton({
label: t("B11_Loading_Btn_Dashboard"),
variant: "ghost",
onClick: () => navigateTo(ROUTES.B01_ACCOUNT),
}),
);
}
function showFailure(text: string): void {
progress.root.hidden = true;
message.textContent = text;