/* ============================================================================= * M02_MasterTemplete_Combo_Api.ts * 조합 고치기 · 자재 목록 화면이 함께 쓰는 읽기 — 집계표 열이 가리키는 조합 키 · 같이 쓰는 다른 열 수 · * 서버 까닭 글. 갈라 내기 길(`branchCombo` · `branchMaterialCombo` · `fetchMaterialCombo`)은 `M02_MasterTemplete_Api_Fetch.ts`. * ========================================================================== */ import { getActiveLayer, readTemplate } from "./M02_MasterTemplete_Api_Fetch"; /** 구조물집계표 이름 — `M02_MasterTemplete_Structure.STRUCTURE_TABLE` 과 같은 글 */ const STRUCTURE_TABLE = "구조물집계표"; /** 집계표 열이 가리키는 조합 키 + 같은 조합을 쓰는 다른 열 수 */ export interface ColumnBase { 일위대가: string | null; 자재조합: string | null; 다른열일위대가: number; 다른열자재조합: number; } /** 서버가 준 까닭 글 */ export const reasonOf = (error: unknown): string => (error instanceof Error ? error.message : ""); /** 집계표(시스템 층)에서 이 열의 일위대가 · 자재조합 키와 같이 쓰는 다른 열 수 */ export async function readColumnBase(column: string): Promise { type Col = { id: string; 일위대가?: string | null; 자재조합?: string | null }; const table = await readTemplate(getActiveLayer(), "table", STRUCTURE_TABLE, null).catch( () => null, ); const cols = ((table?.문서 as { 열?: Col[] } | null)?.열 ?? []) as Col[]; const mine = cols.find((c) => c.id === column); const same = (key: string | null | undefined, pick: (c: Col) => string | null | undefined) => key ? cols.filter((c) => c.id !== column && pick(c) === key).length : 0; return { 일위대가: mine?.일위대가 || null, 자재조합: mine?.자재조합 || null, 다른열일위대가: same(mine?.일위대가, (c) => c.일위대가), 다른열자재조합: same(mine?.자재조합, (c) => c.자재조합), }; }