From 104b6eff8852a5de9241c4ac71aef4a866d1a954 Mon Sep 17 00:00:00 2001 From: faiztyanirh Date: Fri, 6 Mar 2026 11:06:35 +0700 Subject: [PATCH] add feature dynamic payload builder --- .../composable/use-dictionary-form.svelte.js | 16 +++++- .../test/config/test-form-config.js | 47 ++++++++++----- .../dictionary/test/page/create-page.svelte | 57 +++++++++++++++---- 3 files changed, 93 insertions(+), 27 deletions(-) diff --git a/src/lib/components/composable/use-dictionary-form.svelte.js b/src/lib/components/composable/use-dictionary-form.svelte.js index 46d1931..03999be 100644 --- a/src/lib/components/composable/use-dictionary-form.svelte.js +++ b/src/lib/components/composable/use-dictionary-form.svelte.js @@ -11,10 +11,24 @@ // } // } +// export function useDictionaryForm(formState, getActiveFormStates) { +// let hasErrors = $derived.by(() => { +// const mainHasError = Object.values(formState.errors).some(v => v !== null); +// const activeHasError = getActiveFormStates().some(fs => +// Object.values(fs.errors).some(v => v !== null) +// ); +// return mainHasError || activeHasError; +// }); + +// return { +// get hasErrors() { return hasErrors }, +// } +// } + export function useDictionaryForm(formState, getActiveFormStates) { let hasErrors = $derived.by(() => { const mainHasError = Object.values(formState.errors).some(v => v !== null); - const activeHasError = getActiveFormStates().some(fs => + const activeHasError = Object.values(getActiveFormStates()).some(fs => Object.values(fs.errors).some(v => v !== null) ); return mainHasError || activeHasError; diff --git a/src/lib/components/dictionary/test/config/test-form-config.js b/src/lib/components/dictionary/test/config/test-form-config.js index 81066f9..9f2d136 100644 --- a/src/lib/components/dictionary/test/config/test-form-config.js +++ b/src/lib/components/dictionary/test/config/test-form-config.js @@ -995,22 +995,39 @@ export function getTestFormActions(handlers) { ]; } -export function buildTestPayload({ mainForm, calForm, refForm, testType }) { - let payload = { - ...mainForm - }; +// export function buildTestPayload({ mainForm, calForm, refForm, testType }) { +// let payload = { +// ...mainForm +// }; - if (testType === 'CALC') { - payload = { - ...payload, - ...calForm - }; - } else if (testType === 'TEST' || 'PARAM') { - payload = { - ...payload, - ...refForm - }; +// if (testType === 'CALC') { +// payload.calculation = { +// ...calForm +// } +// } else if (testType === 'TEST' || testType === 'PARAM') { +// payload.reference = { +// ...refForm +// }; +// } + +// return cleanEmptyStrings(payload); +// } + +export function buildTestPayload({ mainForm, activeFormStates, testType }) { + let payload = { + ...mainForm + }; + + for (const key in activeFormStates) { + const state = activeFormStates[key]; + + if (state?.form) { + payload[key] = { + ...state.form + }; + } } - return cleanEmptyStrings(payload); + + return cleanEmptyStrings(payload); } diff --git a/src/lib/components/dictionary/test/page/create-page.svelte b/src/lib/components/dictionary/test/page/create-page.svelte index 70be7b8..3154a92 100644 --- a/src/lib/components/dictionary/test/page/create-page.svelte +++ b/src/lib/components/dictionary/test/page/create-page.svelte @@ -55,19 +55,51 @@ modeOpt: 'cascade' }) + // const activeFormStates = $derived.by(() => { + // switch (formState.form.TestType) { + // case "TEST": + // case "PARAM": + // return [refNumState, refTxtState, mapFormState]; + // case "CALC": + // return [calFormState, refNumState, refTxtState, mapFormState]; + // case "GROUP": + // return []; + // case "TITLE": + // return []; + // default: + // return []; + // } + // }); + const activeFormStates = $derived.by(() => { - switch (formState.form.TestType) { + const testType = formState.form.TestType ?? ""; + const refType = formState.form.RefType ?? ""; + + let refState = {}; + + if (refType === "RANGE" || refType === "THOLD") { + refState = { refNum: refNumState }; + } else if (refType === "TEXT" || refType === "VSET") { + refState = { refTxt: refTxtState }; + } + + switch (testType) { case "TEST": case "PARAM": - return [refNumState, refTxtState, mapFormState]; + return { + ...refState, + map: mapFormState + }; case "CALC": - return [calFormState, refNumState, refTxtState, mapFormState]; + return { + cal: calFormState, + ...refState, + map: mapFormState + }; case "GROUP": - return []; case "TITLE": - return []; default: - return []; + return {}; } }); @@ -92,14 +124,12 @@ async function handleSave() { const mainForm = masterDetail.formState.form; - const calForm = calFormState.form; - const refForm = refNumState.form; + const testType = mainForm.TestType; const payload = buildTestPayload({ mainForm, - calForm, - refForm, - testType: mainForm.TestType + activeFormStates, + testType: testType }); console.log(payload); // const result = await formState.save(masterDetail.mode); @@ -401,6 +431,11 @@ // definition: formState.errors, // active: activeFormStates.map(fs => fs.errors) // }); + + // $inspect({ + // definition: formState.errors, + // active: Object.values(activeFormStates).map(fs => fs.errors) + // });