import type { CSSProperties } from 'react'; import type { ClassValue, DispatchEventFn, GetPopOverContainer, OnActionFn, OnEventProps, PickClassStyleType, ReactPropsBase, RendererEnv, RendererEvent, RendererProps, SchemaRenderFn } from 'jamis-core'; import type { BadgeObject, BaseSchema, IColumn, IRow, SchemaClassName, SchemaCopyable, SchemaExpression, SchemaObject, SchemaPopOver, SchemaQuickEdit, SchemaRemark } from '../../types'; import type { AutoGenerateFilterObject, ITableStore } from '../types'; export * from './ColumnToggler.types'; export interface UseHeaderCellAffixProps extends Pick, PickClassStyleType { column: IColumn | (() => JSX.Element | null); autoGenerateFilter?: boolean | AutoGenerateFilterObject; store: ITableStore; query?: Record; fetcher: RendererEnv['fetcher']; popOverContainer?: GetPopOverContainer; onQuery?: (values: object) => void; onSort: (column: IColumn) => void; } export interface HeaderCellProps extends ReactPropsBase, PickClassStyleType { column: IColumn | (() => JSX.Element | null); store: ITableStore; headerCellClassName?: ClassValue; expandBtnClass?: ClassValue; resizable?: boolean; multiple?: boolean; tableFixed?: boolean; renderHeaderCellAffix: (column: IColumn | (() => JSX.Element | null)) => JSX.Element | null; getModalContainer?: () => HTMLElement; render: SchemaRenderFn; resolveVariable: (expr: string) => T; cellProps: HeaderCellRenderProps; onCheckAll?: () => void; onResizeMouseDown: (e: React.MouseEvent) => void; } export interface BodyCellProps extends ReactPropsBase, PickClassStyleType { region: string; column: IColumn | (() => JSX.Element | null); row: IRow; ignoreDrag?: boolean; bordered?: boolean; store: ITableStore; bodyCellClassName?: ClassValue; tableFixed: boolean; multiple?: boolean; expandBtnClass?: ClassValue; cellProps: RenderCellProps; popOverContainer: JSX.Element; canAccessSuperData?: boolean; quickEditFormRef: any; itemBadge?: BadgeObject; render: SchemaRenderFn; onCheck?: (row: IRow, value: any) => void; onDragStart?: (e: React.DragEvent) => void; onImageEnlarge: (info: any, target: { rowIndex: number; colIndex: number; }) => any; } export interface QuickSearchConfig { type?: string; controls?: any; tabs?: any; fieldSet?: any; [propName: string]: any; } export interface HeadCellSearchProps extends Pick, PickClassStyleType { name?: string; searchable: boolean | QuickSearchConfig; searchIcon?: string; searchIconClassName?: SchemaClassName; sortable?: boolean; label?: string; orderBy?: string; popOverContainer?: GetPopOverContainer; orderDir?: string; onQuery: (values: object) => void; } export interface QuickFilterConfig { options: Array; multiple: boolean; [propName: string]: any; } export interface HeadCellFilterProps extends Pick, PickClassStyleType { data: any; name: string; filterable: QuickFilterConfig; items?: any[]; filterOptions?: any[]; popOverContainer?: GetPopOverContainer; fetcher: RendererEnv['fetcher']; onQuery: (values: object) => void; } /** * 表格列,不指定类型时默认为文本类型。 */ export interface TableColumnObject { /** * 列标题, false时表示没有标题 */ label?: string | false; /** * 配置是否固定当前列 */ fixed?: 'left' | 'right' | 'none'; /** * 绑定字段名 */ name?: string; /** * 超级表头,用于对表头再一次进行分组 */ groupName?: string; /** * 配置查看详情功能 */ popOver?: SchemaPopOver; /** * 配置当前行是否启动,要用表达式 */ popOverEnableOn?: SchemaExpression; /** * 配置快速编辑功能 */ quickEdit?: SchemaQuickEdit; /** * 作为表单项时,可以单独配置编辑时的快速编辑面板。 */ quickEditOnUpdate?: SchemaQuickEdit; /** * 配置点击复制功能 */ copyable?: SchemaCopyable; /** * 配置是否可以排序 */ sortable?: boolean; /** * 是否可快速搜索 */ searchable?: boolean | SchemaObject; searchIcon?: string; searchIconClassName?: SchemaClassName; /** * 配置是否默认展示 */ toggled?: boolean; /** * 列宽度 */ width?: number | string; widthExpr?: SchemaExpression; /** * 列对齐方式 */ align?: 'left' | 'right' | 'center' | 'justify'; /** * 列样式表 */ className?: SchemaClassName; /** * 单元格样式表达式 */ classNameExpr?: SchemaExpression; /** * 列头样式表 */ labelClassName?: SchemaClassName; /** * todo */ filterable?: boolean | { source?: string; options?: Array; }; /** * 结合表格的 footable 一起使用。 * 填写 *、xs、sm、md、lg指定 footable 的触发条件,可以填写多个用空格隔开 */ breakpoint?: '*' | 'xs' | 'sm' | 'md' | 'lg'; /** * 提示信息 */ remark?: SchemaRemark; /** * 默认值, 只有在 input-table 里面才有用 */ value?: any; /** * 是否唯一, 只有在 input-table 里面才有用 */ unique?: boolean; /** * 表格列单元格是否可以获取父级数据域值,默认为true,该配置对当前列内单元格生效 */ canAccessSuperData?: boolean; /** * 用来根据数据控制自动分配色阶 */ backgroundScale?: { min?: number; max?: number; colors?: string[]; }; /** * 列内容超过宽度将自动省略... */ ellipsis?: boolean | { showTitle?: boolean; }; isHead?: boolean; /** 列内部元素的样式类 */ bodyClassName?: SchemaClassName; /** * 列内部元素的样式类 */ bodyStyle?: CSSProperties; } export interface TableCellSchema extends BaseSchema, TableColumnObject { type: 'cell' | 'table-cell'; } export interface TableCellProps extends RendererProps, Omit { wrapperComponent?: React.ComponentType; column: IColumn; } export interface HeaderCellRenderProps { /** 当前列索引 */ index: number; key: string | number; /** 经过计算后的列数 */ columns?: IColumn[]; /** 总列数 */ columnCount: number; colSpan?: number; rowSpan?: number; className?: string; style?: CSSProperties; [key: string]: any; } export interface RenderCellProps { /** 当前列索引 */ index: number; key: string | number; /** 一共多少列 */ columnCount: number; loading?: boolean; isHead?: boolean; colIndex?: number; colSpan?: number; className?: string; style?: CSSProperties; [key: string]: any; } export interface TableRowProps extends PickClassStyleType { columns: Array; item: IRow; parent?: IRow; itemClassName?: string; itemIndex: number; regionPrefix?: string; checkOnItemClick?: boolean; ignoreFootableContent?: boolean; striped?: boolean; canAccessSuperData?: boolean; footableMode?: boolean; footableColSpan?: number; itemAction?: any; render: RendererProps['render']; dispatchEvent: DispatchEventFn; onEvent?: OnEventProps; onAction?: OnActionFn; onQuickChange?: (item: IRow, values: object, saveImmediately?: boolean | any, savePristine?: boolean, options?: { resetOnFailed?: boolean; reload?: string; }) => void; onCheck: (item: IRow, value: boolean, shift?: boolean) => Promise; renderCell: (region: string, column: IColumn, item: IRow, props: RenderCellProps) => React.ReactNode; onRowClick?: (item: IRow, index: number, restArgs: { clientX?: number; clientY?: number; }) => Promise | void>; onRowDbClick?: (item: IRow, index: number, restArgs: { clientX?: number; clientY?: number; }) => Promise | void>; onRowMouseUp?: (item: IRow, index: number, restArgs: { clientX?: number; clientY?: number; }) => Promise | void>; onRowMouseEnter?: (item: IRow, index: number) => Promise | void>; onRowMouseLeave?: (item: IRow, index: number) => Promise | void>; }