@launchmenu/core
Version:
An environment for visual keyboard controlled applets
171 lines • 13.7 kB
JavaScript
"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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