ui-lib/lib/ui/grid/column.d.ts
2024-01-25 14:56:31 +08:00

220 lines
9.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Grid, GridItem, GridItemWrapper, GridSourceItem } from "./grid";
import { Dropdown, DropdownOptions } from "../dropdown";
/** 列类型枚举 */
interface GridColumnType {
/** 通用列 */
0: "Common";
/** 单行文本框列 */
1: "Input";
/** 下拉选择列 */
2: "Dropdown";
/** 复选框列 */
3: "Checkbox";
/** 图标列 */
4: "Icon";
/** 多行文本列 */
5: "Text";
/** 日期选择列 */
6: "Date";
}
/** 列定义接口 */
export interface GridColumnDefinition {
/** 列关键字,默认以该关键字从行数据中提取单元格值,行数据的关键字属性值里包含 DisplayValue 则优先显示此值 */
key?: string;
/** 列的类型,可以为 {@linkcode GridColumn} 的子类,或者内置类型 {@linkcode GridColumnType} */
type?: keyof GridColumnType | typeof GridColumn;
/** 列标题文本 */
caption?: string;
/** 列标题的元素样式 */
captionStyle?: { [key: string]: string };
/** 大于 0 则设置为该宽度,否则根据列内容自动调整列宽 */
width?: Number;
/** 列对齐方式 */
align?: "left" | "center" | "right";
/**
* 列是否可用(可编辑),允许以下类型<br/><br/>
* <code>boolean</code> 则直接使用该值<br/><br/>
* <code>string</code> 则以该值为关键字从行数据中取值作为判断条件<br/><br/>
* <code>(item: GridItem | any) => boolean</code> 则调用该函数(上下文为列定义对象),以返回值作为判断条件<br/><br/>
*/
enabled?: boolean | string | ((item: GridItem | any) => boolean);
/** 单元格取值采用该方法返回的值 */
filter?: (item: GridItem | any) => any;
/** 单元格以该值填充内容忽略filter与关键字属性 */
text?: string;
/** 列是否可见 */
visible?: boolean;
/** 列是否允许调整宽度 */
resizable?: boolean;
/** 列是否允许排序 */
sortable?: boolean;
/** 列是否允许重排顺序 */
orderable?: boolean;
/** 列为复选框类型时是否在列头增加全选复选框 */
allcheck?: boolean;
/** 单元格css样式对象仅在重建行元素时读取 */
css?: { [key: string]: string };
/** 根据返回值填充单元格样式(填充行列数据时读取) */
styleFilter?: (item: GridItem | any) => { [key: string]: string };
/** 根据返回值设置单元格背景色 */
bgFilter?: (item: GridItem | any) => string;
/** 给单元格元素附加事件(事件函数上下文为数据行对象) */
events?: { [event: string]: any };
/** 根据返回值设置单元格元素的附加属性,允许直接设置对象也支持函数返回对象 */
attrs?: { [key: string]: string } | ((item: GridItem | any) => { [key: string]: string });
/** 是否允许进行列头过滤 */
allowFilter?: boolean;
/** 自定义列过滤器的数据源函数上下文为Grid */
filterSource?: Array<GridItem | any> | ((col: GridColumnDefinition) => Array<GridItem | any>);
/** 自定义列排序函数 */
sortFilter?: (a: GridItem | any, b: GridItem | any) => -1 | 0 | 1;
/** 列为下拉列表类型时以该值设置下拉框的参数 */
dropOptions?: DropdownOptions;
/** 列为下拉列表类型时以该值设置下拉列表数据源,支持函数返回,也支持返回异步对象 */
source?: Array<GridSourceItem | any> | ((item: GridItem | any) => Array<GridSourceItem | any> | Promise<Array<GridSourceItem | any>>);
/** 下拉列表数据源是否缓存结果即行数据未发生变化时仅从source属性获取一次值 */
sourceCache?: boolean;
/** 列为图标类型时以该值设置图标样式(函数上下文为列定义对象),允许值为 <code>fa-light</code>、<code>fa-regular</code>、<code>fa-solid</code> */
iconType?: string;
/** 列为图标类型时以该值作为单元格元素的额外样式类型(函数上下文为列定义对象) */
iconClassName?: string | ((item: GridItem | any) => string);
/** 列为日期类型时以该值作为最小可选日期值 */
dateMin?: string;
/** 列为日期类型时以该值作为最大可选日期值 */
dateMax?: string;
/** 以返回值额外设置单元格的tooltip函数上下文为列定义对象 */
tooltip?: string | ((item: GridItem | any) => string);
/**
* 列头复选框改变时触发
* @param this 上下文为 Grid 对象
* @param col 列定义对象
* @param flag 是否选中
*/
onAllChecked?: (this: Grid, col: GridColumnDefinition, flag: boolean) => void;
/**
* 单元格发生变化时触发
* @param this 上下文为 Grid 对象
* @param item 数据行对象
* @param value 修改后的值
* @param oldValue 修改前的值
* @param e 列修改事件传递过来的任意对象
*/
onChanged?: (this: Grid, item: GridItem | any, value: boolean | any, oldValue: any, e?: any) => void;
/**
* 文本单元格在输入完成时触发的事件
* @param this 上下文为 Grid 对象
* @param item 数据行对象
* @param value 修改后的文本框值
*/
onInputEnded?: (this: Grid, item: GridItem | any, value: string) => void;
/**
* 列过滤点击OK时触发的事件
* @param this 上下文为 Grid 对象
* @param col 列定义对象
* @param selected 选中的过滤项
*/
onFilterOk?: (this: Grid, col: GridColumnDefinition, selected: Array<GridItem | any>) => void;
/**
* 列过滤后触发的事件
* @param this 上下文为 Grid 对象
* @param col 列定义对象
*/
onFiltered?: (this: Grid, col: GridColumnDefinition) => void;
/**
* 列为下拉框类型时在下拉列表展开时触发的事件
* @param this 上下文为列定义对象
* @param item 数据行对象
* @param drop 下拉框对象
*/
onDropExpanded?: (this: GridColumnDefinition, item: GridItem | any, drop: Dropdown) => void;
}
/** 列定义基类 */
export class GridColumn {
/**
* 创建显示单元格时调用的方法
* @param col 列定义对象
* @returns 返回创建的单元格元素
*/
static create(col: GridColumnDefinition): HTMLElement;
/**
* 创建编辑单元格时调用的方法<br/><br/>
* 元素修改后设置行包装对象的 <code>__editing</code> 后,支持在离开编辑状态时及时触发 {@linkcode leaveEdit} 方法<br/>
* 更多例子参考代码中 {@linkcode GridDropdownColumn} 的实现。
* @param trigger 编辑事件回调函数e 参数会传递给 {@linkcode getValue} 方法
* @param col 列定义对象
* @param container 父容器元素
* @param vals 行包装对象,其 <code>values</code> 属性为行数据对象
* @returns 返回创建的编辑状态的单元格元素
*/
static createEdit(trigger: (e: any) => void, col: GridColumnDefinition, container: HTMLElement, vals: GridItemWrapper): HTMLElement;
/**
* 设置单元格值时调用的方法
* @param element 单元格元素
* @param val 待设置的单元格值
* @param vals 行包装对象
* @param col 列定义对象
* @param grid {@linkcode Grid} 对象
*/
static setValue(element: HTMLElement, val: string | boolean | any, vals: GridItemWrapper, col: GridColumnDefinition, grid: Grid): void;
/**
* 获取编辑状态单元格值时调用的方法
* @param e 由 {@linkcode createEdit} 方法中 <code>trigger</code> 函数传递来的对象
* @param col 列定义对象
* @returns 返回单元格的值
*/
static getValue(e: any, col: GridColumnDefinition): string | boolean | any;
/**
* 设置单元格样式时调用的方法
* @param element 单元格元素
* @param style 样式对象
*/
static setStyle(element: HTMLElement, style: { [key: string]: string }): void;
/**
* 设置单元格可用性时调用的方法
* @param element 单元格元素
* @param enabled 启用值为false时代表禁用
*/
static setEnabled(element: HTMLElement, enabled?: boolean): void;
/**
* 单元格离开编辑元素时触发,需要由行包装对象的 <code>__editing</code> 来确定是否触发。
* @param element 单元格元素
* @param container 父容器元素
*/
static leaveEdit(element: HTMLElement, container: HTMLElement): void;
}
/** 单行文本列 */
export class GridInputColumn extends GridColumn {
/**
* 设置该类型是否支持触发 {@linkcode GridColumnDefinition.onInputEnded} 方法<br/>
* 该属性返回 <code>true</code> 后,在任意事件中修改行包装对象的 <code>__editing</code> 值,则会在行列元素变动时及时触发 {@linkcode GridColumnDefinition.onInputEnded} 方法,避免例如文本框还未触发 <code>onchange</code> 事件就被移除元素而导致的问题<br/>
* 更多例子参考代码中 {@linkcode GridInputColumn} 的实现
*/
static get editing(): boolean;
}
/** 多行文本列 */
export class GridTextColumn extends GridInputColumn { }
/** 下拉选择列 */
export class GridDropdownColumn extends GridColumn { }
/** 复选框列 */
export class GridCheckboxColumn extends GridColumn { }
/** 图标列 */
export class GridIconColumn extends GridColumn { }
/** 日期选择列 */
export class GridDateColumn extends GridColumn {
/**
* 格式化日期对象为 M/d/yyyy 格式的字符串
* @param date 日期对象
* @returns 返回格式化后的字符串
*/
static formatDate(date: Date): string;
}