UNPKG

@yuntijs/ui

Version:

☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps

69 lines 3.39 kB
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 }; };