fix(M02): 저장 안 한 고침 물음 — 「새 항목」 두 단추 화면으로 갈 때 · 카드 가져오기 전(가져온 뒤 카드를 다시 읽음)

39-5 예외 — 고침이 말없이 버려지지 않게.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
This commit is contained in:
2026-10-04 20:19:31 +09:00
co-authored by Claude Opus 5.5
parent 6f84708909
commit 6d46dda543
3 changed files with 6 additions and 3 deletions
@@ -453,6 +453,8 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane
const word = PART_WORD[kind];
const toNo = to && numbers[to.id]?.[PART_FIELD[kind]];
if (!to || !toNo) return void showToast(TEXT.saveFirst, "error");
// 카드에 저장 안 한 고침 — 가져온 뒤 카드를 다시 읽어 버려지니 먼저 물음
if (cards.dirty() && !(await showConfirmDialog(TEXT.discardCards))) return;
const target = `${toNo} ${columnHead(to)}`;
const here = { layer: getActiveLayer(), owner: getActiveOwner() };
const same = (from: From): boolean => from.layer === here.layer && from.owner === here.owner;
@@ -139,7 +139,7 @@ export async function renderM02MasterTemplate(root: HTMLElement): Promise<Mounte
top: readOnlyBar?.root,
search: tree.search,
// 「새 항목」(30-5) — 제목 줄 오른쪽 끝 · 쓸 수 있는 층만 · 상세 칸에 [새로 만들기] [복사 생성](39-5)
...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => openNew()) } : {}),
...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => void openNew()) } : {}),
onColumn: (column) => {
readOnlyBar?.setColumn(column);
tree.select(column);
@@ -155,7 +155,8 @@ export async function renderM02MasterTemplate(root: HTMLElement): Promise<Mounte
);
/** 새 구조물 조합(39-5 · 답 2) — 새로 만들기 = 나무 「항목 추가」 창 · 복사 생성 = 탭 + 목록 →
* 지금 보는 층 · 나무에서 고른 폴더(없으면 맨 위) · 원래 이름(겹치면 「(2)」) · 새 키 · 새 번호 */
const openNew = (): void => {
const openNew = async (): Promise<void> => {
if (!(await main.confirmLeave())) return; // 집계표 · 카드에 저장 안 한 고침 — 버릴지 물음
const where = (): string => tree.folder().join(" / ") || L("M02_TreeTop");
main.showView(
L("M02_TreeNewItem"),
+1 -1
View File
@@ -306,7 +306,7 @@ def test_구조물_조합_제목_줄_새_항목():
)
assert "if (extras.newItem) extras.newItem.hidden = !combo;" in main
page = _text(M02 / "M02_MasterTemplete_UI_Page.ts")
assert "...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => openNew()) } : {})" in page
assert "...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => void openNew()) } : {})" in page
panel = _text(M02 / "M02_MasterTemplete_TreePanel.ts")
assert 'return at?.kind === "folder" ? at.path : [];' in panel # 고른 폴더(39-5 folder())
assert "const newItem = (): void => void addItem(folder());" in panel