- 가정하던 서버 함수를 실제 branchCombo · branchMaterialCombo · fetchMaterialCombo(M02 Api_Fetch)로 바꾸고 가정 파일은 열 조합 읽기만 남김 - 재료산출 알약 막대 자재 항목을 그 열 자재 조합 담은 자재로 · 알약 더하기 · 빼기(onItemsChange)와 옆 판 표를 같은 목록으로 맞춤 - 옆 판 줄을 누르면 이은 알약을 눌러 그 칸으로 이동(깜빡임) · 옆 판에서 고치면 알약 막대만 다시 만듦(시트 고침 유지) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWHNLQYPZN7kKf1rzrrRZq
38 lines
2.0 KiB
TypeScript
38 lines
2.0 KiB
TypeScript
/* =============================================================================
|
|
* M02_MasterTemplete_Combo_Api.ts
|
|
* 조합 고치기 · 자재 목록 화면이 함께 쓰는 읽기 — 집계표 열이 가리키는 조합 키 · 같이 쓰는 다른 열 수 ·
|
|
* 서버 까닭 글. 갈라 내기 길(`branchCombo` · `branchMaterialCombo` · `fetchMaterialCombo`)은 `M02_MasterTemplete_Api_Fetch.ts`.
|
|
* ========================================================================== */
|
|
|
|
import { 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<ColumnBase> {
|
|
type Col = { id: string; 일위대가?: string | null; 자재조합?: string | null };
|
|
const table = await readTemplate("system", "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.자재조합),
|
|
};
|
|
}
|