UNPKG

element-plus

Version:

A Component Library for Vue3.0

143 lines (135 loc) 3.76 kB
import { PropType } from 'vue' import { DefaultRow } from '../table/defaults' import { ComponentInternalInstance, Ref, VNode } from 'vue' import { Table } from '../table/defaults' type CI<T> = { column: TableColumnCtx<T>; $index: number; } type Filters = { text: string value: string }[] type FilterMethods<T> = (value, row: T, column: TableColumnCtx<T>) => void interface TableColumnCtx<T> { id: string realWidth: number type: string label: string className: string labelClassName: string property: string prop: string width: string | number minWidth: string | number renderHeader: (data: CI<T>) => VNode sortable: boolean | string sortMethod: (a: T, b: T) => number sortBy: string | ((row: T, index: number) => string) | string[] resizable: boolean columnKey: string rawColumnKey: string align: string headerAlign: string showTooltipWhenOverflow: boolean showOverflowTooltip: boolean fixed: boolean | string formatter: ( row: T, column: TableColumnCtx<T>, cellValue, index: number, ) => VNode selectable: (row: T, index: number) => boolean reserveSelection: boolean filterMethod: FilterMethods<T> filteredValue: string[] filters: Filters filterPlacement: string filterMultiple: boolean index: number | ((index: number) => number) sortOrders: ('ascending' | 'descending' | null)[] renderCell: (data: any) => void colSpan: number rowSpan: number children: TableColumnCtx<T>[] level: number filterable: boolean | FilterMethods<T> | Filters order: string isColumnGroup: boolean columns: TableColumnCtx<T>[] getColumnIndex: () => number no: number } interface TableColumn<T> extends ComponentInternalInstance { vnode: { vParent: TableColumn<T> | Table<T> } & VNode vParent: TableColumn<T> | Table<T> columnId: string columnConfig: Ref<Partial<TableColumnCtx<T>>> } export type { Filters, FilterMethods, TableColumnCtx, TableColumn } export default { type: { type: String, default: 'default', }, label: String, className: String, labelClassName: String, property: String, prop: String, width: { type: [String, Number], default: '', }, minWidth: { type: [String, Number], default: '', }, renderHeader: Function as PropType< TableColumnCtx<DefaultRow>['renderHeader'] >, sortable: { type: [Boolean, String], default: false, }, sortMethod: Function as PropType<TableColumnCtx<DefaultRow>['sortMethod']>, sortBy: [String, Function, Array] as PropType< TableColumnCtx<DefaultRow>['sortBy'] >, resizable: { type: Boolean, default: true, }, columnKey: String, align: String, headerAlign: String, showTooltipWhenOverflow: Boolean, showOverflowTooltip: Boolean, fixed: [Boolean, String], formatter: Function as PropType<TableColumnCtx<DefaultRow>['formatter']>, selectable: Function as PropType<TableColumnCtx<DefaultRow>['selectable']>, reserveSelection: Boolean, filterMethod: Function as PropType< TableColumnCtx<DefaultRow>['filterMethod'] >, filteredValue: Array as PropType<TableColumnCtx<DefaultRow>['filteredValue']>, filters: Array as PropType<TableColumnCtx<DefaultRow>['filters']>, filterPlacement: String, filterMultiple: { type: Boolean, default: true, }, index: [Number, Function] as PropType<TableColumnCtx<DefaultRow>['index']>, sortOrders: { type: Array as PropType<TableColumnCtx<DefaultRow>['sortOrders']>, default: () => { return ['ascending', 'descending', null] }, validator: (val: TableColumnCtx<unknown>['sortOrders']) => { return val.every( (order: string) => ['ascending', 'descending', null].indexOf(order) > -1, ) }, }, }