- added fields calculation logic to application page;

This commit is contained in:
Vitalii Kiiko
2025-01-24 16:58:35 +01:00
parent df99a3e77d
commit f23ec7a7a0
3 changed files with 51 additions and 48 deletions

View File

@@ -543,37 +543,39 @@ const BandoApplication = () => {
: ['.p7m'];
useEffect(() => {
if (!isEmpty(fieldsWithVars) && !isEmpty(fieldsWithFormula)) {
const updatedFormValues = klona(formValues);
let context = {};
let updatedFormValues = klona(formValues);
let context = {};
// eslint-disable-next-line array-callback-return
Object.keys(updatedFormValues).map(fieldId => {
if (!isNil(fieldsWithFormula[fieldId])) {
const formula = fieldsWithFormula[fieldId];
context = getTokens(formula)
.filter(v => !['false', 'null', 'true'].includes(v))
.reduce((acc, cur) => {
acc[cur] = isNil(context[cur]) ? 0 : context[cur];
return acc;
}, {});
const mathFormula = renderWithDataVars(formula, context);
try {
updatedFormValues[fieldId] = evaluate(mathFormula);
} catch (e) {
console.log('Error in math formula: "', mathFormula, '"', e.message);
updatedFormValues[fieldId] = 0;
}
}
if (!isNil(fieldsWithVars[fieldId])) {
context[fieldsWithVars[fieldId]] = updatedFormValues[fieldId]
}
});
// eslint-disable-next-line array-callback-return
formData.map((o) => {
const variable = head(o.settings.filter(o => o.name === 'variable'));
const formula = head(o.settings.filter(o => o.name === 'formula'));
if (!isEmpty(updatedFormValues) && !equal(updatedFormValues, formValues)) {
reset(updatedFormValues);
if (formula && !isEmpty(formula.value)) {
context = getTokens(formula.value)
.filter(v => !['false', 'null', 'true'].includes(v))
.reduce((acc, cur) => {
acc[cur] = isNil(context[cur]) ? 0 : context[cur];
return acc;
}, context);
const mathFormula = renderWithDataVars(formula.value, context);
try {
updatedFormValues[o.id] = evaluate(mathFormula);
} catch (e) {
console.log('Error in math formula: "', mathFormula, '"', e.message);
updatedFormValues[o.id] = 0;
}
}
if (variable && !isEmpty(variable.value)) {
context[variable.value[0]] = 'criteria_table' === o.name
? pathOr(0, [o.id, 'total'], updatedFormValues)
: pathOr(0, [o.id], updatedFormValues);
}
});
if (!isEmpty(updatedFormValues) && !equal(updatedFormValues, formValues)) {
reset(updatedFormValues);
}
}, [formValues]);
@@ -663,7 +665,10 @@ const BandoApplication = () => {
const text = head(o.settings.filter(o => o.name === 'text'));
const placeholder = head(o.settings.filter(o => o.name === 'placeholder'));
const options = head(o.settings.filter(o => o.name === 'options'));
const tableColumns = head(o.settings.filter(o => o.name === 'table_columns'));
let tableColumns = head(o.settings.filter(o => o.name === 'table_columns'));
if (!tableColumns) {
tableColumns = head(o.settings.filter(o => o.name === 'criteria_table_columns'));
}
const step = head(o.settings.filter(o => o.name === 'step'));
const mime = head(o.settings.filter(o => o.name === 'mime'));
const formula = head(o.settings.filter(o => o.name === 'formula'));

View File

@@ -40,8 +40,6 @@ const BandoFormsPreview = () => {
const navigate = useNavigate();
const [formData, setFormData] = useState([]);
const [formName, setFormName] = useState('');
const [fieldsWithVars, setFieldsWithVars] = useState({});
const [fieldsWithFormula, setFieldsWithFormula] = useState({});
const isAsyncRequest = useStore().main.isAsyncRequest();
const {
control,