/* ============================================================================= * B09_Estimation_UI_Builders.ts * B09 탭 표 짜기(PLAN 303-2) — 탭 → 표(`TabTable`) · 표 → 공용 표 옵션(DOM · 누름 없이). * * 화면(Shell) · 팝업 창(303-2) · 인쇄(302-4)가 같은 표 짜기를 씀 — 보는 값 = 찍는 값 * 초안 탭 = `DRAFT.builders`(draft 폴더가 넣음 · 없으면 빈 채로) * ========================================================================== */ import type { DataTableOptions } from "@ui/ui_template_data_table"; import { buildDaegaBlocks, buildDaegaList } from "./B09_Estimation_UI_Tabs_Labor"; import { DRAFT, TABS, type TabBuild, type TabContext, type TabId, type TabTable, } from "./B09_Estimation_UI_Tabs"; import { buildBasis, buildCompare, buildExpense, buildLabor, buildMachine, buildMachineBlocks, buildMaterial, } from "./B09_Estimation_UI_Tabs_Base"; import { buildBill } from "./B09_Estimation_UI_Tabs_Bill"; import type { BillTable } from "./B09_Estimation_UI_Tabs_Bill_Edit"; import { buildSumExpense, buildSumLabor, buildSumMachine, buildSumMaterial, } from "./B09_Estimation_UI_Tabs_Summary"; import { buildCost, buildTotal } from "./B09_Estimation_UI_Tabs_Total"; import { buildSg, buildSgList } from "./B09_Estimation_UI_Tabs_Sangeun"; const BUILDERS: Partial> = { dg_list: buildDaegaList, dg: buildDaegaBlocks, bill: buildBill, basis: buildBasis, machine: buildMachine, machine_blocks: buildMachineBlocks, material: buildMaterial, labor: buildLabor, expense: buildExpense, compare: buildCompare, cost: buildCost, total: buildTotal, sum_material: buildSumMaterial, sum_labor: buildSumLabor, sum_expense: buildSumExpense, sum_machine: buildSumMachine, sg_list: buildSgList, sg: buildSg, }; /** 탭 짜기 — 없는 탭 = null(「다음 단계에서 채움」) · 글 = 안내만 */ export function tabTableOf(tab: TabId, ctx: TabContext): TabTable | string | null { const build = BUILDERS[tab] ?? DRAFT.builders[tab]; return build ? build(ctx) : null; } /** 표 → 공용 표 옵션(화면과 같은 값 · 꼴) — 누름 · 메뉴 · 풍선은 그리는 쪽 몫 */ export function tableOptionsOf(spec: TabTable, tab?: TabId): DataTableOptions { return { columns: spec.columns, rows: spec.rows, total: spec.total ?? null, frozen: spec.frozen ?? 0, empty: "", caption: TABS.find(([id]) => id === tab)?.[1], editable: spec.editable, // 243-1 고칠 수 있는 칸 = 모든 표 더블클릭 · Enter · F2 (설계내역서 키 = 레벨 키 몫) editOnDouble: spec.editOnDouble ?? true, keyEdit: !(spec as BillTable).menu, onEdit: spec.onEdit, rowClass: spec.rowClass, cellClass: spec.cellClass, level: spec.level, mergeSame: spec.mergeSame, }; }