@arudovwen/react-form-builder
Version:
A complete form builder for react.
70 lines (67 loc) • 2.63 kB
JavaScript
;
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"
});
}