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

87 lines (86 loc) 2.54 kB
import "@ticatec/enhanced-utils/EnArray"; import type { CommonDataService } from "@ticatec/app-data-service"; /** * 检查两个对象是否相等的函数类型 * @param e1 第一个对象 * @param e2 第二个对象 * @returns 如果相等返回true,否则返回false */ export type CheckEqual = (e1: any, e2: any) => boolean; /** * 数据转换函数类型 * @param item 要转换的数据项 * @param isNew 是否为新数据 * @returns 转换后的数据 */ export type DataConvert = (item: any, isNew: boolean) => any; /** * 数据管理器配置选项 */ export interface ManagerOptions { /** 数据转换函数 */ convert?: DataConvert; /** 是否从顶部添加数据 */ fromTop?: boolean; /** 标签数据 */ tagData?: any; } /** * 基础数据管理器抽象类,提供数据的基本CRUD操作和本地缓存管理 * @template T 继承自CommonDataService的服务类型 */ export default abstract class BaseDataManager<T extends CommonDataService> { private _list; protected fromTop: boolean; readonly service: T; protected readonly checkEqual: CheckEqual; protected readonly convert: DataConvert; protected readonly tagData: any; /** * 构造函数 * @param service 数据服务实例 * @param keyField 主键字段名或相等性检查函数 * @param options 配置选项 */ protected constructor(service: T, keyField: string | CheckEqual, options?: ManagerOptions); /** * 保存一条记录到数据库,并加入到本地集合 * @param data 要保存的数据 * @param isNew 是否为新数据 */ save(data: any, isNew: boolean): Promise<void>; /** * 删除一条记录,并从本地集合中删除 * @param item 要删除的数据项 */ remove(item: any): Promise<void>; /** * 从列表中删除数据 * @param item 要删除的数据项 * @protected */ protected removeItem(item: any): void; /** * 替换主键相同的条目 * @param item 要替换的数据项 * @protected */ protected replace(item: any): void; /** * 在列表增加一个条目到最前面 * @param item 要添加的数据项 * @protected */ protected append(item: any): void; /** * 设置数据集 * @param value 新的数据集 * @protected */ protected set list(value: Array<any>); /** * 当前的数据集 * @returns 数据集的副本 */ get list(): any; }