UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

97 lines 8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IOContext = void 0; const SettingsContext_1 = require("../settings/SettingsContext"); const UndoRedoFacility_1 = require("../undoRedo/UndoRedoFacility"); const model_react_1 = require("model-react"); const SubIOContextLayer_1 = require("./SubIOContextLayer"); class IOContext { /** * Creates a new context * @param context The context data */ constructor(data) { var _a, _b, _c, _d, _e; this.uiStack = new model_react_1.Field([]); this.isInDevMode = data.isInDevMode || ((_a = data.parent) === null || _a === void 0 ? void 0 : _a.isInDevMode) || (() => false); this.undoRedo = data.undoRedo || ((_b = data.parent) === null || _b === void 0 ? void 0 : _b.undoRedo) || new UndoRedoFacility_1.UndoRedoFacility(); this.settings = data.settings || ((_c = data.parent) === null || _c === void 0 ? void 0 : _c.settings) || new SettingsContext_1.SettingsContext(); this.contextMenuBindings = data.contextMenuBindings || ((_d = data.parent) === null || _d === void 0 ? void 0 : _d.contextMenuBindings) || []; this.session = data.session || ((_e = data.parent) === null || _e === void 0 ? void 0 : _e.session); if (data.parent) this.closeLayer = data.parent.open(new SubIOContextLayer_1.SubIOContextLayer(this)); } /** * Retrieves all the UI data opened in this context * @param hook The hook to subscribe to changes * @returns All the opened UI layers */ getUI(hook) { return this.uiStack.get(hook).map(({ layer }) => layer); } /** * Opens the given UI layer * @param layer The layer of UI data to open * @param config Extra configuration * @returns A function that can be used to close the opened layer */ async open(layer, config) { const close = () => this.close(layer); const layerOnClose = (await layer.onOpen(this, close)) || undefined; // Find the index to open the item at const current = this.uiStack.get(); let index = Infinity; if ((config === null || config === void 0 ? void 0 : config.index) !== undefined) index = config.index; // Open the layer this.uiStack.set([ ...current.slice(0, index), { layer, onClose: async () => { var _a; await (layerOnClose === null || layerOnClose === void 0 ? void 0 : layerOnClose()); await ((_a = config === null || config === void 0 ? void 0 : config.onClose) === null || _a === void 0 ? void 0 : _a.call(config)); }, }, ...current.slice(index), ]); return close; } /** * Closes the given UI layer * @param layer The layer of UI data to close */ async close(layer) { var _a, _b; const layers = this.uiStack.get(); const index = layers.findIndex(({ layer: l }) => layer == l); if (index == -1) return; const p = (_b = (_a = layers[index]).onClose) === null || _b === void 0 ? void 0 : _b.call(_a); this.uiStack.set([...layers.slice(0, index), ...layers.slice(index + 1)]); await p; } /** * Removes all layers from this context, properly destroying it */ async destroy() { var _a; await this.closeAll(true); (_a = (await this.closeLayer)) === null || _a === void 0 ? void 0 : _a(); } /** * Closes all layers opened in this context * @param closeSessionLayer Whether to also close the base session layer */ async closeAll(closeSessionLayer) { const allLayers = this.uiStack.get(); const closeLayers = closeSessionLayer ? allLayers : allLayers.slice(1); const layerOrder = closeLayers.reverse(); for (let { layer } of layerOrder) await this.close(layer); } } exports.IOContext = IOContext; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSU9Db250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRleHQvSU9Db250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGlFQUE0RDtBQUU1RCxtRUFBOEQ7QUFDOUQsNkNBQTZDO0FBSTdDLDJEQUFzRDtBQUV0RCxNQUFhLFNBQVM7SUFnQmxCOzs7T0FHRztJQUNILFlBQW1CLElBT2xCOztRQXBCUyxZQUFPLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEVBQStDLENBQUMsQ0FBQztRQXFCM0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxXQUFJLElBQUksQ0FBQyxNQUFNLDBDQUFFLFdBQVcsQ0FBQSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxXQUFJLElBQUksQ0FBQyxNQUFNLDBDQUFFLFFBQVEsQ0FBQSxJQUFJLElBQUksbUNBQWdCLEVBQUUsQ0FBQztRQUNqRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLFdBQUksSUFBSSxDQUFDLE1BQU0sMENBQUUsUUFBUSxDQUFBLElBQUksSUFBSSxpQ0FBZSxFQUFFLENBQUM7UUFDaEYsSUFBSSxDQUFDLG1CQUFtQjtZQUNwQixJQUFJLENBQUMsbUJBQW1CLFdBQUksSUFBSSxDQUFDLE1BQU0sMENBQUUsbUJBQW1CLENBQUEsSUFBSSxFQUFFLENBQUM7UUFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxXQUFJLElBQUksQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQSxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUkscUNBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRixD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