UNPKG

@ticatec/app-data-manager

Version:

A comprehensive TypeScript library providing hierarchical data manager classes for CRUD operations, pagination, and data management in frontend applications. Features include full list, paged, and stackable data managers with built-in caching and transfor

91 lines (90 loc) 2.38 kB
import "@ticatec/enhanced-utils/EnArray"; /** * 基础数据管理器抽象类,提供数据的基本CRUD操作和本地缓存管理 * @template T 继承自CommonDataService的服务类型 */ export default class BaseDataManager { _list; fromTop = true; service; checkEqual; convert; tagData; /** * 构造函数 * @param service 数据服务实例 * @param keyField 主键字段名或相等性检查函数 * @param options 配置选项 */ constructor(service, keyField, options = null) { this.service = service; this.checkEqual = typeof keyField == "string" ? ((o1, o2) => o1[keyField] == o2[keyField]) : keyField; this.convert = options?.convert; this.fromTop = options?.fromTop ?? true; this.tagData = options?.tagData; } /** * 保存一条记录到数据库,并加入到本地集合 * @param data 要保存的数据 * @param isNew 是否为新数据 */ async save(data, isNew) { let item = await this.service.save(data, isNew); if (this.convert != null) { item = this.convert(item, isNew); } if (isNew) { this._list = [item, ...this._list]; } else { this._list.replace(item, this.checkEqual); } } /** * 删除一条记录,并从本地集合中删除 * @param item 要删除的数据项 */ async remove(item) { await this.service.remove(item); this._list.remove(item); } /** * 从列表中删除数据 * @param item 要删除的数据项 * @protected */ removeItem(item) { this._list.remove(item); } /** * 替换主键相同的条目 * @param item 要替换的数据项 * @protected */ replace(item) { this._list.replace(item, this.checkEqual); } /** * 在列表增加一个条目到最前面 * @param item 要添加的数据项 * @protected */ append(item) { this._list = [item, ...this._list]; } /** * 设置数据集 * @param value 新的数据集 * @protected */ set list(value) { this._list = value; } /** * 当前的数据集 * @returns 数据集的副本 */ get list() { return [...this._list]; } }