- 끝냄 한 길 M02_Hopyo_Forget.finish — HP · 격자 · 맞춤셈 캐시 지움 · 만든 SC · SK 본뜬 = 출처(파일 · 때 · 누가 + 전국자재 · 복사원본)만 · SC 줄 메모 「실무 …」 걷음 · 실무수량 = 저장 수량.손 과 같을 때만 걷음(742 전 저장본은 남김 = 금액 그대로) · SK 또 = 그 HP 몫만 - 같은 엑셀 다시 올림 409 걷음(끝낸 기록 지문 안 씀 · 키 번은 그대로 이어감) - 하루 지난 HP = 목록 숨김 · 올림 때 끝냄 · 붙여넣기 만듦 뒤 실무자료 끝냄 - 마법사 떠남(다른 화면 · 페이지 닫음) = 이 화면이 쥔 파일 지움(keepalive DELETE) - 뒤 셈이 끝낸 HP 캐시를 다시 쓰지 않음(Fit._put) · 끝냄은 HP 먼저 지우고 캐시 - 옛 파일 정리 tidy(미리 보기 표 · --apply) — 옛 HP · 지문 기록 · HP 없는 문서 사본 - 본뜬 곳 칸 = 끝낸 실무자료는 「실무자료 파일」(originText) - 시험: 718-1 「끝낸 같은 엑셀 409」 → 「다시 올림 새 키」 · 705-2 붙여넣기 실무자료 「남음」 → 「지움」(요구 584-2 로 뜻 바뀜) · 372-2 화면 시험 onDeleted 꼴 바뀜 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
84 lines
3.5 KiB
TypeScript
84 lines
3.5 KiB
TypeScript
/* =============================================================================
|
|
* M02_MasterTemplete_Hopyo_Side.ts
|
|
* 좌측 「일위대가 불러오기」 컨테이너(PLAN 324-4 · 718-1 한시) — [불러오기](구조물 조합 층 단추 꼴 `m02-layers__btn`) →
|
|
* 본 칸 마법사(`M02_MasterTemplete_Hopyo_Wizard` · 결과 층 고름 · 작업 중 이어서 · [끝내기] · 화면 떠남 때 올린 파일 지움) ·
|
|
* 옛 파일 목록 없음(옛 HP 는 서버 목록에서 숨김) ·
|
|
* 아래 [별칭 장부](338-3) → 본 칸 장부 화면(`M02_MasterTemplete_Hopyo_Ledger` · 층 = 구조물 조합 층).
|
|
* ========================================================================== */
|
|
|
|
import { createButton, el } from "@ui/ui_template_elements";
|
|
import { t as L } from "@ui/ui_template_locale";
|
|
import { pageScope } from "./M02_MasterTemplete_Hopyo_Api";
|
|
import { buildHopyoLedger, LEDGER_HINT, LEDGER_TITLE } from "./M02_MasterTemplete_Hopyo_Ledger";
|
|
import { buildHopyoWizard } from "./M02_MasterTemplete_Hopyo_Wizard";
|
|
|
|
export interface HopyoSectionOptions {
|
|
/** 이 층 쓰기 권한 — 별칭 장부 고침(구조물 조합 층이 제자리에서 바뀌어 열 때 읽음 · 720-4) */
|
|
canWrite: () => boolean;
|
|
/** 저장 안 한 고침을 버릴지 확인 — 취소면 false */
|
|
confirmLeave: () => Promise<boolean>;
|
|
/** 메인 칸에 화면을 띄움 */
|
|
show: (label: string, node: HTMLElement) => (dirty: boolean) => void;
|
|
/** 화면을 열었음 — 좌측 다른 고름 표시를 지움 */
|
|
onOpen: () => void;
|
|
}
|
|
|
|
export interface HopyoSection {
|
|
title: string;
|
|
body: HTMLElement;
|
|
/** 다른 화면이 열렸으면 고름 표시를 지움 */
|
|
paint: () => void;
|
|
}
|
|
|
|
const WIZARD = "불러오기";
|
|
|
|
export function buildHopyoSection(opt: HopyoSectionOptions): HopyoSection {
|
|
const title = L("M02_HopyoImport");
|
|
const start = createButton({
|
|
label: "불러오기",
|
|
variant: "filled",
|
|
onClick: () => void showView(WIZARD),
|
|
});
|
|
start.classList.add("m02-layers__btn");
|
|
start.title =
|
|
"다른 프로그램 일위대가 엑셀 → 우리 일위대가(한시 · 끝내거나 떠나면 올린 파일 지움)";
|
|
start.dataset.hopyoWizardOpen = "";
|
|
const ledger = el("button", {
|
|
className: "m02-side__item ui-sidebar-row",
|
|
text: LEDGER_TITLE,
|
|
attrs: { type: "button", title: LEDGER_HINT, "data-hopyo-ledger-open": "" },
|
|
});
|
|
ledger.addEventListener("click", () => void showView(LEDGER_TITLE));
|
|
const body = el("div", {
|
|
className: "m02-hopyo-side",
|
|
children: [el("div", { className: "m02-side__row", children: [start] }), ledger],
|
|
});
|
|
let open: { key: string; view: HTMLElement; leave?: () => void } | null = null;
|
|
|
|
const paintList = (): void => {
|
|
ledger.classList.toggle("is-active", open?.key === LEDGER_TITLE);
|
|
};
|
|
|
|
async function showView(key: string): Promise<void> {
|
|
if (open?.key === key && open.view.isConnected) return;
|
|
if (!(await opt.confirmLeave())) return;
|
|
open?.leave?.(); // 마법사 떠남 = 올린 파일 지움(743-1)
|
|
const wiz = key === WIZARD ? buildHopyoWizard() : null;
|
|
const view = wiz?.root ?? buildHopyoLedger({ scope: pageScope(), canWrite: opt.canWrite() });
|
|
opt.show(key === WIZARD ? title : `${title} — ${LEDGER_TITLE}`, view);
|
|
opt.onOpen();
|
|
open = { key, view, ...(wiz ? { leave: wiz.leave } : {}) };
|
|
paintList();
|
|
}
|
|
|
|
const paint = (): void => {
|
|
if (open && !open.view.isConnected) {
|
|
open.leave?.(); // 다른 화면으로 = 마법사 떠남
|
|
open = null;
|
|
paintList();
|
|
}
|
|
};
|
|
|
|
return { title, body, paint };
|
|
}
|