@yuntijs/ui
Version:
☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps
69 lines • 3.39 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
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 { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
import { escapeRegExp } from 'lodash-es';
import { useCallback, useMemo } from 'react';
import { INSERT_MENTION_COMMAND } from "../mention-node";
import { MentionMenuOption } from "./utils";
var filterOptionWithChildren = function filterOptionWithChildren(option, filterOption) {
var _option$children;
option.children = (_option$children = option.children) === null || _option$children === void 0 ? void 0 : _option$children.filter(function (o) {
if (!o.children) {
return filterOption(o);
}
var newO = filterOptionWithChildren(o, filterOption);
return filterOption(o) || (newO.children || []).length > 0;
});
return option;
};
export var useOptions = function useOptions(allOptions, queryString, trigger) {
var _useLexicalComposerCo = useLexicalComposerContext(),
_useLexicalComposerCo2 = _slicedToArray(_useLexicalComposerCo, 1),
editor = _useLexicalComposerCo2[0];
var filterOption = useCallback(function (option) {
var _option$keywords;
if (option.triggers && trigger && !option.triggers.includes(trigger)) {
return false;
}
var regex = new RegExp(escapeRegExp(queryString), 'i');
return regex.test(option.label) || ((_option$keywords = option.keywords) === null || _option$keywords === void 0 ? void 0 : _option$keywords.some(function (keyword) {
return regex.test(keyword);
})) || false;
}, [queryString, trigger]);
var options = useMemo(function () {
var _addOnselect = function _addOnselect(option) {
var menuOption = _objectSpread(_objectSpread({}, option), {}, {
title: option.title || option.selectedLabel,
children: undefined,
onSelect: function onSelect() {
editor.dispatchCommand(INSERT_MENTION_COMMAND, option.value);
}
});
if (option.children) {
menuOption.children = option.children.map(function (o) {
return _addOnselect(o);
});
}
return menuOption;
};
var menuOptions = allOptions.map(function (o) {
return new MentionMenuOption(_addOnselect(o));
});
// if (!queryString) {
// return menuOptions;
// }
return menuOptions.map(function (o) {
if (!o.children) {
return o;
}
return filterOptionWithChildren(o, filterOption);
}).filter(function (o) {
return filterOption(o) || (o.children || []).length > 0;
});
}, [allOptions, editor, filterOption]);
return {
options: options
};
};