UNPKG

@arudovwen/react-form-builder

Version:
77 lines (73 loc) 3.42 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactCurrencyInputField = _interopRequireDefault(require("react-currency-input-field")); 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 */ const DynamicInputList = ({ initialFields = [], getValues, readOnly = false, tempDefaultValue = {} }) => { // Initialize merged fields only once const [fields, setFields] = (0, _react.useState)([]); (0, _react.useEffect)(() => { const tempData = initialFields?.map(field => ({ ...field, value: tempDefaultValue?.[field.key] ?? field.value })); setFields(tempData); }, [initialFields]); const handleChange = (index, field, newValue) => { if (readOnly) return; const updated = [...fields]; updated[index][field] = newValue; setFields(updated); // Sync the transformed values immediately on change const updatedTransformed = updated.reduce((acc, f) => { if (f.key.trim()) acc[f.key] = f.value; return acc; }, {}); // eslint-disable-next-line no-unused-expressions getValues?.(updatedTransformed); }; // For debugging or UI preview const transformedFields = (0, _react.useMemo)(() => fields.reduce((acc, field) => { if (field.key.trim()) { acc[field.key] = field.value; } return acc; }, {}), [fields]); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, fields.map((field, index) => /*#__PURE__*/_react.default.createElement("div", { key: index, style: { marginBottom: 10 } }, /*#__PURE__*/_react.default.createElement("label", { className: "block text-sm text-[#686878] darks:!text-white/70 mb-2" }, field.label), field?.type === 'number' ? /*#__PURE__*/_react.default.createElement(_reactCurrencyInputField.default, { id: field.key, placeholder: `Provide ${field.label?.toLowerCase() || 'value'}`, className: "w-full px-3 py-1 border border-gray-100 rounded outline-none", decimalsLimit: 6, defaultValue: field.value, onValueChange: e => handleChange(index, 'value', e), disabled: readOnly, allowNegativeValue: false }) : /*#__PURE__*/_react.default.createElement("input", { placeholder: `Provide ${field.label?.toLowerCase() || 'value'}`, value: field.value, id: field.key, name: field.key, type: field.type, onChange: e => handleChange(index, 'value', e.target.value), readOnly: readOnly, className: "w-full px-3 py-1 border border-gray-100 rounded outline-none" }))))); }; var _default = exports.default = DynamicInputList;