UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

83 lines 6.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CompoundCommand = void 0; const model_react_1 = require("model-react"); /** A standard command that can be used to combine commands to execute and undo them together */ class CompoundCommand { constructor(metadata, commands) { var _a; // Obtains the state data and caches it, only recalculating it if requested and any of the dependencies changed this.stateGetter = new model_react_1.DataCacher(hook => { const states = this.commands.map(command => command.getState(hook)); // Obtain the changed states compared to the previous iteration const sc = { executing: 0, preparingForExecution: 0, executed: 0, reverting: 0, ready: 0, preparingForRevert: 0, }; states.forEach(state => (sc[state] += 1)); // Decide what the overall state should be let newState; if (sc.executing > 0 || sc.reverting > 0) { if (sc.executing > sc.reverting) newState = "executing"; else newState = "reverting"; } else if (sc.preparingForExecution > 0 || sc.preparingForRevert > 0) { if (sc.preparingForExecution > sc.preparingForRevert) newState = "preparingForExecution"; else newState = "preparingForRevert"; } else { if (sc.ready > sc.executed) newState = "ready"; else newState = "executed"; } return { overall: newState, commands: states }; }); if (!commands && metadata instanceof Array) { commands = metadata; metadata = ((_a = commands[0]) === null || _a === void 0 ? void 0 : _a.metadata) || { name: "Compound Command" }; } this.commands = commands; this.metadata = metadata; } /** * Retrieves a new compound command that's equivalent to this command with the specified command added * @param command The command to add * @returns The new compound command */ augment(command) { return new CompoundCommand(this.metadata, [...this.commands, command]); } /** * Executes the compound command * @returns A promise that resolves once all subcommands finished executing */ async execute() { await Promise.all(this.commands.map(command => command.execute())); } /** * Reverts the compound command * @returns A promise that resolves once all subcommands finished executing */ async revert() { await Promise.all([...this.commands].reverse().map(command => command.revert())); } /** * Retrieves the state of the compound command. Combining the data of the child commands. * @param hook The hook to subscribe to changes * @returns The state of this command */ getState(hook) { return this.stateGetter.get(hook).overall; } } exports.CompoundCommand = CompoundCommand; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG91bmRDb21tYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VuZG9SZWRvL2NvbW1hbmRzL0NvbXBvdW5kQ29tbWFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw2Q0FBa0Q7QUFJbEQsZ0dBQWdHO0FBQ2hHLE1BQWEsZUFBZTtJQWV4QixZQUFtQixRQUF1QyxFQUFFLFFBQXFCOztRQW1DakYsK0dBQStHO1FBQ3JHLGdCQUFXLEdBQUcsSUFBSSx3QkFBVSxDQUduQyxJQUFJLENBQUMsRUFBRTtZQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXBFLCtEQUErRDtZQUMvRCxNQUFNLEVBQUUsR0FBRztnQkFDUCxTQUFTLEVBQUUsQ0FBQztnQkFDWixxQkFBcUIsRUFBRSxDQUFDO2dCQUN4QixRQUFRLEVBQUUsQ0FBQztnQkFDWCxTQUFTLEVBQUUsQ0FBQztnQkFDWixLQUFLLEVBQUUsQ0FBQztnQkFDUixrQkFBa0IsRUFBRSxDQUFDO2FBQ1UsQ0FBQztZQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQywwQ0FBMEM7WUFDMUMsSUFBSSxRQUF1QixDQUFDO1lBQzVCLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUztvQkFBRSxRQUFRLEdBQUcsV0FBVyxDQUFDOztvQkFDbkQsUUFBUSxHQUFHLFdBQVcsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLEVBQUUsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRTtnQkFDbEUsSUFBSSxFQUFFLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDLGtCQUFrQjtvQkFDaEQsUUFBUSxHQUFHLHVCQUF1QixDQUFDOztvQkFDbEMsUUFBUSxHQUFHLG9CQUFvQixDQUFDO2FBQ3hDO2lCQUFNO2dCQUNILElBQUksRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUTtvQkFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDOztvQkFDMUMsUUFBUSxHQUFHLFVBQVUsQ0FBQzthQUM5QjtZQUVELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQW5FQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsWUFBWSxLQUFLLEVBQUU7WUFDeEMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUNwQixRQUFRLEdBQUcsT0FBQSxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFFBQVEsS0FBSSxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFzQixDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBNEIsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxPQUFpQjtRQUM1QixPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDaEIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLE1BQU07UUFDZixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFxQ0Q7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxJQUFnQjtRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0NBQ0o7QUE3RkQsMENBNkZDIn0=