/* ============================================================================= * design_reset.ts * [초기화] 한 줄기 — 두 보기의 아래 단추가 **같은 함수**를 부른다(계획서 24-2b). * * 사용자 편집 전부 폐기, 계획노선 CSV 기본값으로 B05·B06 재계산 후 재진입. 네이티브 confirm 은 * 공용 헤드 브라우저가 자동 취소해 버튼이 죽은 듯 보였다(2026-08-19 진단) — 화면 안 모달로 * 확인받는다. (`B05_Profile_UI_Page_Actions.resetDesignAction` 에서 옮겨 왔다 — 동작 그대로.) * ========================================================================== */ import { ROUTES } from "@config/config_frontend"; import { currentLanguageIndex, ui_locales } from "@ui/ui_template_locale"; import { hideLoadingOverlay, showConfirmDialog, showLoadingOverlay, showToast, } from "@ui/ui_template_elements"; import { clearDrafts } from "./../b_page_state"; import { remountRoute } from "./../router"; import { clearRouteLatestCache, resetRouteDesign } from "../../B05_Profile/B05_Profile_Api_Fetch"; import { clearAlignmentDrafts } from "../../B05_Profile/B05_Profile_UI_Profile_Edit"; import { invalidateSectionDetail } from "../../B06_Section/B06_Section_Section_Store"; function L(key: keyof typeof ui_locales): string { return ui_locales[key][currentLanguageIndex]; } /** * [초기화] — 확인을 받고, 서버 초기값 복원 뒤 옛 경로 기준 캐시를 전부 비우고 종단 보기로 다시 들어간다. * `onCleared` 는 페이지만 아는 조작 캐시(상단측 변경분 등)를 비울 자리다. */ export async function resetDesign( projectId: string, routeId: number | null, onCleared?: () => void, ): Promise { if (!(await showConfirmDialog(L("B05_Route_Reset_Confirm"), "초기화"))) return; showLoadingOverlay(); try { await resetRouteDesign(projectId); // 옛 경로 기준 캐시를 전부 비우고 페이지를 새로 그린다 — 초기 계산본이 정본이 된다. clearRouteLatestCache(projectId); invalidateSectionDetail(projectId); // 사용자 조작(② 초안)은 **등록표 한 곳**에서 통째로 버린다(2026-09-06 일원화). // 예전에는 파일마다 따로 지워 새 값이 늘 때 빠뜨리기 쉬웠다. 노선 범위 초안은 // 노선이 바뀌면 키가 달라져 자연히 딸려 오지 않는다. clearDrafts(projectId, routeId); onCleared?.(); // 계획선 편집 초안도 함께 버린다 — 남기면 초기값 위에 옛 편집이 다시 얹혀 계획선이 // 측점에서 원지반선과 만나지 않는다(2026-09-04 실측: 새로고침 후 최대 6.0m 어긋남). clearAlignmentDrafts(); showToast(L("B05_Route_Reset_Success"), "success"); remountRoute(ROUTES.B05_PROFILE); // 같은 페이지라도 다시 세운다 — 보기만 바꾸면 옛 화면이 남음 } catch (error) { showToast(error instanceof Error ? error.message : L("B05_Route_Reset_Failed"), "error"); } finally { hideLoadingOverlay(); } }