UNPKG

@arudovwen/react-form-builder

Version:
114 lines (111 loc) 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = DataGridOptions; 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); } function DataGridOptions({ value = [], onChange, onGetUrl }) { const [dataFields, setDataFields] = (0, _react.useState)(value.length > 0 ? value : [{ id: Date.now(), field: '', headerName: '', type: 'text', editable: true, validate: false }]); const [url, setUrl] = (0, _react.useState)(''); // Handle input change const handleChange = (index, key, newValue) => { const updated = dataFields.map((item, idx) => idx === index ? { ...item, [key]: newValue } : item); setDataFields(updated); if (onChange) onChange(updated); }; // Add new column const addColumn = () => { const updated = [...dataFields, { id: Date.now() + Math.random(), field: '', headerName: '', type: 'text', editable: true, validate: false }]; setDataFields(updated); if (onChange) onChange(updated); }; // Remove column const removeColumn = index => { const updated = dataFields.filter((_, idx) => idx !== index); setDataFields(updated); if (onChange) onChange(updated); }; (0, _react.useEffect)(() => { onGetUrl(url); }, [url]); return /*#__PURE__*/_react.default.createElement("div", { className: "space-y-2" }, dataFields.map((field, index) => /*#__PURE__*/_react.default.createElement("div", { key: field.id }, /*#__PURE__*/_react.default.createElement("div", { className: "flex items-center gap-x-4" }, /*#__PURE__*/_react.default.createElement("div", { className: "flex-1" }, /*#__PURE__*/_react.default.createElement("select", { value: field.type, onChange: e => handleChange(index, 'type', e.target.value), className: "w-full px-2 py-1 text-sm border rounded focus:outline-none" }, /*#__PURE__*/_react.default.createElement("option", { value: "text" }, "Text"), /*#__PURE__*/_react.default.createElement("option", { value: "number" }, "Number"), /*#__PURE__*/_react.default.createElement("option", { value: "checkbox" }, "Checkbox"))), /*#__PURE__*/_react.default.createElement("div", { className: "flex-1" }, /*#__PURE__*/_react.default.createElement("input", { type: "text", value: field.field, onChange: e => handleChange(index, 'field', e.target.value), placeholder: "Field key", className: "w-full px-2 py-1 text-sm border rounded outline-none ine-none focus:outline-none" })), /*#__PURE__*/_react.default.createElement("div", { className: "flex-1" }, /*#__PURE__*/_react.default.createElement("input", { type: "text", value: field.headerName, onChange: e => handleChange(index, 'headerName', e.target.value), placeholder: "Header name", className: "w-full px-2 py-1 text-sm border rounded outline-none focus:outline-none" })), /*#__PURE__*/_react.default.createElement("label", { className: "flex items-center mb-0 gap-x-2" }, /*#__PURE__*/_react.default.createElement("input", { type: "checkbox", checked: field.validate, onChange: e => handleChange(index, 'validate', e.target.checked) }), "Validate"), /*#__PURE__*/_react.default.createElement("button", { type: "button", disabled: dataFields.length === 1, onClick: () => removeColumn(index), className: "text-xs text-red-500 focus:outline-none hover:opacity-80 disabled:opacity-40 disabled:cursor-not-allowed" }, "Remove")), field.validate && /*#__PURE__*/_react.default.createElement("div", { className: "mt-1" }, /*#__PURE__*/_react.default.createElement("input", { placeholder: "Provide validation api url", className: "w-full px-2 py-1 text-sm border rounded outline-none focus:outline-none", type: "text", value: url, onChange: e => setUrl(e.target.value) })))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("button", { type: "button", onClick: addColumn, className: "flex items-center mt-2 text-xs font-medium text-gray-700 focuse:outline-none gap-x-1" }, "Add column"))); }