import { IEntity } from '@ibizstudio/api'; import { last, drop, clone } from 'ramda'; /** * 数据历史状态管理 * * @export * @class DataHistory */ export class DataHistory { /** * 历史数据列表 * * @type {IEntity[]} * @memberof DataHistory */ readonly historyList: IEntity[] = []; /** * 待前进数据 * * @type {IEntity[]} * @memberof DataHistory */ readonly forwardList: IEntity[] = []; /** * 新增历史数据 * * @param {*} item * @return {*} {*} * @memberof DataHistory */ add(item: IEntity): IEntity { // 当待前进回滚数据存在时清空 const num = this.forwardList.length; if (num > 0) { drop(num, this.forwardList); } // 加入历史记录并在历史记录达到最大值时清除最老的数据 this.historyList.push(clone(item)); if (this.historyList.length > 20) { drop(1, this.historyList); } return item; } /** * 数据回退 * * @return {*} {*} * @memberof DataHistory */ backOff(): IEntity | null { if (this.historyList.length > 0) { const item = clone(last(this.historyList))!; this.forwardList.push(item); return item; } return null; } /** * 数据回退前进 * * @return {*} {*} * @memberof DataHistory */ forward(): IEntity | null { if (this.forwardList.length > 0) { const item = clone(last(this.forwardList))!; this.historyList.push(item); return item; } return null; } }