import React from "react"; import type { ColumnScheme, QueryScheme, CurrentSchemeDto } from "../shared/storage/schemeStorageAdapter"; import type { GlobalConfigPermissions } from '../shared/permissions/globalConfigPermissions'; import type { HostEntityExtensions } from '../types'; /** * 方案管理 API 接口 * * ⚠️ 必须通过 useSchemeManager Hook 创建,然后传入 Provider * * @example * ```tsx * const adapter = useMemo(() => new BackendApiSchemeAdapter({ ... }), []); * const schemeManager = useSchemeManager({ adapter, autoLoad: true }); * * * ``` */ export interface SchemeManagementAPI { /** * 所有表格的列方案数据 * key: gridId, value: 该表格的列方案数组 */ columnSchemes?: Record; /** * 所有表格的查询方案数据 * key: gridId, value: 该表格的查询方案数组 */ querySchemes?: Record; /** * 所有表格的当前方案 * key: gridId, value: 该表格的当前方案ID */ currentSchemes?: Record; /** * 方案加载状态 */ schemesLoading?: boolean; /** * 最后同步时间戳 */ lastSyncTime?: number; /** * 保存列方案 */ saveColumnScheme?: (gridId: string, scheme: ColumnScheme) => Promise; /** * 删除列方案 */ deleteColumnScheme?: (gridId: string, schemeId: string) => Promise; /** * 设置当前列方案 */ setCurrentColumnScheme?: (gridId: string, schemeId: string | null) => Promise; /** * 保存查询方案 */ saveQueryScheme?: (gridId: string, scheme: QueryScheme) => Promise; /** * 删除查询方案 */ deleteQueryScheme?: (gridId: string, schemeId: string) => Promise; /** * 设置当前查询方案 */ setCurrentQueryScheme?: (gridId: string, schemeId: string | null) => Promise; /** * 刷新所有方案数据 */ refreshSchemes?: () => Promise; /** * 获取指定表格的列方案列表 */ getColumnSchemes?: (gridId: string) => ColumnScheme[]; /** * 获取指定表格的查询方案列表 */ getQuerySchemes?: (gridId: string) => QueryScheme[]; /** * 获取指定表格的当前方案 */ getCurrentScheme?: (gridId: string) => CurrentSchemeDto | null; } /** * GridPlus Context 值接口 * * ⚠️ 必须包含方案管理 API,通过 useSchemeManager Hook 创建后传入 */ export interface GridPlusContextValue extends SchemeManagementAPI { /** * 扩展列,允许运行时动态添加,用于展示用户自定义的列 */ extensibleColumns: any; /** * 当前表格的列状态信息,包括列的显示/隐藏、顺序、宽度等 */ columnState: any; /** * 原始完整的列定义,包含所有自定义属性(cellRenderer、valueFormatter、valueEnum 等) * 用于列方案应用时保留这些属性 */ allColDefs?: import('../types').ExtendedColDef[]; /** * 初始列定义(从 props 传入的原始值,不会被列方案修改) * 用于获取原始 headerName,以便显示修改状态 */ initialColumnDefs?: import('../types').ExtendedColDef[]; /** * 保存当前表格的列状态到服务器(仅保存当前表格) * @param gridKey 表格唯一标识 * @param columnState 当前列状态数组 */ onSaveColumnState: (gridKey: string, columnState: any[]) => void; /** * 将当前列配置应用为"全局默认",影响所有表格 * @param columnState 要应用的列配置 */ applyToGlobal: (gridKey: string) => void; /** * 恢复当前用户当前表格为"默认列配置" * @param gridKey 表格唯一标识 */ resetCurrent: (gridKey: string) => void; /** * 恢复所有用户当前表格为"默认列配置" */ resetAll: (gridKey: string) => void; /** * 查询表单项列表(用于查询方案管理器) * @deprecated 已移至 QueryFormContext(useQueryForm);保留此声明仅为向后兼容,AgGridPlus 不再经本 Context 提供。 */ queryFormItems?: any[]; /** * 当前查询项顺序 * @deprecated 已移至 QueryFormContext(useQueryForm)。 */ currentQueryOrder?: string[]; /** * 更新查询项顺序 * @deprecated 已移至 QueryFormContext(useQueryForm)。 */ updateQueryOrder?: (order: string[]) => void; /** * 当前用户ID(内部使用) * * 用于 SchemeManager 监听用户切换,自动重新加载方案数据 * 此字段由 useSchemeManager 自动管理,无需手动设置 */ currentUserId?: string | null; /** * 将当前列配置应用为全局默认(管理员操作) * @param gridId 表格标识 * @param schemeId 源方案ID(可选,不传则使用当前激活的方案) */ applySchemeToGlobal?: (gridId: string, schemeId?: string) => Promise; /** * 重置当前用户配置,回退到全局配置 * @param gridId 表格标识 */ resetToGlobal?: (gridId: string) => Promise; /** * 重置所有用户配置(管理员操作) * @param gridId 表格标识 */ resetAllUsers?: (gridId: string) => Promise; /** * 全局配置权限信息 * 由使用端(业务应用)传入,用于前端根据权限动态显示/隐藏操作按钮 */ globalConfigPermissions?: GlobalConfigPermissions; /** * 是否使用全局列方案作为回退 * 当没有用户方案时自动使用全局方案,此时为 true */ isUsingGlobalFallback?: boolean; /** * 是否使用全局查询方案作为回退 */ isUsingGlobalQueryFallback?: boolean; /** * 实体扩展字段配置映射 * 来自后端 ABP 配置,用于 AgGridPlus 根据 entityType 自动注入扩展列 */ hostEntityExtensions?: HostEntityExtensions; } export declare const GridPlusContext: React.Context;