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