- 기준 목록 옵션 줄(바꿈) 뺀 바탕 줄만 · 규격 칸 = 「옵션 N」(새 순수 함수 logic/M02_Find_Heads.ts) — 찾아 넣기 창 · 옛 창(Labor_Pick) 같이 · 옵션 줄 골라도 옵션 버리던 흠 걷음 · 서버 목록 그대로 - 단가산출 상세 [항목 추가] 기초 = 바탕 비었으면 바탕(옛 단추 동작 · 단위 비거나 식이면 기초 결과단위) · logicOnly 걷음 · locale M02_SangeunPickBase 지움 - 낡은 시험 test_721_find_pick 721-1 · 721-2 = 단추 걷음 · logicOnly 없음으로 고침 · 새 시험 test_727_sk_base_add - 기초 줄 1,461(옛 10,053) · GF000099 한 줄 「옵션 1」 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
/* =============================================================================
|
|
* M02_MasterTemplete/logic/M02_Find_Heads.ts
|
|
* 727-1 기준 목록(`/logic-lib/standard` · 로직 하나를 옵션 축마다 펼친 줄) → 기초마다 한 줄 —
|
|
* 바탕 줄(`바꿈` 빈 줄)만 · 규격 칸 = 옵션 축 수(`label(n)` · 없으면 빈칸) · 옵션은 넣은 뒤 고름.
|
|
* 쓰는 곳 = 찾아 넣기 창(`Find_Pick`) · 옛 창(`Labor_Pick`). 화면 · fetch 없음(`CLAUDE.md` 4장).
|
|
* ========================================================================== */
|
|
|
|
export interface HeadRow {
|
|
키: string;
|
|
규격: string;
|
|
바꿈: Record<string, string | number>;
|
|
}
|
|
|
|
export function logicHeads<T extends HeadRow>(rows: T[], label: (n: number) => string): T[] {
|
|
const axes = new Map<string, Set<string>>();
|
|
for (const r of rows)
|
|
for (const k of Object.keys(r.바꿈 ?? {})) {
|
|
if (!axes.has(r.키)) axes.set(r.키, new Set());
|
|
axes.get(r.키)!.add(k);
|
|
}
|
|
return rows
|
|
.filter((r) => !Object.keys(r.바꿈 ?? {}).length)
|
|
.map((r) => {
|
|
const n = axes.get(r.키)?.size ?? 0;
|
|
return { ...r, 규격: n ? label(n) : "" };
|
|
});
|
|
}
|