@aitianyu.cn/tianyu-store
Version:
tianyu storage for nodejs.
52 lines • 2.75 kB
JavaScript
;
/** @format */
Object.defineProperty(exports, "__esModule", { value: true });
exports.storeRedoActionCreatorImpl = exports.storeUndoActionCreatorImpl = void 0;
const types_1 = require("@aitianyu.cn/types");
const Action_1 = require("../../types/Action");
const RedoUndoStack_1 = require("../../types/RedoUndoStack");
const StoreHandlerUtils_1 = require("../../utils/StoreHandlerUtils");
const ActionBaseImpl_1 = require("../action/ActionBaseImpl");
const RedoUndoStack_2 = require("./interface/RedoUndoStack");
function storeUndoActionCreatorImpl() {
const actionInstanceCaller = (0, ActionBaseImpl_1.actionBaseImpl)((0, types_1.guid)(), function* (_action) {
const redoUndoStack = yield* (0, StoreHandlerUtils_1.doReadExternal)(function (register) {
return register.get(RedoUndoStack_2.STORE_STATE_EXTERNAL_REDOUNDO_STACK);
});
// this is used to reverse the diff data ensure the undo operation
const diff = types_1.ObjectHelper.clone(redoUndoStack?.doUndo() || /* istanbul ignore next */ {});
for (const storeType of Object.keys(diff)) {
const instances = diff[storeType];
for (const insKey of Object.keys(instances)) {
const ins = instances[insKey];
const temp = ins.old;
ins.old = ins.new;
ins.new = temp;
ins.type =
ins.type === RedoUndoStack_1.DifferenceChangeType.Create
? RedoUndoStack_1.DifferenceChangeType.Delete
: ins.type === RedoUndoStack_1.DifferenceChangeType.Delete
? RedoUndoStack_1.DifferenceChangeType.Create
: RedoUndoStack_1.DifferenceChangeType.Change;
}
}
return diff;
}, Action_1.ActionType.UNDO, function (_state, data) {
return data || /* istanbul ignore next */ {};
});
return actionInstanceCaller;
}
exports.storeUndoActionCreatorImpl = storeUndoActionCreatorImpl;
function storeRedoActionCreatorImpl() {
const actionInstanceCaller = (0, ActionBaseImpl_1.actionBaseImpl)((0, types_1.guid)(), function* (_action) {
const redoUndoStack = yield* (0, StoreHandlerUtils_1.doReadExternal)(function (register) {
return register.get(RedoUndoStack_2.STORE_STATE_EXTERNAL_REDOUNDO_STACK);
});
return redoUndoStack?.doRedo();
}, Action_1.ActionType.REDO, function (_state, data) {
return data || /* istanbul ignore next */ {};
});
return actionInstanceCaller;
}
exports.storeRedoActionCreatorImpl = storeRedoActionCreatorImpl;
//# sourceMappingURL=RedoUndoActionImpl.js.map