UNPKG

@arudovwen/react-form-builder

Version:
74 lines (68 loc) 2.98 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 = 0, onChange, isReadOnly = false, mappedFields = [], resultData = {} }) { const [combinedFields, setCombinedFields] = (0, _react.useState)([]); // ✅ Build combined fields when in edit mode (not read-only) (0, _react.useEffect)(() => { if (isReadOnly || !Array.isArray(mappedFields)) return; const initialFields = mappedFields.map(field => { const raw = resultData?.[field.field_name] ?? field.value ?? 0; const numericValue = parseFloat(String(raw).replace(/,/g, '')) || 0; return { ...field, value: numericValue }; }); setCombinedFields(initialFields); }, [mappedFields, resultData, isReadOnly]); // ✅ Perform calculation only when not read-only const calculatedResult = (0, _react.useMemo)(() => { if (isReadOnly || !combinedFields.length) { // use previous stored value instead return parseFloat(String(defaultValue).replace(/,/g, '')) || 0; } return combinedFields.reduce((total, { operation, value }, index) => { const num = parseFloat(value) || 0; if (index === 0) return num; switch (operation) { case '+': return total + num; case '-': return total - num; case '*': return total * num; case '/': return num === 0 ? NaN : total / num; default: return total; } }, 0); }, [combinedFields, isReadOnly, defaultValue]); // ✅ Notify parent only in edit mode (0, _react.useEffect)(() => { if (!isReadOnly && typeof onChange === 'function') { const safeValue = Number.isFinite(calculatedResult) && !Number.isNaN(calculatedResult) ? calculatedResult.toLocaleString() : '0'; onChange(safeValue); } }, [calculatedResult, isReadOnly]); // ✅ Display value based on mode const displayValue = Number.isFinite(calculatedResult) && !Number.isNaN(calculatedResult) ? calculatedResult.toLocaleString() : '0'; return /*#__PURE__*/_react.default.createElement("div", { className: "form-control field-control" }, displayValue); }