@wulperstudio/cms
Version:
Wulper Studio Library Components CMS
258 lines • 10.7 kB
JavaScript
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;