glide-design-system
Version:
Glide design system is an open-source React component library. It offers numerous benefits that make them essential tools for design and development teams.
164 lines (161 loc) • 8.73 kB
JavaScript
"use strict";
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.weak-map.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/web.dom-collections.iterator.js");
var _react = _interopRequireWildcard(require("react"));
var _MultiSelectModule = _interopRequireDefault(require("./MultiSelect.module.css"));
var _SelectField = _interopRequireDefault(require("./SelectField"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
const MultiSelect = _ref => {
let {
onChange,
value,
options,
placeholder,
style,
className,
label,
required,
name
} = _ref;
const [isFocused, setIsFocused] = (0, _react.useState)(false);
const [showOptions, setShowOptions] = (0, _react.useState)(false);
const [checkedData, setCheckedData] = (0, _react.useState)([]);
const [unslectedOptions, setUnselectedItems] = (0, _react.useState)();
const [values, setValue] = (0, _react.useState)(value);
const [select, setSelect] = (0, _react.useState)([options]);
const componentRef = (0, _react.useRef)(null);
const handleFocus = () => {
setIsFocused(true);
};
const handleClick = () => {
setIsFocused(true);
setShowOptions(!showOptions);
document.getElementById("options-list").style.display = "block";
};
(0, _react.useEffect)(() => {
onChangeHandler();
const handleClickOutside = event => {
if (componentRef.current && !componentRef.current.contains(event.target)) {
setIsFocused(false);
setShowOptions(false);
document.getElementById("options-list").style.display = "none";
}
};
document.addEventListener("mousedown", handleClickOutside);
return () => {
document.removeEventListener("mousedown", handleClickOutside);
};
}, [unslectedOptions, values, checkedData]);
const cancelOption = (option, value) => {
setUnselectedItems(option); // Assuming setUnselectedItems is the setter function for unslectedOptions state
if (unslectedOptions !== "All") {
const updatedCheckedData = checkedData === null || checkedData === void 0 ? void 0 : checkedData.filter(optionss => {
return (optionss === null || optionss === void 0 ? void 0 : optionss.value) !== option;
});
// Update checkedData state with the filtered data
setCheckedData(updatedCheckedData);
}
};
const onChangeHandler = () => {
if (unslectedOptions !== "All") {
let data = [];
checkedData === null || checkedData === void 0 ? void 0 : checkedData.map(option => {
data === null || data === void 0 ? void 0 : data.push(option === null || option === void 0 ? void 0 : option.value);
});
onChange(data);
}
};
const combinedStyles = _objectSpread({
display: "flex",
height: "100%",
justifyContent: "space-between"
}, style);
return /*#__PURE__*/_react.default.createElement("div", {
ref: componentRef,
style: {
marginBottom: "10px",
height: "auto"
}
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
className: _MultiSelectModule.default.headers
}, label ? label : "Multi Select", required && /*#__PURE__*/_react.default.createElement("span", {
className: _MultiSelectModule.default.required
}, "*"))), /*#__PURE__*/_react.default.createElement("div", {
style: combinedStyles,
onFocus: handleFocus,
onClick: handleClick,
className: "".concat(!className ? _MultiSelectModule.default.parentmMultiselectContainer : className, " ").concat(isFocused ? _MultiSelectModule.default.focused : "")
}, (checkedData === null || checkedData === void 0 ? void 0 : checkedData.length) !== 0 ? /*#__PURE__*/_react.default.createElement("div", {
className: _MultiSelectModule.default.field,
name: name ? name : ""
}, /*#__PURE__*/_react.default.createElement("div", {
className: _MultiSelectModule.default.options
}, checkedData === null || checkedData === void 0 ? void 0 : checkedData.map(option => {
return /*#__PURE__*/_react.default.createElement("div", {
style: {
display: "flex"
}
}, /*#__PURE__*/_react.default.createElement("div", {
className: _MultiSelectModule.default.optionTextField
}, option === null || option === void 0 ? void 0 : option.label, /*#__PURE__*/_react.default.createElement("span", {
style: {
fontSize: "15px",
textAlign: "center",
marginTop: "3px",
cursor: "pointer"
},
onClick: () => {
cancelOption(option === null || option === void 0 ? void 0 : option.value);
},
className: "material-symbols-outlined"
}, "close")));
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("span", {
style: {
fontSize: "23px",
textAlign: "center",
marginTop: "4px",
cursor: "pointer",
display: "flex",
justifyContent: "flex-end"
},
onClick: () => {
setUnselectedItems("All");
setValue([]);
},
class: "material-symbols-outlined"
}, "close"))) : /*#__PURE__*/_react.default.createElement("p", {
className: _MultiSelectModule.default.placeHolderStyle
}, placeholder)), /*#__PURE__*/_react.default.createElement("div", {
id: "options-list",
className: _MultiSelectModule.default.optionsContainer,
style: {
border: "1px solid #ddd",
position: "absolute",
borderRadius: "5px",
display: "none"
}
}, /*#__PURE__*/_react.default.createElement(_SelectField.default, {
checkedData: checkedData,
setCheckedData: setCheckedData,
options: options,
onChange: onChange,
unslectedOptions: unslectedOptions,
setUnselectedItems: setUnselectedItems,
cancelOption: cancelOption,
style: style
})));
};
var _default = MultiSelect;
exports.default = _default;