- GET /surface/confirmed 추가: 확정 구성(모델·필터·표현·평활·등고선간격)과 지형 가장자리만 반환(수 KB, 0.02s). 진입 판정·준비화면·B05의 단일 출처. - B05 진입이 받던 포인트클라우드 JSON 23.8MB 제거 — 실제로 쓰던 값은 bounds뿐. - 준비 표식을 프로젝트 ID에서 확정 signature로 변경: B04에서 다시 확정하면 대시보드 복귀·새 브라우저·B그룹 단계 이동 어느 경로로 들어와도 최신본을 담는다. - preloadSurfaceAssets가 평활 여부를 추측하던 부분 제거(확정 저장값 사용) — 추측이 어긋나면 같은 지형을 두 번 내려받았다. - B04 진입 시 필터·표현·평활·등고선간격을 확정본 값으로 초기화(확정 없으면 기존 기본값). - 모델 확정 직후 준비 표식과 B05 세션 캐시를 비워 옛 지형이 남지 않게 함. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import {
|
|
API_BASE_URL,
|
|
CURRENT_PROJECT_ID_KEY,
|
|
ROUTES,
|
|
type RoutePath,
|
|
} from "@config/config_frontend";
|
|
import type { WorkflowStage } from "@ui/ui_template_workflow_layout";
|
|
import { fetchConfirmedSurface } from "../B04_wf1_Surface/B04_wf1_Surface_Api_Fetch";
|
|
import { isProjectPreloaded, setPreloadTarget } from "./b_asset_cache";
|
|
import { navigateTo } from "./router";
|
|
|
|
export interface WorkflowState {
|
|
project_id: string;
|
|
current_stage: number;
|
|
stages: WorkflowStage[];
|
|
}
|
|
|
|
export const WORKFLOW_STEP_ROUTES: readonly RoutePath[] = [
|
|
ROUTES.B03_FILE_INPUT,
|
|
ROUTES.B04_WF1_SURFACE,
|
|
ROUTES.B05_WF2_ROUTE,
|
|
ROUTES.B06_WF3_PROFILE_CROSS,
|
|
ROUTES.B07_WF4_DESIGN_DETAIL,
|
|
ROUTES.B08_WF5_QUANTITY,
|
|
ROUTES.B09_WF6_ESTIMATION,
|
|
];
|
|
|
|
export async function fetchWorkflowState(projectId: string): Promise<WorkflowState> {
|
|
const response = await fetch(`${API_BASE_URL}/projects/${projectId}/workflow-state`, {
|
|
credentials: "include",
|
|
});
|
|
if (!response.ok) {
|
|
throw new Error(`Workflow state request failed: ${response.status}`);
|
|
}
|
|
const data = await response.json();
|
|
return data.workflow_state ?? data;
|
|
}
|
|
|
|
export function goToWorkflowStage(projectId: string, route: RoutePath): void {
|
|
localStorage.setItem(CURRENT_PROJECT_ID_KEY, projectId);
|
|
void routeAfterPreloadCheck(projectId, route);
|
|
}
|
|
|
|
/**
|
|
* 담아 둔 자료가 지금 확정본과 같은지 확인하고 화면을 정한다.
|
|
*
|
|
* 확정 구성을 묻는 요청은 수 KB라 이동할 때마다 물어도 부담이 없다. 담아 둔 표식과 다르면
|
|
* (관리자가 B04에서 다시 확정했거나, 새 브라우저이거나, 다른 프로젝트를 들렀다 온 경우)
|
|
* 준비 화면(B11)을 거쳐 최신 자료를 담고 원래 가려던 화면으로 넘어간다(2026-08-01 사용자 지시).
|
|
* 확인에 실패하면 준비 화면으로 보내 거기서 사유를 안내한다.
|
|
*/
|
|
async function routeAfterPreloadCheck(projectId: string, route: RoutePath): Promise<void> {
|
|
let signature: string | null = null;
|
|
try {
|
|
signature = (await fetchConfirmedSurface(projectId)).signature;
|
|
} catch {
|
|
signature = null;
|
|
}
|
|
if (signature && isProjectPreloaded(projectId, signature)) {
|
|
navigateTo(route);
|
|
return;
|
|
}
|
|
setPreloadTarget(route);
|
|
navigateTo(ROUTES.B11_LOADING);
|
|
}
|