import { GridApi, ColDef, ColGroupDef, ICellRendererParams } from "ag-grid-community"; import { AgGridReactProps } from "ag-grid-react"; import React, { CSSProperties, ReactNode } from "react"; import type { GridPlusError } from "./errors"; import type { EmptyStateTexts } from "./utils/emptyState"; interface GridRef { onRefresh: () => void; } interface GridProps extends AgGridReactProps { /** * 为 true 时,`valueEnum[].color` 按当前主题底色自动收成够读(WCAG 正文 4.5:1)的 CSS 色: * 语义档名(success/warning…)与预设名(cyan/pink…)换成真实色值,过浅的 hex 压暗(深色主题则提亮), * 缺省色写成 `inherit`。默认 false:color 按 CSS 原样输出,保持既有行为。@author nokecy */ valueEnumContrast?: boolean; hideTool?: boolean; style?: CSSProperties; params?: any; initParams?: any; loading?: boolean; request?: (params: any, sort: any, filter: any) => Promise; dataSource?: any[]; treeKeyName?: string; treeParentName?: string; search?: boolean; headerTitle?: React.ReactNode; columnDefs?: (AgGridColumnPropsClone | ColGroupDef)[] | null; toolBarRender?: (gridApi?: GridApi, filter?: string, queryFilter?: any, paginationInfo?: { /** @deprecated 改用 page */ current: number; /** @deprecated 改用 page/pageSize */ skipCount: number; /** @deprecated 改用 page/pageSize */ maxResultCount: number; /** 当前页码(1-based) * @author nokecy */ page?: number; /** 每页条数 * @author nokecy */ pageSize?: number; }) => React.ReactNode[]; defaultSearchExpand?: Boolean; /** * 用于标识grid唯一标识,用于保存列方案 */ gridKey?: string; /** * 列方案 */ gridColumnState?: any[]; /** * 列表空数据文字提示。 * 传了它就一律用它(最高优先级),保持既有调用点行为不变; * 想按「无数据 / 筛选无结果 / 无权限 / 加载失败」分别给文案,用 `emptyState`。 */ overlayNoRowsTemplateText?: string; /** * 空态四分文案覆盖:{ noData, noResult, noPermission, error }。 * 不传就用内置默认:加载失败说加载失败并给「重试」,没筛选就说「暂无数据」, * 不再一律引导用户去调筛选条件。 * @author nokecy */ emptyState?: EmptyStateTexts; /** * 当前用户是否有权查看该列表。传 false 时空态说「没有权限」而不是「暂无数据」, * 免得用户以为是数据还没录进来。 * @author nokecy */ accessible?: boolean; /** * 查询Form默认展示行数 */ queryDefaultRows?: number; /** * 列表分页选择配置 */ pageSizeOptions?: number[]; /** * 分页大小,支持外部传入,优先级高于pageSizeOptions的默认值 */ pageSize?: number; hidePagination?: boolean; gridRef?: React.Ref; /** * 选中行变化回调函数 */ onSelectedRowsChange?: (selectedRows: any[]) => void; /** * 查询区条件值变化时回调(输入、默认值落位、重置都会触发),参数为当前条件快照,以查询字段名为键。 * 只通知、不发起查询;宿主可据此与上次查询用的条件比较,提示「条件已变更,请查询」。 * @author nokecy */ onQueryValuesChange?: (values: Record) => void; /** * 错误处理回调函数 * 当组件发生错误时调用,可用于自定义错误处理逻辑 */ onError?: (error: GridPlusError) => void; /** * 是否启用点击行选择功能 * - true: 启用行点击选择(默认) * - false: 禁用点击行选择(仅复选框可选择) * * 默认值: true * * AG-Grid v33+ 默认行为: * 1. **默认单选模式** (`mode: 'singleRow'`) * 2. 点击行即可选择/取消选择 * 3. 用户可通过 `rowSelection` prop 覆盖为多选模式 * * 多选模式示例: * ```tsx * * ``` * * 内部实现: * - 使用 v33+ 对象化 rowSelection API * - 自动配置 enableClickSelection * - 多选模式下自动配置 enableSelectionWithoutKeys * - 兼容旧的字符串 API('single' | 'multiple') */ enableClickSelection?: boolean; /** * 是否使用 AG-Grid 原生树形数据过滤 * - true: 使用原生 treeDataParentIdField 配置,列头过滤器可以过滤所有层级的数据 * - false: 使用旧的 flatten(toTree()) 逻辑(默认,保持兼容) * * @default false */ useNativeTreeFilter?: boolean; /** * 实体类型全名,用于自动注入扩展字段列 * 当配置此属性时,组件会自动从 context 的 hostEntityExtensions * 获取对应实体的扩展字段并转换为列定义 * * @example "Burn.Product.Domain.Product" * @author nokecy */ entityType?: string; } interface AgGridColumnPropsClone extends ColDef { /** * 是否精确查询 */ exactQuery?: boolean; hideInTable?: boolean; hideInSearch?: boolean; queryField?: string; /** 查询区独立标题;优先于列方案中的表头名称。@author nokecy */ searchTitle?: string; /** * 是否文本缩略显示,并使用tooltip */ ellipsis?: boolean; /** * 枚举值配置,支持数组形式: * [ * { value: any, label: string, color?: string, default?: boolean } * ] * - 用于渲染查询下拉、标签、过滤等 * - 支持设置默认值(default: true) * - 支持多选(多个 default: true) */ valueEnum?: Array<{ value: any; label: string; color?: string; default?: boolean; }>; /** * `valueEnum` **未命中**时的渲染接管(`null` / `undefined` / 空串 / 后端新增码值都走这里)。 * * 不传则原样输出该值(历史行为,向后兼容)。业务侧用它输出中性「—」/「未知(原码)」: * ```tsx * enumFallbackRenderer: ({ value }) => {enumDisplayText(value)} * ``` * 命中枚举项时不会调用它(那一支有固定的上色渲染)。 */ enumFallbackRenderer?: (params: ICellRendererParams) => ReactNode; searchComponent?: ReactNode | JSX.Element | ((props: any) => JSX.Element); searchComponentProps?: any; searchSort?: number; enum?: { value: any; label: any; }[]; /** * 列计算类型配置 * - "sum": 求和计算 * - "avg": 平均值计算 * - "standardDeviation": 标准差计算 * - false: 禁用计算 * 当设置后,会在表格底部固定行显示计算结果 */ calculateType?: "sum" | "avg" | "standardDeviation" | false; } declare function AgGridColumn(props: AgGridColumnPropsClone | ColGroupDef): React.JSX.Element; export { GridProps, AgGridColumn, GridRef, AgGridColumnPropsClone };