UNPKG

drip-table

Version:

A tiny and powerful enterprise-class solution for building tables.

198 lines (197 loc) 5.29 kB
import './index.less'; import React from 'react'; import { type DripTableExtraOptions, type DripTableRecordTypeBase, type DripTableRecordTypeWithSubtable, type ExtractDripTableExtraOption } from "../../../types"; import { type ButtonProps } from "../button"; interface SlotElementBaseSchema { /** * 包裹 <Col> 样式名 */ className?: string; /** * 包裹 <Col> 样式 */ style?: React.CSSProperties; /** * 宽度: * {number} 跨度,取值 0-24。 * {'flex-auto'} 自动伸缩。 * {string} 透传给元素的 width 样式值。 */ span?: number | 'flex-auto' | string; /** * 对齐方式 * {'flex-start'} 左对齐。 * {'center'} 居中。 * {'flex-end'} 右对齐。 * {'space-between'} 两端对齐。 * {'space-around'} 等间对齐。 */ align?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'; /** * 是否可见 */ visible?: boolean; } interface SpacerSlotElementSchema extends SlotElementBaseSchema { /** * 占位区域 */ type: 'spacer'; } interface TextSlotElementSchema extends SlotElementBaseSchema { /** * 文本展示 */ type: 'text'; /** * 文本内容 */ text: string; } interface HTMLSlotElementSchema extends SlotElementBaseSchema { /** * 富文本展示 */ type: 'html'; /** * 富文本内容 */ html: string; } interface SearchSlotElementSchema extends SlotElementBaseSchema { /** * 基本搜索 */ type: 'search'; /** * 搜索区域类名 */ wrapperClassName?: string; /** * 搜索区域样式 */ wrapperStyle?: React.CSSProperties; /** * 暗纹提示 */ placeholder?: string; /** * 显示清空按钮 */ allowClear?: boolean; /** * 搜索按钮文字 */ searchButtonText?: string; /** * 搜索按钮大小 */ searchButtonSize?: 'large' | 'middle' | 'small'; /** * 多维度搜索维度指定 */ searchKeys?: { label: string; value: number | string; }[]; /** * 多维度搜索默认维度值 */ searchKeyDefaultValue?: number | string; } interface CustomSlotElementSchema extends SlotElementBaseSchema { /** * 用户自定义组件插槽 */ type: 'slot'; /** * 插槽渲染函数标识符 */ slot: string; /** * 插槽样式类名 */ class?: string; /** * 插槽自定义样式 */ style?: Record<string, string>; /** * 透传给自定义组件的数据 */ data?: unknown; /** * @deprecated 请使用 `data`、`class`、`style` 字段 */ props?: Record<string, unknown>; } interface InsertButtonSlotElementSchema extends SlotElementBaseSchema { type: 'insert-button'; insertButtonClassName?: string; insertButtonStyle?: React.CSSProperties; insertButtonText?: string; showIcon?: boolean; } interface LayoutSelectorSlotElementSchema extends SlotElementBaseSchema { /** * table布局方式选择器 */ type: 'layout-selector'; /** * 布局方式选择器提示文案 */ selectorButtonText?: string; /** * 选择器按钮样式 */ selectorButtonType?: ButtonProps['type']; } interface DisplayColumnSelectorSlotElementSchema extends SlotElementBaseSchema { /** * 展示列选择器 */ type: 'display-column-selector'; /** * 展示列选择器提示文案 */ selectorButtonText?: string; /** * 选择器按钮样式 */ selectorButtonType?: ButtonProps['type']; } export declare type DripTableSlotElementSchema = SpacerSlotElementSchema | TextSlotElementSchema | HTMLSlotElementSchema | SearchSlotElementSchema | CustomSlotElementSchema | InsertButtonSlotElementSchema | DisplayColumnSelectorSlotElementSchema | LayoutSelectorSlotElementSchema; export interface DripTableSlotSchema { /** * 插槽自定义样式 */ style?: React.CSSProperties; /** * 插槽展示元素配置 */ elements?: DripTableSlotElementSchema[]; } interface SlotRenderProps<RecordType extends DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, ExtractDripTableExtraOption<ExtraOptions, 'SubtableDataSourceKey'>>, ExtraOptions extends Partial<DripTableExtraOptions> = never> { /** * 自定义样式 */ style?: React.CSSProperties; /** * 插槽 Schema 配置 */ schema: DripTableSlotSchema; /** * 当前插槽位置列 Schema 唯一标识符 */ columnKey?: string; /** * 当前插槽位置行数据(仅位于行插槽可用) */ record?: RecordType; /** * 当前插槽位置行下标(仅位于行插槽可用) */ recordIndex?: number; } declare function SlotRender<RecordType extends DripTableRecordTypeWithSubtable<DripTableRecordTypeBase, ExtractDripTableExtraOption<ExtraOptions, 'SubtableDataSourceKey'>>, ExtraOptions extends Partial<DripTableExtraOptions> = never>(props: SlotRenderProps<RecordType, ExtraOptions>): React.JSX.Element | null; export default SlotRender;