fix(M01): 시험 계산 · 조합 미리 보기 견본 딱지 없앰 — 자동 채움 · 열자마자 계산은 그대로 (PLAN 7장 첫 줄)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
This commit is contained in:
@@ -57,19 +57,13 @@ export interface CalcContext {
|
||||
|
||||
const SUMS = ["노무비", "재료비", "경비", "계"];
|
||||
|
||||
/** 로직마다 자동값을 한 번만 받음(다시 그려도 안 부름) · 견본으로 채운 입력 이름 — 사용자가 고치면 빠짐 */
|
||||
/** 로직마다 자동값을 한 번만 받음(다시 그려도 안 부름) */
|
||||
const autoAsked = new WeakSet<Record<string, string>>();
|
||||
const sampled = new WeakMap<Record<string, string>, Set<string>>();
|
||||
|
||||
/** 로직을 열 때마다 새로 부르는 미리보기 — 늦게 온 응답이 새 로직을 덮지 않게 순번으로 거름 */
|
||||
let previewSeq = 0;
|
||||
|
||||
export function buildCalc(host: HTMLElement, ctx: CalcContext): void {
|
||||
const marks = sampled.get(ctx.values) ?? new Set<string>();
|
||||
const edited = (name: string, tag?: HTMLElement): void => {
|
||||
marks.delete(name);
|
||||
tag?.remove();
|
||||
};
|
||||
// 그릇 폭 280px 고정 칸은 옛 테스트 컨테이너(UI_Test*, 걷힘)의 죽은 CSS 규칙 —
|
||||
// 지금 쓰는 LogicLab 화면은 그 칸에 안 걸려 폭이 이미 넓음(실측 730px) · 따로 안 풂
|
||||
const optionText = (o: string | number): string =>
|
||||
@@ -78,9 +72,6 @@ export function buildCalc(host: HTMLElement, ctx: CalcContext): void {
|
||||
const name = spec.이름;
|
||||
let control: HTMLElement;
|
||||
const picks = spec.고르기;
|
||||
const tag = marks.has(name)
|
||||
? el("span", { className: "m01-logic__tag", text: tx("Calc_Sample") })
|
||||
: undefined;
|
||||
if (picks?.length) {
|
||||
const pick = createSelectField({
|
||||
options: ["", ...picks.map(String)].map((o) => ({ value: o, text: optionText(o) })),
|
||||
@@ -88,7 +79,6 @@ export function buildCalc(host: HTMLElement, ctx: CalcContext): void {
|
||||
compact: true,
|
||||
onChange: (v) => {
|
||||
ctx.values[name] = v;
|
||||
edited(name, tag);
|
||||
},
|
||||
});
|
||||
control = pick.root;
|
||||
@@ -110,7 +100,6 @@ export function buildCalc(host: HTMLElement, ctx: CalcContext): void {
|
||||
box.value = ctx.values[name] ?? "";
|
||||
box.addEventListener("input", () => {
|
||||
ctx.values[name] = box.value;
|
||||
edited(name, tag);
|
||||
});
|
||||
control = box;
|
||||
}
|
||||
@@ -119,7 +108,7 @@ export function buildCalc(host: HTMLElement, ctx: CalcContext): void {
|
||||
const wide = label.length > 10;
|
||||
return el("label", {
|
||||
className: `m01-logic__field${wide ? " m01-logic__field--wide" : ""}`,
|
||||
children: [el("span", { text: label }), ...(tag ? [tag] : []), control],
|
||||
children: [el("span", { text: label }), control],
|
||||
});
|
||||
});
|
||||
const out = el("div", { className: "m01-logic__calc-out" });
|
||||
@@ -152,8 +141,7 @@ export function buildCalc(host: HTMLElement, ctx: CalcContext): void {
|
||||
.filter((n) => auto[n] !== undefined && auto[n] !== null && !(ctx.values[n] ?? "").trim());
|
||||
if (!names.length || previewSeq !== mySeqAtOpen) return; // 값이 없거나 다른 로직이 이미 열림
|
||||
for (const n of names) ctx.values[n] = String(auto[n]);
|
||||
sampled.set(ctx.values, new Set([...marks, ...names]));
|
||||
buildCalc(host, ctx); // 채운 값·견본 딱지를 새로 그리고 바로 계산(결과 · 텍스트 수식까지)
|
||||
buildCalc(host, ctx); // 채운 값을 새로 그리고 바로 계산(결과 · 텍스트 수식까지)
|
||||
host.querySelector("button")?.click();
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user