@react-awesome-query-builder/mui
Version:
User-friendly query builder for React. MUI 5 widgets
146 lines (144 loc) • 7 kB
JavaScript
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
var _excluded = ["items", "selectedKey", "setField", "isValueField", "selectedLabel", "selectedOpts", "selectedAltLabel", "selectedFullLabel"];
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import React, { useCallback } from "react";
import MuiAutocomplete from "../value/MuiAutocomplete";
// see type FieldItemSearchableKeys
var mapFieldItemToOptionKeys = {
key: "_value2",
path: "value",
label: "title",
altLabel: "_altLabel",
tooltip: "tooltip",
grouplabel: "groupTitle"
};
var _itemsToListValues = function itemsToListValues(items) {
var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var parentGroups = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var lvs = items.map(function (item) {
var items = item.items,
path = item.path,
key = item.key,
label = item.label,
altLabel = item.altLabel,
disabled = item.disabled,
grouplabel = item.grouplabel,
group = item.group,
matchesType = item.matchesType,
tooltip = item.tooltip;
var getPrefix = function getPrefix(lev) {
return "\xA0\xA0".repeat(lev);
};
var prefix = getPrefix(level);
if (items) {
return _itemsToListValues(items, level + 1, [].concat(_toConsumableArray(parentGroups), [item]));
} else {
return {
title: label,
renderTitle: matchesType ? /*#__PURE__*/React.createElement("b", null, prefix + label) : prefix + label,
value: path,
disabled: disabled,
groupTitle: level > 0 ? prefix + grouplabel : null,
group: level > 0 ? _objectSpread(_objectSpread({}, group), {}, {
label: prefix + group.label,
parentGroups: parentGroups.map(function (_ref, ind) {
var tooltip = _ref.tooltip,
label = _ref.label,
path = _ref.path;
return {
path: path,
tooltip: tooltip,
label: getPrefix(ind) + label
};
})
}) : null,
tooltip: tooltip,
_value2: key,
_altLabel: altLabel
};
}
}).flat(Infinity);
// Don't repeat groups
var usedGroups = [];
var _iterator = _createForOfIteratorHelper(lvs),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var lv = _step.value;
if (lv.group) {
lv.group.parentGroups = lv.group.parentGroups.filter(function (_ref2) {
var path = _ref2.path;
return !usedGroups.includes(path);
});
var _iterator2 = _createForOfIteratorHelper(lv.group.parentGroups),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var gr = _step2.value;
usedGroups.push(gr.path);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return lvs;
};
var fieldAdapter = function fieldAdapter(_ref3, config) {
var items = _ref3.items,
selectedKey = _ref3.selectedKey,
setField = _ref3.setField,
isValueField = _ref3.isValueField,
selectedLabel = _ref3.selectedLabel,
selectedOpts = _ref3.selectedOpts,
selectedAltLabel = _ref3.selectedAltLabel,
selectedFullLabel = _ref3.selectedFullLabel,
rest = _objectWithoutProperties(_ref3, _excluded);
var tooltipText = selectedAltLabel || selectedFullLabel;
if (tooltipText == selectedLabel) tooltipText = null;
var listValues = _itemsToListValues(items);
var value = selectedKey;
var setValue = function setValue(value, _asyncValues) {
if (!value && !isValueField) return undefined;
return setField(value);
};
var filterOptionsConfig = {
stringify: useCallback(function (option) {
var keysForFilter = config.settings.fieldItemKeysForSearch.map(function (k) {
return mapFieldItemToOptionKeys[k];
});
var valueForFilter = keysForFilter.map(function (k) {
return typeof option[k] == "string" ? option[k] : "";
}).join("\0");
return valueForFilter;
}, [config])
};
return _objectSpread(_objectSpread({}, rest), {}, {
tooltipText: tooltipText,
listValues: listValues,
setValue: setValue,
filterOptionsConfig: filterOptionsConfig,
allowCustomValues: false,
multiple: false,
disableClearable: !isValueField,
value: value,
isFieldAutocomplete: true,
dontFixOptionsOrder: true // don't apply fixListValuesGroupOrder() for options
});
};
export default (function (props) {
return /*#__PURE__*/React.createElement(MuiAutocomplete, fieldAdapter(props, props.config));
});