UNPKG

@arudovwen/react-form-builder

Version:
81 lines (78 loc) 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; 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); } const CascadeDropdown = ({ firstDropdownOptions, secondDropdownOptions, firstLabel, secondLabel, onGetValue, defaultValue, readOnly }) => { // State to manage the selected value from both dropdowns const [selectedFirst, setSelectedFirst] = (0, _react.useState)(''); const [selectedSecond, setSelectedSecond] = (0, _react.useState)(''); // Handle the first dropdown change const handleFirstDropdownChange = e => { setSelectedFirst(e.target.value); setSelectedSecond(''); // Reset second dropdown when first changes }; // Handle the second dropdown change const handleSecondDropdownChange = e => { setSelectedSecond(e.target.value); }; (0, _react.useEffect)(() => { if (onGetValue && selectedSecond && selectedFirst) { onGetValue(`${selectedFirst}_${selectedSecond}`); } }, [selectedFirst, selectedSecond]); (0, _react.useEffect)(() => { if (defaultValue && defaultValue.includes('_')) { const splitValue = defaultValue?.split('_'); if (splitValue[0]) setSelectedFirst(splitValue[0]); if (splitValue[1]) setSelectedSecond(splitValue[1]); } }, [defaultValue]); const filteredSecondOption = (0, _react.useMemo)(() => secondDropdownOptions // eslint-disable-next-line eqeqeq ?.filter(i => i.key == selectedFirst), [selectedFirst, secondDropdownOptions]); return /*#__PURE__*/_react.default.createElement("div", { className: "" }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("label", { htmlFor: "first-dropdown", className: "block mb-2 text-sm font-medium text-gray-700" }, firstLabel), /*#__PURE__*/_react.default.createElement("select", { id: "first-dropdown", value: selectedFirst, onChange: handleFirstDropdownChange, className: "form-control", disabled: readOnly }, /*#__PURE__*/_react.default.createElement("option", { value: "" }, "Select an option"), firstDropdownOptions?.map(option => /*#__PURE__*/_react.default.createElement("option", { key: option.key, value: option.value }, option.label)))), selectedFirst && /*#__PURE__*/_react.default.createElement("div", { className: "mt-4" }, /*#__PURE__*/_react.default.createElement("label", { htmlFor: "second-dropdown", className: "block mb-2 text-sm font-medium text-gray-700" }, secondLabel), /*#__PURE__*/_react.default.createElement("select", { id: "second-dropdown", value: selectedSecond, onChange: handleSecondDropdownChange, className: "form-control", disabled: readOnly }, /*#__PURE__*/_react.default.createElement("option", { value: "" }, "Select an option"), filteredSecondOption?.map(option => /*#__PURE__*/_react.default.createElement("option", { key: option.value, value: option.value }, option.label))))); }; var _default = exports.default = CascadeDropdown;