diff --git a/M01_MasterData/EasyCalc/M01_EasyCalc_Cards.ts b/M01_MasterData/EasyCalc/M01_EasyCalc_Cards.ts index f2eef8ac5..666bb13a9 100644 --- a/M01_MasterData/EasyCalc/M01_EasyCalc_Cards.ts +++ b/M01_MasterData/EasyCalc/M01_EasyCalc_Cards.ts @@ -23,6 +23,7 @@ import { type PickResult, } from "./M01_EasyCalc_Model"; import { openEasyPick } from "./M01_EasyCalc_Pick"; +import { openEasyCond, readCond } from "./M01_EasyCalc_Cond"; import { openEasyTable, readFinds } from "./M01_EasyCalc_Table"; import "./M01_EasyCalc_Cards.css"; @@ -62,6 +63,7 @@ const TEXT = { Locked: ["잠김", "Locked"], ToNumber: ["숫자로 바꾸기", "Make it a number"], ByTable: ["표 보고 고르기", "Choose from table"], + ByCond: ["조건 보고 고치기", "Edit conditions"], ToNumber_Wait: ["계산이 끝난 뒤 가능", "Available after calculation"], ToNumber_Ask: [ "자동 값을 그대로 숫자로 바꿈 · 이후 자동으로 달라지지 않음", @@ -207,11 +209,16 @@ async function lockToNumber(ctx: Ctx, card: EasyCard, value: number): Promise { +/** 표 · 조건 창 — 답(새 식)이 있으면 그 카드 식만 바꿈 */ +async function editFormula( + ctx: Ctx, + card: EasyCard, + open: typeof openEasyTable | typeof openEasyCond, +): Promise { if (picking) return; picking = true; try { - const formula = await openEasyTable(card, ctx.doc, ctx.on.trial?.()); + const formula = await open(card, ctx.doc, ctx.on.trial?.()); if (formula !== null) patchCard(ctx, card, { qtyFormula: formula }); } finally { picking = false; @@ -427,16 +434,21 @@ function lockedNote(ctx: Ctx, card: EasyCard): HTMLElement { }); if (!line) button.title = tc("ToNumber_Wait"); note.push(button); - // 표 찾기가 있는 식만 — 조건 꼴 [조건 보고 고치기] 자리는 비워 둠(sub7) - if (card.qtyFormula !== null && readFinds(card.qtyFormula)?.length) { - note.push( - createButton({ - label: tc("ByTable"), - variant: "ghost", - size: "sm", - onClick: () => void pickFromTable(ctx, card), - }), - ); + const formula = card.qtyFormula; + const tools: [boolean, keyof typeof TEXT, typeof openEasyTable | typeof openEasyCond][] = [ + [formula !== null && !!readFinds(formula)?.length, "ByTable", openEasyTable], + [formula !== null && !!readCond(formula, ctx.doc.row), "ByCond", openEasyCond], + ]; + for (const [has, label, open] of tools) { + if (has) + note.push( + createButton({ + label: tc(label), + variant: "ghost", + size: "sm", + onClick: () => void editFormula(ctx, card, open), + }), + ); } } return el("div", { className: "m01-easycards-locknote", children: note });