- Labor_Rows 671 → 566 줄 · Labor_Detail 700 → 650 줄(717-3 모달 단추 자리) - 낡은 시험 셋 고침: mat_marks · precombo_class = 옮긴 파일을 읽음 · hopyo_screen 의 Detail 「꼭 700 줄」 = 「700 줄 넘지 않음」(나눔으로 줄어듦) - 시험 158 통과 · 1 실패(test_175 B09 겹 대가 = Store_Combo._PER 없음 · 나눔 전부터 · 719-2 몫) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
2.4 KiB
TypeScript
57 lines
2.4 KiB
TypeScript
/* =============================================================================
|
||
* M02_MasterTemplete_Labor_LibMeta.ts
|
||
* 서고 모드(일위대가 · 사전조합) 정보 칸 구분 · 상세구분 고르기(51-12 · 134-5 · `Labor_Detail` 에서 뗌 · 717-3)
|
||
* 고침 = 문서 `구분` · `상세구분` 바로(화면 캐시) · 바꾼 뒤 `changed()`.
|
||
* ========================================================================== */
|
||
|
||
import { createSelectField } from "@ui/ui_template_elements";
|
||
import { fetchStructureDef } from "./StructOptions/M02_SO_Api";
|
||
import { precomboClasses } from "./M02_MasterTemplete_UI_Side_Precombo";
|
||
import { tc } from "./M02_MasterTemplete_Labor_Text";
|
||
|
||
/** 서고 구분 · 상세구분(51-12 · 134-5) — 구조물군 › 종류 + 공통(`precomboClasses`)에서 고름 ·
|
||
* 구분 바꾸면 상세구분 = 그 첫 줄(공통) · 빈 값 = 미분류 */
|
||
export function libMeta(doc: unknown, edit: boolean, changed: () => void): HTMLElement[] {
|
||
const meta = doc as { 구분?: string | null; 상세구분?: string | null };
|
||
const sub = createSelectField({ options: [], label: tc("Sub"), disabled: !edit });
|
||
const detail = createSelectField({ options: [], label: tc("Detail"), disabled: !edit });
|
||
sub.root.dataset.laborField = "구분";
|
||
detail.root.dataset.laborField = "상세구분";
|
||
let subs: { name: string; details: string[] }[] = [];
|
||
// 목록에 없는 지금 값(빈 것 = 「—」 · 옛 문서)도 선택지로 둠
|
||
const opts = (names: string[], now: string | null | undefined) =>
|
||
[...new Set([now ?? "", ...names])]
|
||
.filter((v, i) => v || i === 0)
|
||
.map((v) => ({ value: v, text: v || "—" }));
|
||
const fill = (): void => {
|
||
sub.setOptions(
|
||
opts(
|
||
subs.map((s) => s.name),
|
||
meta.구분,
|
||
),
|
||
meta.구분 ?? "",
|
||
);
|
||
const details = subs.find((s) => s.name === meta.구분)?.details ?? [];
|
||
detail.setOptions(opts(details, meta.상세구분), meta.상세구분 ?? "");
|
||
};
|
||
sub.select.addEventListener("change", () => {
|
||
meta.구분 = sub.select.value;
|
||
meta.상세구분 = subs.find((s) => s.name === meta.구분)?.details[0] ?? null;
|
||
fill();
|
||
changed();
|
||
});
|
||
detail.select.addEventListener("change", () => {
|
||
meta.상세구분 = detail.select.value;
|
||
changed();
|
||
});
|
||
fill();
|
||
void fetchStructureDef().then(
|
||
(def) => {
|
||
subs = precomboClasses(def);
|
||
fill();
|
||
},
|
||
() => undefined,
|
||
);
|
||
return [sub.root, detail.root];
|
||
}
|