@launchmenu/core
Version:
An environment for visual keyboard controlled applets
68 lines • 6.88 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createContextFolderHandler = void 0;
const model_react_1 = require("model-react");
const Priority_1 = require("../../../menus/menu/priority/Priority");
const getHooked_1 = require("../../../utils/subscribables/getHooked");
const hasHigherOrEqualPriority_1 = require("../../../menus/menu/priority/hasHigherOrEqualPriority");
const createAction_1 = require("../../createAction");
const collectContextMenuItems_1 = require("../collectContextMenuItems");
const contextMenuAction_1 = require("../contextMenuAction");
const createContextFolderMenuItem_1 = require("../../../menus/items/types/createContextFolderMenuItem");
/**
* Creates a context menu handler that adds an folder to the (context) menu
* @param config The configuration for the context folder
*/
function createContextFolderHandler(config) {
const parent = config.parent ? config.parent : contextMenuAction_1.contextMenuAction;
const { name, itemData: contextItemData, override, preventCountCategory, priority, } = config;
// Create the action itself
return createAction_1.createAction({
name,
parents: [parent, ...(override ? [override] : [])],
core: function (itemData, _1, _2, targets) {
// Create a retriever for the menu items (Cache is important, since createFolderMenuItem expects multiple calls to return the same items, unless a hook specified data updated)
const itemsSource = new model_react_1.DataCacher(h => {
const sources = targets.filter(target => "view" in target);
const extra = targets
.filter(target => !("view" in target))
.flatMap(({ actionBindings }) => getHooked_1.getHooked(actionBindings, h));
const items = collectContextMenuItems_1.collectContextMenuItems(itemData, sources, extra, h);
const positiveItems = items.filter(({ priority }) => Priority_1.Priority.isPositive(priority));
positiveItems.sort((a, b) => hasHigherOrEqualPriority_1.hasHigherOrEqualPriority(a.priority, b.priority) ? -1 : 1);
return positiveItems.map(({ item }) => item);
});
const itemsGetter = (h) => itemsSource.get(h);
const searchItems = (contextItemData === null || contextItemData === void 0 ? void 0 : contextItemData.preventSearch) ? []
: (query, hook) => itemsGetter(hook);
// Create the item
const item = createContextFolderMenuItem_1.createContextFolderMenuItem({
name,
pathName: name,
children: itemsGetter,
searchChildren: searchItems,
...contextItemData,
});
// Retrieve the result with bindings for the parent menu
const parentBinding = parent.createBinding({
action: this,
item: {
priority,
item,
},
override,
preventCountCategory,
});
// Override binding, forward items to folder being overridden
const overrideBindings = override
? itemData.map(item => override.createBinding(item))
: [];
return {
result: itemData,
children: [parentBinding, ...overrideBindings],
};
},
});
}
exports.createContextFolderHandler = createContextFolderHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ29udGV4dEZvbGRlckhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWN0aW9ucy9jb250ZXh0TWVudUFjdGlvbi9jb250ZXh0Rm9sZGVycy9jcmVhdGVDb250ZXh0Rm9sZGVySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBa0Q7QUFLbEQsb0VBQStEO0FBQy9ELHNFQUFpRTtBQUNqRSxvR0FBK0Y7QUFDL0YscURBQWdEO0FBQ2hELHdFQUFtRTtBQUNuRSw0REFBdUQ7QUFDdkQsd0dBQW1HO0FBRW5HOzs7R0FHRztBQUNILFNBQWdCLDBCQUEwQixDQUN0QyxNQUFtQztJQUVuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxxQ0FBaUIsQ0FBQztJQUVqRSxNQUFNLEVBQ0YsSUFBSSxFQUNKLFFBQVEsRUFBRSxlQUFlLEVBQ3pCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxHQUNYLEdBQUcsTUFBTSxDQUFDO0lBRVgsMkJBQTJCO0lBQzNCLE9BQU8sMkJBQVksQ0FBQztRQUNoQixJQUFJO1FBQ0osT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksRUFBRSxVQUFVLFFBQWdDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPO1lBQzdELCtLQUErSztZQUMvSyxNQUFNLFdBQVcsR0FBRyxJQUFJLHdCQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUM7Z0JBQzNELE1BQU0s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
;