UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

148 lines 11.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchMenu = void 0; const react_1 = __importDefault(require("react")); const model_react_1 = require("model-react"); const MenuView_1 = require("../../components/menu/MenuView"); const InstantOpenTransition_1 = require("../../components/context/stacks/transitions/open/InstantOpenTransition"); const InstantCloseTransition_1 = require("../../components/context/stacks/transitions/close/InstantCloseTransition"); const searchAction_1 = require("../../actions/types/search/searchAction"); const SearchExecuter_1 = require("../../utils/searchExecuter/SearchExecuter"); const baseSettings_1 = require("../../application/settings/baseSettings/baseSettings"); const PrioritizedMenu_1 = require("./PrioritizedMenu"); /** * A menu that can be used to perform a search on a collection of items */ class SearchMenu extends PrioritizedMenu_1.PrioritizedMenu { /** * Creates a new search menu * @param context The context to be used by menu items * @param config The config of the category and other options */ constructor(context, config) { super(context, { ...config, maxItemCount: context.settings.get(baseSettings_1.baseSettings).menu.maxSearchMenuSize.get(), // Forward the loading state from the search executer isLoading: { get: hook => { var _a, _b; const isSearching = this.executer.isSearching(hook); const isLoading = (_b = (_a = config === null || config === void 0 ? void 0 : config.isLoading) === null || _a === void 0 ? void 0 : _a.get(hook)) !== null && _b !== void 0 ? _b : false; return isSearching || isLoading; }, }, }); this.searchItems = new model_react_1.Field([]); this.executer = new SearchExecuter_1.SearchExecuter({ searchable: { ID: "root", search: async (query, hook, ...rest) => { var _a, _b; return (_b = (_a = this.search) === null || _a === void 0 ? void 0 : _a.call(this, query, hook, ...rest)) !== null && _b !== void 0 ? _b : { children: searchAction_1.searchAction.get(this.searchItems.get(hook)), }; }, }, onAdd: (item) => this.addItem(item), onRemove: (item) => this.removeItem(item), }); /** * A default view for a search menu, with instant open and close transitions */ this.view = { view: react_1.default.createElement(MenuView_1.MenuView, { menu: this }), transitions: { Open: InstantOpenTransition_1.InstantOpenTransition, Close: InstantCloseTransition_1.InstantCloseTransition, }, }; this.showAllOnEmptySearch = config === null || config === void 0 ? void 0 : config.showAllOnEmptySearch; this.search = config === null || config === void 0 ? void 0 : config.search; } // Search management /** * Sets the search query * @param search The text to search with * @returns A promise that resolves once the new search has finished */ async setSearch(search) { var _a; // Update the default items (for empty searches) const oldQuery = this.executer.getQuery(); if (this.showAllOnEmptySearch && ((_a = oldQuery === null || oldQuery === void 0 ? void 0 : oldQuery.search) !== null && _a !== void 0 ? _a : "") != search) { const prioritizedItems = this.searchItems .get() .map(item => ({ priority: 1, item })); if (search == "") this.addItems(prioritizedItems); else this.removeItems(prioritizedItems); } // Perform the search const query = { search, context: this.context }; // Make a snappy first result setTimeout(() => this.flushBatch(), 1); return this.executer.setQuery(query); } /** * Sets the items to be searched in * @param items The items */ setSearchItems(items) { var _a, _b; if (this.showAllOnEmptySearch && ((_b = (_a = this.executer.getQuery()) === null || _a === void 0 ? void 0 : _a.search) !== null && _b !== void 0 ? _b : "") == "") { this.removeItems(this.searchItems.get().map(item => ({ item, priority: 1 }))); this.addItems(items.map(item => ({ item, priority: 1 }))); } this.searchItems.set(items); } /** * Adds an item to be searched in * @param item The item to add */ addSearchItem(item) { var _a, _b; this.searchItems.set([...this.searchItems.get(), item]); if (this.showAllOnEmptySearch && ((_b = (_a = this.executer.getQuery()) === null || _a === void 0 ? void 0 : _a.search) !== null && _b !== void 0 ? _b : "") == "") this.addItem({ item, priority: 1 }); } /** * Removes an item and its search results * @param item The item to remove */ removeSearchItem(item) { var _a, _b; this.searchItems.set(this.searchItems.get().filter(i => i != item)); if (this.showAllOnEmptySearch && ((_b = (_a = this.executer.getQuery()) === null || _a === void 0 ? void 0 : _a.search) !== null && _b !== void 0 ? _b : "") == "") this.removeItem({ item, priority: 1 }); } // Data retrieval /** * Retrieves the search text * @param hook The hook to subscribe to changes * @returns The search text */ getSearch(hook) { var _a; return ((_a = this.executer.getQuery(hook)) === null || _a === void 0 ? void 0 : _a.search) || null; } /** * Retrieves the highlight data to use for highlighting within menu items * @param hook The hook to subscribe to changes * @returns The highlight data */ getHighlight(hook) { return this.executer.getQuery(hook) || null; } /** * Retrieves the pattern matches from searches * @param hook The hook to subscribe to changes * @returns The patterns in searches */ getPatternMatches(hook) { return this.executer.getPatterns(hook); } } exports.SearchMenu = SearchMenu; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoTWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW51cy9tZW51L1NlYXJjaE1lbnUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUUxQiw2Q0FBNkM7QUFHN0MsNkRBQXdEO0FBRXhELGtIQUE2RztBQUM3RyxxSEFBZ0g7QUFFaEgsMEVBQXFFO0FBQ3JFLDhFQUF5RTtBQUN6RSx1RkFBa0Y7QUFDbEYsdURBQWtEO0FBS2xEOztHQUVHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsaUNBQWU7SUFnQjNDOzs7O09BSUc7SUFDSCxZQUNJLE9BQW1CLEVBQ25CLE1BS0M7UUFFRCxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ1gsR0FBRyxNQUFNO1lBQ1QsWUFBWSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLDJCQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQzdFLHFEQUFxRDtZQUNyRCxTQUFTLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFOztvQkFDUixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEQsTUFBTSxTQUFTLGVBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsMENBQUUsR0FBRyxDQUFDLElBQUksb0NBQUssS0FBSyxDQUFDO29CQUN4RCxPQUFPLFdBQVcsSUFBSSxTQUFTLENBQUM7Z0JBQ3BDLENBQUM7YUFDSjtTQUNKLENBQUMsQ0FBQztRQXhDRyxnQkFBVyxHQUFHLElBQUksbUJBQUssQ0FBQyxFQUFpQixDQUFDLENBQUM7UUFHM0MsYUFBUSxHQUFHLElBQUksK0JBQWMsQ0FBQztZQUNwQyxVQUFVLEVBQUU7Z0JBQ1IsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFhLEVB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