UNPKG

@arudovwen/react-form-builder

Version:
70 lines (67 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ArithmeticComponentView; var _react = _interopRequireWildcard(require("react")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } /* eslint-disable no-unused-vars */ function ArithmeticComponentView({ defaultValue = [], onChange, isReadOnly, mappedFields = [], resultData = [] }) { const [combinedFields, setCombinedFields] = (0, _react.useState)([]); const [result, setResult] = (0, _react.useState)(defaultValue); (0, _react.useEffect)(() => { // Initialize combinedFields on mount or mappedFields change const initialFields = mappedFields.map((field, i) => { const raw = resultData?.[field.field_name] ?? ''; const val = parseFloat(String(raw).replace(/,/g, '')) || field.value || ''; return { ...field, value: Number.isNaN(val) ? '' : val }; }); setCombinedFields(initialFields); }, [mappedFields, resultData]); const calculateResult = (0, _react.useMemo)(() => { const valid = combinedFields.filter(f => f.value !== '' && !Number.isNaN(parseFloat(f.value))); if (valid.length === 0) return null; let total = parseFloat(valid[0].value); for (let i = 1; i < valid.length; i++) { const { operation, value } = valid[i]; const numVal = parseFloat(value); switch (operation) { case '+': total += numVal; break; case '-': total -= numVal; break; case '*': total *= numVal; break; case '/': total = numVal === 0 ? NaN : total / numVal; break; default: break; } } return total; }, [combinedFields]); (0, _react.useEffect)(() => { setResult(calculateResult); if (onChange) onChange(calculateResult?.toString()); }, [calculateResult]); // console.log({combinedFields, resultData}); return /*#__PURE__*/_react.default.createElement("div", { className: "max-w-md" }); }