refactor: table to ts
parent
f8750f2350
commit
f8ada772ae
|
@ -213,7 +213,7 @@ const components = [
|
|||
|
||||
const install = function(app: App) {
|
||||
components.forEach(component => {
|
||||
app.use(component as { install: () => any });
|
||||
app.use(component as typeof component & { install: () => void });
|
||||
});
|
||||
|
||||
app.config.globalProperties.$message = message;
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import { defineComponent } from 'vue';
|
||||
import { ColumnProps } from './interface';
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: 'ATableColumn',
|
||||
props: ColumnProps,
|
||||
render() {
|
||||
return null;
|
||||
},
|
||||
};
|
||||
});
|
|
@ -1,6 +1,7 @@
|
|||
import { defineComponent } from 'vue';
|
||||
import PropTypes from '../_util/vue-types';
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: 'ATableColumnGroup',
|
||||
props: {
|
||||
title: PropTypes.any,
|
||||
|
@ -9,4 +10,4 @@ export default {
|
|||
render() {
|
||||
return null;
|
||||
},
|
||||
};
|
||||
});
|
|
@ -1,11 +0,0 @@
|
|||
const FilterDropdownMenuWrapper = (_, { attrs, slots }) => {
|
||||
return (
|
||||
<div class={attrs.class} onClick={e => e.stopPropagation()}>
|
||||
{slots.default?.()}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
FilterDropdownMenuWrapper.inheritAttrs = false;
|
||||
|
||||
export default FilterDropdownMenuWrapper;
|
|
@ -0,0 +1,20 @@
|
|||
import { FunctionalComponent } from 'vue';
|
||||
|
||||
export interface FilterDropdownMenuWrapperProps {
|
||||
class?: string;
|
||||
}
|
||||
|
||||
const FilterDropdownMenuWrapper: FunctionalComponent<FilterDropdownMenuWrapperProps> = (
|
||||
props,
|
||||
{ slots },
|
||||
) => {
|
||||
return (
|
||||
<div class={props.class} onClick={e => e.stopPropagation()}>
|
||||
{slots.default?.()}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
FilterDropdownMenuWrapper.inheritAttrs = false;
|
||||
|
||||
export default FilterDropdownMenuWrapper;
|
|
@ -1,20 +1,31 @@
|
|||
import { defineComponent } from 'vue';
|
||||
import Checkbox from '../checkbox';
|
||||
import Radio from '../radio';
|
||||
import { SelectionBoxProps } from './interface';
|
||||
import BaseMixin from '../_util/BaseMixin';
|
||||
import { getOptionProps } from '../_util/props-util';
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: 'SelectionBox',
|
||||
mixins: [BaseMixin],
|
||||
inheritAttrs: false,
|
||||
props: SelectionBoxProps,
|
||||
data() {
|
||||
return {
|
||||
checked: this.getCheckState(this.$props),
|
||||
checked: false,
|
||||
};
|
||||
},
|
||||
|
||||
setup() {
|
||||
return {
|
||||
unsubscribe: null,
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.checked = this.getCheckState(this.$props);
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.subscribe();
|
||||
},
|
||||
|
@ -25,7 +36,7 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
getCheckState(props) {
|
||||
getCheckState(props): boolean {
|
||||
const { store, defaultSelection, rowIndex } = props;
|
||||
let checked = false;
|
||||
if (store.getState().selectionDirty) {
|
||||
|
@ -47,7 +58,7 @@ export default {
|
|||
},
|
||||
|
||||
render() {
|
||||
const { type, rowIndex, ...rest } = { ...getOptionProps(this), ...this.$attrs };
|
||||
const { type, rowIndex, ...rest } = { ...getOptionProps(this), ...this.$attrs } as any;
|
||||
const { checked } = this;
|
||||
const checkboxProps = {
|
||||
checked,
|
||||
|
@ -59,4 +70,4 @@ export default {
|
|||
}
|
||||
return <Checkbox {...checkboxProps} />;
|
||||
},
|
||||
};
|
||||
});
|
|
@ -5,6 +5,7 @@ import Menu from '../menu';
|
|||
import classNames from '../_util/classNames';
|
||||
import { SelectionCheckboxAllProps } from './interface';
|
||||
import BaseMixin from '../_util/BaseMixin';
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
function checkSelection({
|
||||
store,
|
||||
|
@ -87,13 +88,29 @@ function getCheckState(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: 'SelectionCheckboxAll',
|
||||
mixins: [BaseMixin],
|
||||
inheritAttrs: false,
|
||||
props: SelectionCheckboxAllProps,
|
||||
data() {
|
||||
const { $props: props } = this;
|
||||
|
||||
return {
|
||||
checked: getCheckState(props),
|
||||
indeterminate: getIndeterminateState(props),
|
||||
};
|
||||
},
|
||||
|
||||
setup() {
|
||||
return {
|
||||
defaultSelections: [],
|
||||
unsubscribe: null,
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
const { $props: props } = this;
|
||||
this.defaultSelections = props.hideDefaultSelections
|
||||
? []
|
||||
: [
|
||||
|
@ -106,11 +123,6 @@ export default {
|
|||
text: props.locale.selectInvert,
|
||||
},
|
||||
];
|
||||
|
||||
return {
|
||||
checked: getCheckState(props),
|
||||
indeterminate: getIndeterminateState(props),
|
||||
};
|
||||
},
|
||||
|
||||
watch: {
|
||||
|
@ -149,7 +161,7 @@ export default {
|
|||
const checked = getCheckState(props);
|
||||
const indeterminate = getIndeterminateState(props);
|
||||
this.setState(prevState => {
|
||||
const newState = {};
|
||||
const newState: any = {};
|
||||
if (indeterminate !== prevState.indeterminate) {
|
||||
newState.indeterminate = indeterminate;
|
||||
}
|
||||
|
@ -229,4 +241,4 @@ export default {
|
|||
</div>
|
||||
);
|
||||
},
|
||||
};
|
||||
});
|
|
@ -1,4 +1,4 @@
|
|||
import { inject, markRaw } from 'vue';
|
||||
import { defineComponent, inject, markRaw } from 'vue';
|
||||
import CaretUpFilled from '@ant-design/icons-vue/CaretUpFilled';
|
||||
import CaretDownFilled from '@ant-design/icons-vue/CaretDownFilled';
|
||||
import VcTable, { INTERNAL_COL_DEFINE } from '../vc-table';
|
||||
|
@ -12,10 +12,18 @@ import Column from './Column';
|
|||
import ColumnGroup from './ColumnGroup';
|
||||
import createBodyRow from './createBodyRow';
|
||||
import { flatArray, treeMap, flatFilter } from './util';
|
||||
import { initDefaultProps, getOptionProps } from '../_util/props-util';
|
||||
import { getOptionProps } from '../_util/props-util';
|
||||
import initDefaultProps from '../_util/props-util/initDefaultProps';
|
||||
import BaseMixin from '../_util/BaseMixin';
|
||||
import { defaultConfigProvider } from '../config-provider';
|
||||
import { TableProps } from './interface';
|
||||
import {
|
||||
TableProps,
|
||||
TableComponents,
|
||||
TableState,
|
||||
ITableProps,
|
||||
IColumnProps,
|
||||
TableStateFilters,
|
||||
} from './interface';
|
||||
import Pagination from '../pagination';
|
||||
import Spin from '../spin';
|
||||
import LocaleReceiver from '../locale-provider/LocaleReceiver';
|
||||
|
@ -30,15 +38,15 @@ function stopPropagation(e) {
|
|||
e.stopPropagation();
|
||||
}
|
||||
|
||||
function getRowSelection(props) {
|
||||
function getRowSelection(props: ITableProps) {
|
||||
return props.rowSelection || {};
|
||||
}
|
||||
|
||||
function getColumnKey(column, index) {
|
||||
function getColumnKey(column: IColumnProps, index?: number) {
|
||||
return column.key || column.dataIndex || index;
|
||||
}
|
||||
|
||||
function isSameColumn(a, b) {
|
||||
function isSameColumn(a: IColumnProps, b: IColumnProps): boolean {
|
||||
if (a && b && a.key && a.key === b.key) {
|
||||
return true;
|
||||
}
|
||||
|
@ -68,7 +76,7 @@ const defaultPagination = {
|
|||
*/
|
||||
const emptyObject = {};
|
||||
|
||||
const createComponents = (components = {}) => {
|
||||
const createComponents = (components: TableComponents = {}) => {
|
||||
const bodyRow = components && components.body && components.body.row;
|
||||
return {
|
||||
...components,
|
||||
|
@ -79,37 +87,37 @@ const createComponents = (components = {}) => {
|
|||
};
|
||||
};
|
||||
|
||||
function isTheSameComponents(components1 = {}, components2 = {}) {
|
||||
function isTheSameComponents(components1: TableComponents = {}, components2: TableComponents = {}) {
|
||||
return (
|
||||
components1 === components2 ||
|
||||
['table', 'header', 'body'].every(key => shallowEqual(components1[key], components2[key]))
|
||||
);
|
||||
}
|
||||
|
||||
function getFilteredValueColumns(state, columns) {
|
||||
function getFilteredValueColumns(state: TableState, columns?: IColumnProps) {
|
||||
return flatFilter(
|
||||
columns || (state || {}).columns || [],
|
||||
column => typeof column.filteredValue !== 'undefined',
|
||||
(column: IColumnProps) => typeof column.filteredValue !== 'undefined',
|
||||
);
|
||||
}
|
||||
|
||||
function getFiltersFromColumns(state, columns) {
|
||||
function getFiltersFromColumns(state: TableState, columns: IColumnProps) {
|
||||
const filters = {};
|
||||
getFilteredValueColumns(state, columns).forEach(col => {
|
||||
getFilteredValueColumns(state, columns).forEach((col: IColumnProps) => {
|
||||
const colKey = getColumnKey(col);
|
||||
filters[colKey] = col.filteredValue;
|
||||
});
|
||||
return filters;
|
||||
}
|
||||
|
||||
function isFiltersChanged(state, filters) {
|
||||
function isFiltersChanged(state: TableState, filters: TableStateFilters[]) {
|
||||
if (Object.keys(filters).length !== Object.keys(state.filters).length) {
|
||||
return true;
|
||||
}
|
||||
return Object.keys(filters).some(columnKey => filters[columnKey] !== state.filters[columnKey]);
|
||||
}
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: 'Table',
|
||||
mixins: [BaseMixin],
|
||||
inheritAttrs: false,
|
||||
|
@ -132,24 +140,19 @@ export default {
|
|||
|
||||
setup() {
|
||||
return {
|
||||
vcTable: null,
|
||||
checkboxPropsCache: {},
|
||||
store: null,
|
||||
configProvider: inject('configProvider', defaultConfigProvider),
|
||||
};
|
||||
},
|
||||
|
||||
data() {
|
||||
this.vcTable = null;
|
||||
// this.columns = props.columns || normalizeColumns(props.children)
|
||||
const props = getOptionProps(this);
|
||||
warning(
|
||||
!props.expandedRowRender || !('scroll' in props),
|
||||
'`expandedRowRender` and `scroll` are not compatible. Please use one of them at one time.',
|
||||
);
|
||||
this.checkboxPropsCache = {};
|
||||
|
||||
this.store = createStore({
|
||||
selectedRowKeys: getRowSelection(this.$props).selectedRowKeys || [],
|
||||
selectionDirty: false,
|
||||
});
|
||||
return {
|
||||
...this.getDefaultSortOrder(props.columns || []),
|
||||
// 减少状态
|
||||
|
@ -160,6 +163,13 @@ export default {
|
|||
filterDataCnt: 0,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
const props = getOptionProps(this);
|
||||
this.store = createStore({
|
||||
selectedRowKeys: getRowSelection(props).selectedRowKeys || [],
|
||||
selectionDirty: false,
|
||||
});
|
||||
},
|
||||
watch: {
|
||||
pagination: {
|
||||
handler(val) {
|
||||
|
@ -847,7 +857,7 @@ export default {
|
|||
delete pagination.onChange;
|
||||
delete pagination.onShowSizeChange;
|
||||
const filters = state.sFilters;
|
||||
const sorter = {};
|
||||
const sorter: any = {};
|
||||
let currentColumn = column;
|
||||
if (state.sSortColumn && state.sSortOrder) {
|
||||
currentColumn = state.sSortColumn;
|
||||
|
@ -1088,7 +1098,7 @@ export default {
|
|||
</div>
|
||||
);
|
||||
customHeaderCell = col => {
|
||||
let colProps = {};
|
||||
let colProps: any = {};
|
||||
// Get original first
|
||||
if (column.customHeaderCell) {
|
||||
colProps = {
|
||||
|
@ -1153,7 +1163,7 @@ export default {
|
|||
const { showHeader, locale, getPopupContainer, ...restProps } = {
|
||||
...getOptionProps(this),
|
||||
...this.$attrs,
|
||||
};
|
||||
} as any;
|
||||
const data = this.getCurrentPageData();
|
||||
const expandIconAsCell = this.expandedRowRender && this.expandIconAsCell !== false;
|
||||
|
||||
|
@ -1278,4 +1288,4 @@ export default {
|
|||
</div>
|
||||
);
|
||||
},
|
||||
};
|
||||
});
|
|
@ -1,8 +1,8 @@
|
|||
import PropTypes from '../_util/vue-types';
|
||||
|
||||
import { defineComponent } from 'vue';
|
||||
import { Store } from './createStore';
|
||||
import { getSlot } from '../_util/props-util';
|
||||
import Omit from 'omit.js';
|
||||
import omit from 'omit.js';
|
||||
|
||||
const BodyRowProps = {
|
||||
store: Store,
|
||||
|
@ -11,7 +11,7 @@ const BodyRowProps = {
|
|||
};
|
||||
|
||||
export default function createBodyRow(Component = 'tr') {
|
||||
const BodyRow = {
|
||||
const BodyRow = defineComponent({
|
||||
name: 'BodyRow',
|
||||
inheritAttrs: false,
|
||||
props: BodyRowProps,
|
||||
|
@ -22,7 +22,11 @@ export default function createBodyRow(Component = 'tr') {
|
|||
selected: selectedRowKeys.indexOf(this.rowKey) >= 0,
|
||||
};
|
||||
},
|
||||
|
||||
setup() {
|
||||
return {
|
||||
unsubscribe: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.subscribe();
|
||||
},
|
||||
|
@ -46,7 +50,7 @@ export default function createBodyRow(Component = 'tr') {
|
|||
},
|
||||
|
||||
render() {
|
||||
const rowProps = Omit({ ...this.$props, ...this.$attrs }, [
|
||||
const rowProps = omit({ ...this.$props, ...this.$attrs }, [
|
||||
'prefixCls',
|
||||
'rowKey',
|
||||
'store',
|
||||
|
@ -54,7 +58,7 @@ export default function createBodyRow(Component = 'tr') {
|
|||
]);
|
||||
const className = {
|
||||
[`${this.prefixCls}-row-selected`]: this.selected,
|
||||
[this.$attrs.class]: !!this.$attrs.class,
|
||||
[this.$attrs.class as string]: !!this.$attrs.class,
|
||||
};
|
||||
|
||||
return (
|
||||
|
@ -63,7 +67,7 @@ export default function createBodyRow(Component = 'tr') {
|
|||
</Component>
|
||||
);
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
return BodyRow;
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
import { watchEffect, reactive, defineComponent } from 'vue';
|
||||
import FilterFilled from '@ant-design/icons-vue/FilterFilled';
|
||||
import Menu, { SubMenu, Item as MenuItem } from '../vc-menu';
|
||||
import closest from 'dom-closest';
|
||||
|
@ -8,17 +9,18 @@ import Checkbox from '../checkbox';
|
|||
import Radio from '../radio';
|
||||
import FilterDropdownMenuWrapper from './FilterDropdownMenuWrapper';
|
||||
import { FilterMenuProps } from './interface';
|
||||
import { initDefaultProps, isValidElement, findDOMNode } from '../_util/props-util';
|
||||
import { isValidElement, findDOMNode } from '../_util/props-util';
|
||||
import initDefaultProps from '../_util/props-util/initDefaultProps';
|
||||
import { cloneElement } from '../_util/vnode';
|
||||
import BaseMixin2 from '../_util/BaseMixin2';
|
||||
import { generateValueMaps } from './util';
|
||||
import { watchEffect, reactive } from 'vue';
|
||||
import { Key } from '../_util/type';
|
||||
|
||||
function stopPropagation(e) {
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: 'FilterMenu',
|
||||
mixins: [BaseMixin2],
|
||||
inheritAttrs: false,
|
||||
|
@ -86,7 +88,7 @@ export default {
|
|||
this.setState({ sSelectedKeys: selectedKeys });
|
||||
},
|
||||
|
||||
setVisible(visible) {
|
||||
setVisible(visible: boolean) {
|
||||
const { column } = this;
|
||||
if (!('filterDropdownVisible' in column)) {
|
||||
this.setState({ sVisible: visible });
|
||||
|
@ -113,7 +115,7 @@ export default {
|
|||
this.$nextTick(this.confirmFilter2);
|
||||
},
|
||||
|
||||
onVisibleChange(visible) {
|
||||
onVisibleChange(visible: boolean) {
|
||||
this.setVisible(visible);
|
||||
const { column } = this.$props;
|
||||
// https://github.com/ant-design/ant-design/issues/17833
|
||||
|
@ -121,7 +123,7 @@ export default {
|
|||
this.confirmFilter2();
|
||||
}
|
||||
},
|
||||
handleMenuItemClick(info) {
|
||||
handleMenuItemClick(info: { keyPath: Key[]; key: Key }) {
|
||||
const { sSelectedKeys: selectedKeys } = this;
|
||||
if (!info.keyPath || info.keyPath.length <= 1) {
|
||||
return;
|
||||
|
@ -297,4 +299,4 @@ export default {
|
|||
</Dropdown>
|
||||
);
|
||||
},
|
||||
};
|
||||
});
|
|
@ -1,7 +1,9 @@
|
|||
import { defineComponent } from 'vue';
|
||||
import T from './Table';
|
||||
import {} from './interface';
|
||||
import { getOptionProps, getKey, getPropsData, getSlot } from '../_util/props-util';
|
||||
|
||||
const Table = {
|
||||
const Table = defineComponent({
|
||||
name: 'ATable',
|
||||
Column: T.Column,
|
||||
ColumnGroup: T.ColumnGroup,
|
||||
|
@ -79,7 +81,7 @@ const Table = {
|
|||
};
|
||||
return <T {...tProps} ref="table" />;
|
||||
},
|
||||
};
|
||||
});
|
||||
/* istanbul ignore next */
|
||||
Table.install = function(app) {
|
||||
app.component(Table.name, Table);
|
|
@ -2,6 +2,8 @@ import PropTypes, { withUndefined } from '../_util/vue-types';
|
|||
import { PaginationProps as getPaginationProps } from '../pagination';
|
||||
import { SpinProps as getSpinProps } from '../spin';
|
||||
import { Store } from './createStore';
|
||||
import { tuple } from '../_util/type';
|
||||
import { ExtractPropTypes } from 'vue';
|
||||
|
||||
const PaginationProps = getPaginationProps();
|
||||
const SpinProps = getSpinProps();
|
||||
|
@ -14,13 +16,13 @@ export const ColumnFilterItem = PropTypes.shape({
|
|||
}).loose;
|
||||
|
||||
export const ColumnProps = {
|
||||
title: PropTypes.any,
|
||||
// key?: React.Key;
|
||||
title: PropTypes.VNodeChild,
|
||||
key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
||||
dataIndex: PropTypes.string,
|
||||
customRender: PropTypes.func,
|
||||
customCell: PropTypes.func,
|
||||
customHeaderCell: PropTypes.func,
|
||||
align: PropTypes.oneOf(['left', 'right', 'center']),
|
||||
align: PropTypes.oneOf(tuple('left', 'right', 'center')),
|
||||
ellipsis: PropTypes.looseBool,
|
||||
filters: PropTypes.arrayOf(ColumnFilterItem),
|
||||
// onFilter: (value: any, record: T) => PropTypes.looseBool,
|
||||
|
@ -29,19 +31,19 @@ export const ColumnProps = {
|
|||
filterDropdownVisible: PropTypes.looseBool,
|
||||
// onFilterDropdownVisibleChange?: (visible: boolean) => void;
|
||||
sorter: PropTypes.oneOfType([PropTypes.looseBool, PropTypes.func]),
|
||||
defaultSortOrder: PropTypes.oneOf(['ascend', 'descend']),
|
||||
defaultSortOrder: PropTypes.oneOf(tuple('ascend', 'descend')),
|
||||
colSpan: PropTypes.number,
|
||||
width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
||||
className: PropTypes.string,
|
||||
fixed: withUndefined(
|
||||
PropTypes.oneOfType([PropTypes.looseBool, PropTypes.oneOf(['left', 'right'])]),
|
||||
PropTypes.oneOfType([PropTypes.looseBool, PropTypes.oneOf(tuple('left', 'right'))]),
|
||||
),
|
||||
filterIcon: PropTypes.any,
|
||||
filteredValue: PropTypes.array,
|
||||
filtered: PropTypes.looseBool,
|
||||
defaultFilteredValue: PropTypes.array,
|
||||
sortOrder: withUndefined(
|
||||
PropTypes.oneOfType([PropTypes.looseBool, PropTypes.oneOf(['ascend', 'descend'])]),
|
||||
PropTypes.oneOfType([PropTypes.looseBool, PropTypes.oneOf(tuple('ascend', 'descend'))]),
|
||||
),
|
||||
sortDirections: PropTypes.array,
|
||||
// children?: ColumnProps<T>[];
|
||||
|
@ -50,19 +52,21 @@ export const ColumnProps = {
|
|||
// onHeaderCell?: (props: ColumnProps<T>) => any;
|
||||
};
|
||||
|
||||
// export interface TableComponents {
|
||||
// table?: any;
|
||||
// header?: {
|
||||
// wrapper?: any;
|
||||
// row?: any;
|
||||
// cell?: any;
|
||||
// };
|
||||
// body?: {
|
||||
// wrapper?: any;
|
||||
// row?: any;
|
||||
// cell?: any;
|
||||
// };
|
||||
// }
|
||||
export type IColumnProps = Partial<ExtractPropTypes<typeof ColumnProps>>;
|
||||
|
||||
export interface TableComponents {
|
||||
table?: any;
|
||||
header?: {
|
||||
wrapper?: any;
|
||||
row?: any;
|
||||
cell?: any;
|
||||
};
|
||||
body?: {
|
||||
wrapper?: any;
|
||||
row?: any;
|
||||
cell?: any;
|
||||
};
|
||||
}
|
||||
|
||||
export const TableLocale = PropTypes.shape({
|
||||
filterTitle: PropTypes.string,
|
||||
|
@ -91,7 +95,9 @@ export const TableRowSelection = {
|
|||
hideDefaultSelections: PropTypes.looseBool,
|
||||
fixed: PropTypes.looseBool,
|
||||
columnWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
||||
selectWay: PropTypes.oneOf(['onSelect', 'onSelectMultiple', 'onSelectAll', 'onSelectInvert']),
|
||||
selectWay: PropTypes.oneOf(
|
||||
tuple('onSelect', 'onSelectMultiple', 'onSelectAll', 'onSelectInvert'),
|
||||
),
|
||||
columnTitle: PropTypes.any,
|
||||
};
|
||||
|
||||
|
@ -102,11 +108,11 @@ export const TableProps = {
|
|||
pagination: PropTypes.oneOfType([
|
||||
PropTypes.shape({
|
||||
...PaginationProps,
|
||||
position: PropTypes.oneOf(['top', 'bottom', 'both']),
|
||||
position: PropTypes.oneOf(tuple('top', 'bottom', 'both')),
|
||||
}).loose,
|
||||
PropTypes.looseBool,
|
||||
]),
|
||||
size: PropTypes.oneOf(['default', 'middle', 'small', 'large']),
|
||||
size: PropTypes.oneOf(tuple('default', 'middle', 'small', 'large')),
|
||||
dataSource: PropTypes.array,
|
||||
components: PropTypes.object,
|
||||
columns: PropTypes.array,
|
||||
|
@ -145,16 +151,21 @@ export const TableProps = {
|
|||
// children?: React.ReactNode;
|
||||
};
|
||||
|
||||
// export interface TableStateFilters {
|
||||
// [key: string]: string[];
|
||||
// }
|
||||
export type ITableRowSelection = Partial<ExtractPropTypes<typeof TableRowSelection>>;
|
||||
|
||||
// export interface TableState<T> {
|
||||
// pagination: PaginationProps;
|
||||
// filters: TableStateFilters;
|
||||
// sortColumn: ColumnProps<T> | null;
|
||||
// sortOrder: PropTypes.string,
|
||||
// }
|
||||
export type ITableProps = Partial<ExtractPropTypes<typeof TableProps>>;
|
||||
|
||||
export interface TableStateFilters {
|
||||
[key: string]: string[];
|
||||
}
|
||||
|
||||
export interface TableState {
|
||||
pagination?: Partial<ExtractPropTypes<typeof PaginationProps>>;
|
||||
filters?: TableStateFilters;
|
||||
sortColumn?: Partial<ExtractPropTypes<typeof ColumnProps>> | null;
|
||||
sortOrder?: string;
|
||||
columns?: IColumnProps[];
|
||||
}
|
||||
|
||||
// export type SelectionItemSelectFn = (key: string[]) => any;
|
||||
|
|
@ -11,6 +11,7 @@ const Menu = {
|
|||
inheritAttrs: false,
|
||||
props: {
|
||||
...commonPropsType,
|
||||
onClick: PropTypes.func,
|
||||
selectable: PropTypes.looseBool.def(true),
|
||||
},
|
||||
mixins: [BaseMixin],
|
||||
|
|
|
@ -37,4 +37,8 @@ export default {
|
|||
itemIcon: PropTypes.any,
|
||||
expandIcon: PropTypes.any,
|
||||
overflowedIndicator: PropTypes.any,
|
||||
onClick: PropTypes.func,
|
||||
onSelect: PropTypes.func,
|
||||
onDeselect: PropTypes.func,
|
||||
children: PropTypes.VNodeChild,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue