@react-awesome-query-builder/mui
Version:
User-friendly query builder for React. MUI 5 widgets
62 lines • 2.34 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import React from "react";
import MenuItem from "@mui/material/MenuItem";
import FormControl from "@mui/material/FormControl";
import Select from "@mui/material/Select";
import Checkbox from "@mui/material/Checkbox";
import ListItemText from "@mui/material/ListItemText";
import omit from "lodash/omit";
import { Utils } from "@react-awesome-query-builder/ui";
var mapListValues = Utils.ListUtils.mapListValues;
export default (function (_ref) {
var listValues = _ref.listValues,
value = _ref.value,
setValue = _ref.setValue,
allowCustomValues = _ref.allowCustomValues,
readonly = _ref.readonly,
placeholder = _ref.placeholder,
customProps = _ref.customProps;
var renderOptions = function renderOptions(selectedValues) {
return mapListValues(listValues, function (_ref2) {
var title = _ref2.title,
value = _ref2.value;
return /*#__PURE__*/React.createElement(MenuItem, {
key: value,
value: value
}, /*#__PURE__*/React.createElement(Checkbox, {
checked: selectedValues.indexOf(value) > -1
}), /*#__PURE__*/React.createElement(ListItemText, {
primary: title
}));
});
};
var renderValue = function renderValue(selectedValues) {
if (!readonly && !selectedValues.length) return placeholder;
var selectedTitles = mapListValues(listValues, function (_ref3) {
var title = _ref3.title,
value = _ref3.value;
return selectedValues.indexOf(value) > -1 ? title : null;
}).filter(function (v) {
return v !== null;
});
return selectedTitles.join(", ");
};
var hasValue = value != null && value.length > 0;
var onChange = function onChange(e) {
if (e.target.value === undefined) return;
setValue(e.target.value);
};
return /*#__PURE__*/React.createElement(FormControl, null, /*#__PURE__*/React.createElement(Select, _extends({
multiple: true,
variant: "standard",
autoWidth: true,
displayEmpty: true,
label: !readonly ? placeholder : "",
onChange: onChange,
value: hasValue ? value : [],
disabled: readonly,
readOnly: readonly,
renderValue: renderValue,
size: "small"
}, omit(customProps, ["showSearch", "input", "showCheckboxes"])), renderOptions(hasValue ? value : [])));
});