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