UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

171 lines 13.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdvancedKeyPatternUI = void 0; const react_1 = __importDefault(require("react")); const model_react_1 = require("model-react"); const MenuView_1 = require("../../../../../components/menu/MenuView"); const AbstractUILayer_1 = require("../../../../../uiLayers/AbstractUILayer"); const MenuSearch_1 = require("../../../../../uiLayers/types/menuSearch/MenuSearch"); const createStandardMenuKeyHandler_1 = require("../../../../menu/interaction/keyHandler/createStandardMenuKeyHandler"); const uuid_1 = require("uuid"); const createKeyPatternOptionMenuItem_1 = require("./keyPatternOptionMenuItem/createKeyPatternOptionMenuItem"); const createStandardMenuItem_1 = require("../../../createStandardMenuItem"); const updateKeyPatternOptionExecuteHandler_1 = require("./keyPatternOptionMenuItem/actionHandlers/updateKeyPatternOptionExecuteHandler"); const createFinishMenuItem_1 = require("../../../types/createFinishMenuItem"); const SetFieldCommand_1 = require("../../../../../undoRedo/commands/SetFieldCommand"); const ProxiedMenu_1 = require("../../../../menu/ProxiedMenu"); const AdvancedKeyPatternContent_1 = require("./AdvancedKeyPatternContent"); const getControlsCategory_1 = require("../../../../categories/types/getControlsCategory"); const getCategoryAction_1 = require("../../../../../actions/types/category/getCategoryAction"); class AdvancedKeyPatternUI extends AbstractUILayer_1.AbstractUILayer { /** * Creates a new advanced key editor UI * @param field The field to be updated * @param config The configuration for the UI */ constructor(field, config = {}) { super({ path: "Key Editor" }); this.contentData = new model_react_1.Field(null); this.menuData = new model_react_1.Field(null); this.menuSearch = new model_react_1.Field(null); this.target = field; this.config = config; if (config.liveUpdate) this.value = field; else this.value = new model_react_1.Field(field.get()); } /** @override */ getFieldData(hook) { const menuSearch = this.menuSearch.get(hook); return menuSearch ? menuSearch.getFieldData(hook) : []; } /** @override */ getContentData(hook) { var _a, _b; const contentData = this.contentData.get(hook); return [ ...(contentData ? [contentData] : []), ...((_b = (_a = this.menuSearch.get(hook)) === null || _a === void 0 ? void 0 : _a.getContentData(hook)) !== null && _b !== void 0 ? _b : []), ]; } /** @override */ getMenuData(hook) { var _a, _b; const menuData = this.menuData.get(hook); return [ ...(menuData ? [menuData] : []), ...((_b = (_a = this.menuSearch.get(hook)) === null || _a === void 0 ? void 0 : _a.getMenuData(hook)) !== null && _b !== void 0 ? _b : []), ]; } /** @override */ async initialize(context, close) { if (this.menuData.get()) throw Error("An input can only be opened in 1 context"); // Create the list of items for in the menu const controls = [this.getAddPatternItem(), this.getSubmitItem()]; const getItems = (hook) => { const patterns = this.value.get(hook).patterns.map(option => createKeyPatternOptionMenuItem_1.createKeyPatternOptionMenuItem({ patternField: this.value, option, globalShortcut: this.config.globalShortcut, })); return [...controls, ...patterns]; }; // Create the data model const menu = new ProxiedMenu_1.ProxiedMenu(context, getItems); // Obtain all menu data const { handler: menuHandler, destroy: destroyMenuHandler } = this.getMenuHandler(menu, close); const menuData = { ID: uuid_1.v4(), menu, menuView: this.getMenuView(menu), menuHandler, }; const menuSearch = new MenuSearch_1.MenuSearch({ menu }); const contentData = { ID: uuid_1.v4(), contentView: react_1.default.createElement(AdvancedKeyPatternContent_1.AdvancedKeyPatternContent, { pattern: h => this.value.get(h) }), }; const disposeSearch = await menuSearch.onOpen(context, () => { }); // Open the UI this.contentData.set(contentData); this.menuData.set(menuData); this.menuSearch.set(menuSearch); // Return a disposer return () => { this.contentData.set(null); this.menuData.set(null); this.menuSearch.set(null); menu.destroy(); destroyMenuHandler(); disposeSearch(); }; } /** * Retrieves the menu view given the menu * @param menu The menu to create a view for * @returns The created view */ getMenuView(menu) { return react_1.default.createElement(MenuView_1.MenuView, { menu: menu }); } /** * Retrieves the key handler for a menu * @param menu The menu to create the handler for * @param close The function to close the UI * @returns The key listener */ getMenuHandler(menu, close) { return createStandardMenuKeyHandler_1.createStandardMenuKeyHandler(menu, { onExit: close }); } /** * Retrieves the item to be used to add a new pattern * @returns The item to be used to add a pattern */ getAddPatternItem() { return createStandardMenuItem_1.createStandardMenuItem({ name: "Add pattern", actionBindings: [ updateKeyPatternOptionExecuteHandler_1.updateKeyPatternOptionExecuteHandler.createBinding({ patternField: this.value, option: { type: "down", pattern: [] }, insertIfDeleted: true, globalShortcut: this.config.globalShortcut, }), getCategoryAction_1.getCategoryAction.createBinding(getControlsCategory_1.getControlsCategory()), ], }); } /** * Retrieves the item to be used to submit the changes * @returns The item to submit the changes */ getSubmitItem() { return createFinishMenuItem_1.createFinishMenuItem({ onExecute: ({ context }) => this.submit(context), actionBindings: [getCategoryAction_1.getCategoryAction.createBinding(getControlsCategory_1.getControlsCategory())], }); } /** * Finish the editing and commits the changes * @param context The context to be used to execute the command with if configured to be undoable */ submit(context) { // Set the new value const value = this.value.get(); if (this.config.onSubmit) this.config.onSubmit(value); else if (this.config.undoable) context.undoRedo.execute(new SetFieldCommand_1.SetFieldCommand(this.target, value)); else this.target.set(value); // Close the UI this.closeAll(); } } exports.AdvancedKeyPatternUI = AdvancedKeyPatternUI; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWR2YW5jZWRLZXlQYXR0ZXJuVUkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWVudXMvaXRlbXMvaW5wdXRzL2hhbmRsZXJzL2tleVBhdHRlcm4vQWR2YW5jZWRLZXlQYXR0ZXJuVUkudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQiw2Q0FBNkM7QUFDN0Msc0VBQWlFO0FBR2pFLDZFQUF3RTtBQUN4RSxvRkFBK0U7QUFRL0UsdUhBQWtIO0FBQ2xILCtCQUFnQztBQUVoQyw4R0FBeUc7QUFDekcsNEVBQXVFO0FBQ3ZFLHlJQUFvSTtBQUNwSSw4RUFBeUU7QUFDekUsc0ZBQWlGO0FBQ2pGLDhEQUF5RDtBQUN6RCwyRUFBc0U7QUFDdEUsMEZBQXFGO0FBQ3JGLCtGQUEwRjtBQUcxRixNQUFhLG9CQUFxQixTQUFRLGlDQUFlO0lBVXJEOzs7O09BSUc7SUFDSCxZQUNJLEtBQXlCLEVBQ3pCLFNBQW9DLEVBQUU7UUFFdEMsS0FBSyxDQUFDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7UUFidEIsZ0JBQVcsR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBa0MsQ0FBQyxDQUFDO1FBQzVELGFBQVEsR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBK0IsQ0FBQyxDQUFDO1FBQ3RELGVBQVUsR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBeUIsQ0FBQyxDQUFDO1FBWXhELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksTUFBTSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7WUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQjtJ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