UNPKG

@wulperstudio/cms

Version:
258 lines 10.7 kB
import _typeof from "@babel/runtime/helpers/esm/typeof"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _extends from "@babel/runtime/helpers/esm/extends"; var _Icon, _Icon2; var _excluded = ["variant", "label", "textFieldProps", "onChange", "options", "value", "variantRenderTag", "size", "backgroundColor", "disabledHoverVariantOutAndFlo", "boxProps", "error", "errorMessage", "wrapperInputProps", "helperNode", "onDeleteOption", "errorVariant"]; /* eslint-disable react/no-array-index-key */ import React, { createElement as _createElement } from 'react'; import { Autocomplete, Checkbox, Paper, Box, Typography, Chip, Popper } from '@mui/material'; import { Icon } from '@iconify/react'; import { RenderTagChipAvatar, RenderTextTotal, WrapperInputVariant, BaseInputVariant, InputLabel, ErrorAlert } from '../../base'; import { consts } from '../../helpers'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; var PaperComponent = function PaperComponent(paperProps) { return /*#__PURE__*/_jsx(Paper, _extends({}, paperProps, { sx: { boxShadow: '0px 4px 24px rgba(0, 0, 0, 0.05)', paddingTop: '10px' } })); }; var PopperComponent = function PopperComponent(popperProps) { return /*#__PURE__*/_jsx(Popper, _extends({}, popperProps, { sx: _extends({}, popperProps == null ? void 0 : popperProps.sx, { '& .MuiAutocomplete-listbox': { padding: 0, '& > li': { margin: 0 } }, animation: 'top 2s ease-in-out' }) })); }; var AutocompleteCheckboxMultiple = function AutocompleteCheckboxMultiple(_ref) { var _ref$variant = _ref.variant, variant = _ref$variant === void 0 ? 'divider' : _ref$variant, label = _ref.label, textFieldProps = _ref.textFieldProps, _onChange = _ref.onChange, options = _ref.options, valueFromParent = _ref.value, _ref$variantRenderTag = _ref.variantRenderTag, variantRenderTag = _ref$variantRenderTag === void 0 ? 'total' : _ref$variantRenderTag, size = _ref.size, backgroundColor = _ref.backgroundColor, disabledHoverVariantOutAndFlo = _ref.disabledHoverVariantOutAndFlo, boxProps = _ref.boxProps, error = _ref.error, errorMessage = _ref.errorMessage, wrapperInputProps = _ref.wrapperInputProps, helperNode = _ref.helperNode, onDeleteOption = _ref.onDeleteOption, errorVariant = _ref.errorVariant, props = _objectWithoutProperties(_ref, _excluded); var _React$useState = React.useState(true), _React$useState2 = _slicedToArray(_React$useState, 2), showPlaceholder = _React$useState2[0], _setShowPlaceholder = _React$useState2[1]; var _React$useState3 = React.useState([]), _React$useState4 = _slicedToArray(_React$useState3, 2), selectedValues = _React$useState4[0], setSelectedValues = _React$useState4[1]; var _React$useState5 = React.useState([]), _React$useState6 = _slicedToArray(_React$useState5, 2), data = _React$useState6[0], setData = _React$useState6[1]; var _React$useState7 = React.useState(false), _React$useState8 = _slicedToArray(_React$useState7, 2), onFocusInput = _React$useState8[0], setOnFocusInput = _React$useState8[1]; React.useEffect(function () { var filtered = options.filter(function (el, i, a) { return a.findIndex(function (t) { return (t == null ? void 0 : t.id) === (el == null ? void 0 : el.id) ? t : null; }) === i; }); var newFilter = filtered.filter(function (el) { return selectedValues.indexOf(el) === -1; }); setData([].concat(_toConsumableArray(selectedValues), _toConsumableArray(newFilter))); }, [options, selectedValues]); React.useEffect(function () { var filtered = options.filter(function (el, i, a) { return a.findIndex(function (t) { return (t == null ? void 0 : t.id) === (el == null ? void 0 : el.id) ? t : null; }) === i; }); if (valueFromParent) { setSelectedValues(valueFromParent); var filteredOptions = filtered.filter(function (el) { return valueFromParent.filter(function (dl) { if (_typeof(dl) === 'object' && _typeof(el) === 'object') { return dl.id === el.id; } return dl === el; }).length === 0; }); setData([].concat(_toConsumableArray(selectedValues), _toConsumableArray(filteredOptions))); } }, [options, selectedValues]); return /*#__PURE__*/_jsxs(Box, _extends({}, boxProps, { children: [variant === 'labelOut' && label && /*#__PURE__*/_jsx(InputLabel, { variant: variant, htmlFor: props.id, focused: onFocusInput, children: label }), /*#__PURE__*/_jsxs(WrapperInputVariant, _extends({ error: error, variant: variant, size: size, backgroundColor: backgroundColor, disabledHoverVariantOutAndFlo: disabledHoverVariantOutAndFlo }, wrapperInputProps, { children: [variant !== 'labelOut' && label && /*#__PURE__*/_jsx(InputLabel, { variant: variant, htmlFor: props.id, focused: onFocusInput, children: label }), /*#__PURE__*/_jsx(Autocomplete, _extends({ multiple: true, freeSolo: true, options: data }, props, { getOptionLabel: function getOptionLabel(option) { if (_typeof(option) === 'object' && option !== null) { return option.id !== '' ? option.name : ''; } return option; }, isOptionEqualToValue: function isOptionEqualToValue(option, value) { return (option == null ? void 0 : option.id) === (value == null ? void 0 : value.id); }, fullWidth: true, PopperComponent: PopperComponent, PaperComponent: PaperComponent, renderOption: function renderOption(propsRender, option, _ref2) { var selected = _ref2.selected; return /*#__PURE__*/_createElement("li", _extends({}, propsRender, { key: option == null ? void 0 : option.id }), /*#__PURE__*/_jsxs(Box, { children: [/*#__PURE__*/_jsx(Checkbox, { icon: _Icon || (_Icon = /*#__PURE__*/_jsx(Icon, { icon: "ic:outline-check-box-outline-blank", width: "20", height: "20" })), checkedIcon: _Icon2 || (_Icon2 = /*#__PURE__*/_jsx(Icon, { icon: "ic:round-check-box", width: "20", height: "20" })), sx: { marginRight: 1.5, padding: 0 }, checked: selected }), /*#__PURE__*/_jsx(Typography, { component: "span", children: option.name })] })); }, renderTags: function renderTags(tagValue, getTagProps) { if (variantRenderTag === 'chipText') { return tagValue.map(function (item, i) { return ( /*#__PURE__*/ // eslint-disable-next-line react/jsx-key _jsx(Chip, _extends({ label: item == null ? void 0 : item.name }, getTagProps({ index: i }), { onDelete: function onDelete(e) { e.stopPropagation(); getTagProps({ index: i }).onDelete(e); onDeleteOption == null || onDeleteOption(e, item); } })) ); }); } if (variantRenderTag === 'chipAvatar') { return tagValue.map(function (item, i) { if (typeof item === 'string') { return /*#__PURE__*/_jsx(RenderTagChipAvatar, { label: item, avatarImg: consts.backgroundImageRandom }, i); } return /*#__PURE__*/_jsx(RenderTagChipAvatar, { label: item.name, avatarImg: consts.backgroundImageRandom }, i); }); } return /*#__PURE__*/_jsx(RenderTextTotal, { total: tagValue == null ? void 0 : tagValue.length, setShowPlaceholder: function setShowPlaceholder(v) { return _setShowPlaceholder(v); } }); }, renderInput: function renderInput(params) { return /*#__PURE__*/_jsx(BaseInputVariant, _extends({}, params, textFieldProps, { variant: variant, onFocus: function onFocus(e) { var _textFieldProps$onFoc; setOnFocusInput(true); textFieldProps == null || (_textFieldProps$onFoc = textFieldProps.onFocus) == null || _textFieldProps$onFoc.call(textFieldProps, e); }, onBlur: function onBlur(e) { var _textFieldProps$onBlu; setOnFocusInput(false); textFieldProps == null || (_textFieldProps$onBlu = textFieldProps.onBlur) == null || _textFieldProps$onBlu.call(textFieldProps, e); }, placeholder: showPlaceholder ? (textFieldProps == null ? void 0 : textFieldProps.placeholder) || 'Select option' : '' })); }, onChange: function onChange(e, value) { if (typeof value === 'string') return; if (Array.isArray(value) && typeof value[0] === 'string') return; if (_typeof(value) === 'object') { if (_onChange && !!value) _onChange(e, value); } if (Array.isArray(value) && _typeof(value[0]) === 'object') { if (_onChange && !!value) _onChange(e, value); } }, value: valueFromParent, componentsProps: { paper: { sx: function sx(theme) { return { '& .MuiAutocomplete-listbox .MuiAutocomplete-option': { p: '10px' }, backgroundColor: theme.palette.background["default"], padding: '10px', borderRadius: '15px', border: "1px solid ".concat(theme.palette.background.paper), boxShadow: theme.shadows[2] }; } } } }))] })), helperNode, error && /*#__PURE__*/_jsx(ErrorAlert, { variant: errorVariant, children: errorMessage })] })); }; export default AutocompleteCheckboxMultiple;