import type { SalesSearchItem, SalesSearchSort, SearchMode } from '../api/searchService'; /** * useEsSalesGridData * * 订单结果区(业务列表 / 管理表格)共享的 ES 数据生命周期 hook。 * * 把「从 ES `/shop/es/search/sales` 取数 + 翻页累积 + 并发护栏 + 实时 delta 订阅/回写」 * 这套逻辑收敛到一处,供 OrderBusinessList(业务模式单 tab)与 OrderAdminGrid(管理模式表格)复用。 * * 职责: * 1. 按 keyword / searchMode / filters / sort / perPage 拉取数据,输入变化时重置回第 1 页重查; * 2. `fetchPage(page, append)` 支持「替换(首屏/重查)」与「追加(滚动翻页)」两种写入; * 3. reqId 并发护栏:只采用最新一次请求结果,丢弃过期响应; * 4. 接入 OS Server 实时 delta:命中已加载项时浅合并回写,并通过 `onDelta` 把变更项透出给调用方 * (业务:bump 详情刷新版本;管理:通知外层刷新已打开详情); * 5. 卸载 / 空关键词时取消订阅。 * * 不负责:分页 UI、虚拟滚动、列配置、行高亮、详情版本表——这些留给各自调用方。 */ export interface UseEsSalesGridDataParams { /** 搜索关键词(外部统一搜索框驱动) */ keyword: string; /** 匹配方式:业务 = 'identifier'(精确),管理 = 'fuzzy'(模糊) */ searchMode: SearchMode; /** 每页条数 */ perPage: number; /** ES filters(管理模式表格筛选映射后传入;业务模式不传) */ filters?: Record; /** ES sort(管理模式表格排序映射后传入;业务模式不传) */ sort?: SalesSearchSort[]; /** OS Server 订阅 id 前缀,用于区分业务/管理两套订阅 */ subscriberPrefix: string; /** * 实时 delta 命中已加载项后的附加副作用(列表本身的浅合并回写已在 hook 内完成)。 * - 业务模式:bump 详情刷新版本; * - 管理模式:通知外层刷新已打开的详情。 */ onDelta?: (deltaItems: SalesSearchItem[]) => void; } export interface UseEsSalesGridDataResult { items: SalesSearchItem[]; total: number; loading: boolean; error: unknown; /** 当前已加载到的页码(从 1 起) */ page: number; /** 是否还有下一页(已加载条数 < 总数) */ hasMore: boolean; /** * 拉取指定页。 * - `append=false`:替换(首屏 / 改 keyword、筛选、排序后的重查); * - `append=true`:追加到已累积列表(滚动触底加载下一页)。 */ fetchPage: (targetPage: number, append: boolean) => Promise; /** 本实例的 OS Server 订阅 id */ subscriberId: string; } export declare function useEsSalesGridData(params: UseEsSalesGridDataParams): UseEsSalesGridDataResult;