diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts index 4da5b2a4..8df33ece 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Main.ts @@ -55,7 +55,7 @@ export function canEdit(layer: Layer, isAdmin: boolean): boolean { return layer === "project" || layer === "personal" || (layer === "system" && isAdmin); } -export function createMain(isAdmin: boolean): MainHandle { +export function createMain(isAdmin: boolean, onSaved?: () => void): MainHandle { const title = el("h2", { className: "m02-main__title", text: L("M02_PickTemplate") }); const reload = createButton({ label: L("M02_Reload"), variant: "ghost" }); const save = createButton({ label: L("M02_Save"), variant: "filled" }); @@ -168,6 +168,7 @@ export function createMain(isAdmin: boolean): MainHandle { loaded = doc; showNotice([]); showToast(L("M02_Saved"), "success"); + onSaved?.(); // 좌측 목록의 판을 새 판으로 } catch (error) { if (error instanceof StaleError) { const again = createButton({ label: L("M02_Reload"), variant: "ghost" }); diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts index e68eac33..640f0dd4 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts @@ -17,7 +17,7 @@ import "./M02_MasterTemplete_UI_Style.css"; export async function renderM02MasterTemplate(root: HTMLElement): Promise { const user = await fetchSessionUser().catch(() => null); const isAdmin = user?.role === "SYSTEM_ADMIN"; - const main = createMain(isAdmin); + const main = createMain(isAdmin, () => void side.refresh()); const side = buildSide({ isAdmin, userName: user?.name, diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts index 41b38e3a..8a618795 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts @@ -334,6 +334,7 @@ export function buildSide(opt: SideOptions): SideHandle { }); }); btnDel.addEventListener("click", async () => { + await refresh(); // 저장 직후여도 최신 판으로 const info = currentInfo(); if (!info) return; if (!(await showConfirmDialog(L("M02_DeleteConfirm").replace("{value}", info.이름)))) return;