UNPKG

@turbox3d/reactivity

Version:

Large-scale reactive state management library

187 lines (186 loc) 6.19 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.actionPool = exports.Action = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _shared = require("@turbox3d/shared"); var _symbol = require("../const/symbol"); var _store = require("./store"); var _enums = require("../const/enums"); var _timeTravel = require("./time-travel"); var _collector = require("./collector"); var _mutation = require("../decorators/mutation"); var actionPool = exports.actionPool = []; var Action = exports.Action = /*#__PURE__*/function () { function Action() { (0, _classCallCheck2["default"])(this, Action); this.displayName = _symbol.EMPTY_ACTION_NAME; this.status = _enums.ActionStatus.WORKING; this.historyNode = { actionChain: [], history: new Map() }; } return (0, _createClass2["default"])(Action, [{ key: "execute", value: function execute(runner) { var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var isWrapMutation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var options = arguments.length > 3 ? arguments[3] : undefined; if (this.status === _enums.ActionStatus.ABORT) { return; } Action.context = this; var wp; if (isWrapMutation) { wp = (0, _mutation.mutation)(this.name, runner, options); } else { wp = runner; } var result = wp.apply(void 0, (0, _toConsumableArray2["default"])(payload)); if ((0, _shared.isPromise)(result)) { return result.then(function () { Action.context = void 0; }, function () { Action.context = void 0; }); } Action.context = void 0; } }, { key: "complete", value: function complete() { if (this.status === _enums.ActionStatus.ABORT) { return; } this.status = _enums.ActionStatus.COMPLETED; _collector.triggerCollector.save(this); _collector.triggerCollector.endBatch(true, this); (0, _shared.remove)(actionPool, this); } }, { key: "undo", value: function undo() { var _this = this; var keepHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var original = function original() { _timeTravel.TimeTravel.undoHandler(_this.historyNode.history); }; if (!_store.store) { (0, _shared.fail)('store is not ready, please init first.'); } var action = this.historyNode.actionChain[0] || { name: '', displayName: '' }; _store.store.dispatch({ name: "".concat(_symbol.TURBOX_PREFIX, "UNDO_").concat(action.name), displayName: "UNDO_".concat(action.displayName), payload: [], original: original, type: _enums.EMaterialType.UNDO, isInner: true }); if (keepHistory) { return; } this.historyNode = { actionChain: [], history: new Map() }; (0, _shared.nextTick)(function () { var ctt = _timeTravel.TimeTravel.currentTimeTravel; ctt && ctt.onChange(ctt.undoable, ctt.redoable, 'undo', _this); }); } }, { key: "redo", value: function redo() { var _this2 = this; var keepHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var original = function original() { _timeTravel.TimeTravel.redoHandler(_this2.historyNode.history); }; if (!_store.store) { (0, _shared.fail)('store is not ready, please init first.'); } var action = this.historyNode.actionChain[0] || { name: '', displayName: '' }; _store.store.dispatch({ name: "".concat(_symbol.TURBOX_PREFIX, "REDO_").concat(action.name), displayName: "REDO_".concat(action.displayName), payload: [], original: original, type: _enums.EMaterialType.REDO, isInner: true }); if (keepHistory) { return; } this.historyNode = { actionChain: [], history: new Map() }; (0, _shared.nextTick)(function () { var ctt = _timeTravel.TimeTravel.currentTimeTravel; ctt && ctt.onChange(ctt.undoable, ctt.redoable, 'redo', _this2); }); } }, { key: "abort", value: function abort() { var revert = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; if (revert) { this.undo(); } this.status = _enums.ActionStatus.ABORT; _collector.triggerCollector.endBatch(true, this); (0, _shared.remove)(actionPool, this); } }], [{ key: "create", value: function create(name, displayName) { var action = new Action(); action.name = name; displayName && (action.displayName = displayName); action.historyNode.actionChain.push({ name: name, displayName: action.displayName }); actionPool.push(action); return action; } }, { key: "abortAll", value: function abortAll() { var revert = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; actionPool.forEach(function (action) { action.abort(revert); }); } }, { key: "get", value: function get() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (!args.length) { return actionPool; } if (args.length === 1) { return actionPool.filter(function (action) { return action.name === args[0]; }); } return actionPool.filter(function (action) { return (0, _shared.includes)(args, action.name); }); } }]); }();