@launchmenu/core
Version:
An environment for visual keyboard controlled applets
109 lines • 10.1 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFolderMenuItem = exports.getChildList = void 0;
const react_1 = __importStar(require("react"));
const MenuItemFrame_1 = require("../../components/items/MenuItemFrame");
const MenuItemLayout_1 = require("../../components/items/MenuItemLayout");
const MenuItemIcon_1 = require("../../components/items/MenuItemIcon");
const Truncated_1 = require("../../components/Truncated");
const adjustBindings_1 = require("./adjustBindings");
const getHooked_1 = require("../../utils/subscribables/getHooked");
const openMenuExecuteHandler_1 = require("../../actions/types/execute/types/openMenuExecuteHandler");
const forwardKeyEventHandler_1 = require("../../actions/types/keyHandler/forwardKeyEventHandler");
const createStandardActionBindings_1 = require("./createStandardActionBindings");
const Box_1 = require("../../styling/box/Box");
const ShortcutLabel_1 = require("../../components/items/ShortcutLabel");
const ThemeIcon_1 = require("../../components/ThemeIcon");
const simpleSearchHandler_1 = require("../../actions/types/search/tracedRecursiveSearch/simpleSearch/simpleSearchHandler");
const model_react_1 = require("model-react");
/**
* Retrieves the children in (subscribable) list form
* @param children The children to get
* @returns The children list
*/
function getChildList(children) {
return children instanceof Function || children instanceof Array
? children
: Object.values(children);
}
exports.getChildList = getChildList;
/**
* Creates a new folder menu item, used to store multiple child menu items in
* @param data The data to create the menu item from
* @returns The folder menu item, including the children
*/
function createFolderMenuItem({ actionBindings, children, closeOnExecute = false, forwardKeyEvents = false, searchChildren, name, pathName = getHooked_1.getHooked(name), searchIcon, layerContentData, layerFieldData, ...rest }) {
const childList = getChildList(children);
const extraBindings = [];
if (childList.length > 0 || childList instanceof Function)
extraBindings.push(openMenuExecuteHandler_1.openMenuExecuteHandler.createBinding({
items: childList,
closeOnExecute,
pathName,
searchIcon,
content: layerContentData,
field: layerFieldData,
}));
if (forwardKeyEvents)
extraBindings.push(forwardKeyEventHandler_1.forwardKeyEventHandler.createBinding({
subscribableData: h => ({
targets: getHooked_1.getHooked(childList, h),
}),
}));
if (!searchChildren)
searchChildren = (children instanceof Function
? (query, hook) => children(hook)
: children);
const bindings = createStandardActionBindings_1.createStandardActionBindings({
name,
...rest,
actionBindings: adjustBindings_1.adjustBindings(actionBindings !== null && actionBindings !== void 0 ? actionBindings : [], extraBindings),
searchChildren: getChildList(searchChildren),
onShowChild: async ({ parent, child, context }) => {
if (parent)
await openMenuExecuteHandler_1.openMenuExecuteHandler
.get([parent])
.execute({ context, focus: child });
},
}, () => item);
const { icon = "menu", description, shortcut } = rest;
// TODO: add folder specific styling to indicate it's a folder
const item = {
view: react_1.memo(({ highlight, ...props }) => {
const [h] = model_react_1.useDataHook();
const iconV = getHooked_1.getHooked(icon, h);
const descriptionV = getHooked_1.getHooked(description, h);
const nameV = getHooked_1.getHooked(name, h);
return (react_1.default.createElement(MenuItemFrame_1.MenuItemFrame, Object.assign({}, props),
react_1.default.createElement(Box_1.Box, { display: "flex", alignItems: "center" },
react_1.default.createElement(MenuItemLayout_1.MenuItemLayout, { icon: iconV && react_1.default.createElement(MenuItemIcon_1.MenuItemIcon, { icon: iconV }), name: react_1.default.createElement(Box_1.Box, { font: "header" },
react_1.default.createElement(simpleSearchHandler_1.simpleSearchHandler.Highlighter, { query: highlight, pattern: rest.searchPattern }, nameV)), shortcut: shortcut && react_1.default.createElement(ShortcutLabel_1.ShortcutLabel, { shortcut: shortcut }), description: descriptionV && (react_1.default.createElement(Truncated_1.Truncated, { title: descriptionV },
react_1.default.createElement(simpleSearchHandler_1.simpleSearchHandler.Highlighter, { query: highlight, pattern: rest.searchPattern }, descriptionV))) }),
react_1.default.createElement(ThemeIcon_1.ThemeIcon, { icon: "arrowRight", size: 30 }))));
}),
actionBindings: bindings,
children,
};
return item;
}
exports.createFolderMenuItem = createFolderMenuItem;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRm9sZGVyTWVudUl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVudXMvaXRlbXMvY3JlYXRlRm9sZGVyTWVudUl0ZW0udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBa0M7QUFHbEMsd0VBQW1FO0FBQ25FLDBFQUFxRTtBQUNyRSxzRUFBaUU7QUFDakUsMERBQXFEO0FBQ3JELHFEQUFnRDtBQUVoRCxtRUFBOEQ7QUFFOUQscUdBQWdHO0FBQ2hHLGtHQUE2RjtBQUM3RixpRkFBNEU7QUFDNUUsK0NBQTBDO0FBQzFDLHdFQUFtRTtBQUNuRSwwREFBcUQ7QUFDckQsMkhBQXNIO0FBR3RILDZDQUFtRDtBQUVuRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUUxQixRQUFXO0lBQ1QsT0FBTyxRQUFRLFlBQVksUUFBUSxJQUFJLFFBQVEsWUFBWSxLQUFLO1FBQzVELENBQUMsQ0FBRSxRQUFnQjtRQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBTkQsb0NBTUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBT2xDLEVBQ0UsY0FBYyxFQUNkLFFBQVEsRUFDUixjQUFjLEdBQUcsS0FBSyxFQUN0QixnQkFBZ0IsR0FBRyxLQUFLLEVBQ3hCLGNBQWMsRUFDZCxJQUFJLEVBQ0osUUFBUSxHQUFHLHFCQUFTLENBQUMsSUFBSSxDQUFDLEVBQzFCLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLEdBQUcsSUFBSSxFQUNpQjtJQUN4QixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsTUFBTSxhQUFhLEdBQXFCLEVBQUUsQ0FBQztJQUMzQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsWUFBWSxRQUFRO1FBQ3JELGFB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