UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

177 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.UILayer = void 0; const react_1 = __importDefault(require("react")); const model_react_1 = require("model-react"); const uuid_1 = require("uuid"); const MenuView_1 = require("../../components/menu/MenuView"); const createStandardMenuKeyHandler_1 = require("../../menus/menu/interaction/keyHandler/createStandardMenuKeyHandler"); const TextFieldView_1 = require("../../components/fields/TextFieldView"); const createStandardTextFieldKeyHandler_1 = require("../../textFields/interaction/keyHandler/createStandardTextFieldKeyHandler"); const UnifiedAbstractUILayer_1 = require("./UnifiedAbstractUILayer"); const MenuSearch_1 = require("../types/menuSearch/MenuSearch"); const mergeCallbacks_1 = require("../../utils/mergeCallbacks"); const ContentView_1 = require("../../components/content/ContentView"); const createStandardContentKeyHandler_1 = require("../../content/interaction/keyHandler/createStandardContentKeyHandler"); /** * The default UILayer class */ class UILayer extends UnifiedAbstractUILayer_1.UnifiedAbstractUILayer { /** * Creates a new standard UILayer * @param data The data to create the layer from * @param config Base ui layer configuration */ constructor(data, config) { super(config); this.data = new model_react_1.Field([]); if (!(data instanceof Array)) data = [data]; this.inputData = data; } /** @override */ initialize(context, close) { if (this.data.get().length == 0) { this.data.set(this.inputData.flatMap(item => this.processLayerItem(item, context, close))); return async () => { await Promise.all(this.data .get() .map(data => { var _a; return ("onClose" in data ? (_a = data.onClose) === null || _a === void 0 ? void 0 : _a.call(data) : undefined); })); this.data.set([]); }; } } /** * Processes the layer data * @param inpData The layer data to be processed * @param context The context that can be used by * @param close A function that closes this layer in the specified context * @returns The processed data */ processLayerItem(inpData, context, close) { var _a, _b, _c, _d, _e; // Return the data if it's a UILayer if ("getKeyHandlers" in inpData) return [inpData]; const data = inpData instanceof Function ? inpData(context, close) : inpData; const ID = uuid_1.v4(); let res = { ID, onClose: data.onClose, overlayGroup: data.overlayGroup, }; let extra = []; let empty = !data.onClose; // Create the standard menu data if (data.menu) { const menu = data.menu; if (data.destroyOnClose != false) res.onClose = mergeCallbacks_1.mergeCallbacks([res.onClose, () => menu.destroy()]); // Create a key handler if not present let menuHandler = data.menuHandler; if (!menuHandler) { const disposableHandler = createStandardMenuKeyHandler_1.createStandardMenuKeyHandler(data.menu, { onExit: data.handleClose === false ? undefined : close, onExecute: data.onExecute, }); menuHandler = disposableHandler.handler; res.onClose = mergeCallbacks_1.mergeCallbacks([res.onClose, disposableHandler.destroy]); } // Combine all the menu data const menuLayerData = { ID, menu, menuView: (_a = data.menuView) !== null && _a !== void 0 ? _a : (react_1.default.createElement(MenuView_1.MenuView, { menu: data.menu, onExecute: data.onExecute })), menuHandler, }; // If a search menu is requested, add it as an extra layer, otherwise just add the menu if (data.searchable !== false) { extra.push(new MenuSearch_1.MenuSearch({ menu: data.menu, defaultMenu: menuLayerData, onExecute: data.onExecute, icon: data.icon, })); } else { empty = false; res = { ...menuLayerData, ...res, }; } } else if (data.menuView) { empty = false; res = { menuView: data.menuView, menuHandler: data.menuHandler, ...res, }; } // Create the standard field data if (data.field) { empty = false; const { field } = data; res = { field, fieldView: (_b = data.fieldView) !== null && _b !== void 0 ? _b : (react_1.default.createElement(TextFieldView_1.TextFieldView, { field: field, highlighter: data.highlighter, icon: data.icon })), fieldHandler: (_c = data.fieldHandler) !== null && _c !== void 0 ? _c : createStandardTextFieldKeyHandler_1.createStandardTextFieldKeyHandler(field, context, { onExit: !res.menuHandler && data.handleClose ? close : undefined, }), ...res, }; } else if (data.fieldView) { empty = false; res = { fieldView: data.fieldView, fieldHandler: data.fieldHandler, ...res, }; } // Create the content data if (data.content) { empty = false; const { content } = data; res = { content, contentView: (_d = data.contentView) !== null && _d !== void 0 ? _d : react_1.default.createElement(ContentView_1.ContentView, { content: content }), contentHandler: (_e = data.contentHandler) !== null && _e !== void 0 ? _e : createStandardContentKeyHandler_1.createStandardContentKeyHandler(content, context, { onExit: !res.menuHandler && !res.fieldHandler && data.handleClose ? close : undefined, }), ...res, }; } else if (data.contentView) { empty = false; res = { contentView: data.contentView, contentHandler: data.contentHandler, ...res, }; } // Check for only a key handler if (data.contentHandler && empty) { empty = false; res = { contentView: undefined, contentHandler: data.contentHandler, ...res, }; } // Return the data return empty ? extra : [res, ...extra]; } /** @override */ getAll(hook) { return this.data.get(hook); } } exports.UILayer = UILayer; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVUlMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91aUxheWVycy9zdGFuZGFyZFVJTGF5ZXIvVUlMYXllci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLDZDQUE2QztBQU03QywrQkFBZ0M7QUFDaEMsNkRBQXdEO0FBQ3hELHVIQUFrSDtBQUNsSCx5RUFBb0U7QUFDcEUsaUlBQTRIO0FBRTVILHFFQUFnRTtBQUNoRSwrREFBMEQ7QUFDMUQsK0RBQTBEO0FBQzFELHNFQUFpRTtBQUNqRSwwSEFBcUg7QUFHckg7O0dBRUc7QUFDSCxNQUFhLE9BQVEsU0FBUSwrQ0FBc0I7SUFJL0M7Ozs7T0FJRztJQUNILFlBQ0ksSUFBbUQsRUFDbkQsTUFBMkI7UUFFM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBWFIsU0FBSSxHQUFHLElBQUksbUJBQUssQ0FBQyxFQUFvQixDQUFDLENBQUM7UUFZN0MsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLEtBQUssQ0FBQztZQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0I7SUFDTixVQUFVLENBQ2hCLE9BQW1CLEVBQ25CLEtBQWlCO1FBRWpCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNULElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUM5QyxDQUNKLENBQUM7WUFFRixPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUNkLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FD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