mirror of
https://github.com/ant-design/ant-design.git
synced 2025-08-06 07:56:28 +08:00
Add support for table default sort order (#6449)
This commit is contained in:
parent
8016cccd18
commit
40e94945d9
@ -58,6 +58,11 @@ export interface TableRowSelection<T> {
|
|||||||
selections?: SelectionDecorator[] | boolean;
|
selections?: SelectionDecorator[] | boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DefaultColumnSortOrder {
|
||||||
|
columnTitle: string;
|
||||||
|
sortOrder: 'ascend' | 'descend';
|
||||||
|
}
|
||||||
|
|
||||||
export interface TableProps<T> {
|
export interface TableProps<T> {
|
||||||
prefixCls?: string;
|
prefixCls?: string;
|
||||||
dropdownPrefixCls?: string;
|
dropdownPrefixCls?: string;
|
||||||
@ -70,6 +75,7 @@ export interface TableProps<T> {
|
|||||||
rowClassName?: (record: T, index: number) => string;
|
rowClassName?: (record: T, index: number) => string;
|
||||||
expandedRowRender?: any;
|
expandedRowRender?: any;
|
||||||
defaultExpandedRowKeys?: string[] | number[];
|
defaultExpandedRowKeys?: string[] | number[];
|
||||||
|
defaultSortOrder?: DefaultColumnSortOrder;
|
||||||
expandedRowKeys?: string[] | number[];
|
expandedRowKeys?: string[] | number[];
|
||||||
expandIconAsCell?: boolean;
|
expandIconAsCell?: boolean;
|
||||||
expandIconColumnIndex?: number;
|
expandIconColumnIndex?: number;
|
||||||
@ -156,7 +162,7 @@ export default class Table<T> extends React.Component<TableProps<T>, any> {
|
|||||||
this.columns = props.columns || normalizeColumns(props.children);
|
this.columns = props.columns || normalizeColumns(props.children);
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
...this.getSortStateFromColumns(),
|
...this.getDefaultSortOrder(this.columns),
|
||||||
// 减少状态
|
// 减少状态
|
||||||
filters: this.getFiltersFromColumns(),
|
filters: this.getFiltersFromColumns(),
|
||||||
pagination: this.getDefaultPagination(props),
|
pagination: this.getDefaultPagination(props),
|
||||||
@ -332,16 +338,32 @@ export default class Table<T> extends React.Component<TableProps<T>, any> {
|
|||||||
return filters;
|
return filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getDefaultSortOrder(columns?) {
|
||||||
|
const definedSortState = this.getSortStateFromColumns(columns);
|
||||||
|
|
||||||
|
if (this.props.defaultSortOrder && !definedSortState.sortColumn) {
|
||||||
|
let columnTitle = this.props.defaultSortOrder.columnTitle;
|
||||||
|
return {
|
||||||
|
sortColumn: flatFilter(columns || this.columns || [], column => column.title === columnTitle)[0],
|
||||||
|
sortOrder: this.props.defaultSortOrder.sortOrder
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return definedSortState;
|
||||||
|
}
|
||||||
|
|
||||||
getSortStateFromColumns(columns?) {
|
getSortStateFromColumns(columns?) {
|
||||||
// return fisrt column which sortOrder is not falsy
|
// return first column which sortOrder is not falsy
|
||||||
const sortedColumn =
|
const sortedColumn =
|
||||||
this.getSortOrderColumns(columns).filter(col => col.sortOrder)[0];
|
this.getSortOrderColumns(columns).filter(col => col.sortOrder)[0];
|
||||||
|
|
||||||
if (sortedColumn) {
|
if (sortedColumn) {
|
||||||
return {
|
return {
|
||||||
sortColumn: sortedColumn,
|
sortColumn: sortedColumn,
|
||||||
sortOrder: sortedColumn.sortOrder,
|
sortOrder: sortedColumn.sortOrder,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sortColumn: null,
|
sortColumn: null,
|
||||||
sortOrder: null,
|
sortOrder: null,
|
||||||
|
@ -38,6 +38,28 @@ describe('Table.sorter', () => {
|
|||||||
expect(wrapper.find('thead')).toMatchSnapshot();
|
expect(wrapper.find('thead')).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('default sort order ascend', () => {
|
||||||
|
const wrapper = mount(createTable({
|
||||||
|
defaultSortOrder: {
|
||||||
|
columnTitle: 'Name',
|
||||||
|
sortOrder: 'ascend',
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
expect(renderedNames(wrapper)).toEqual(['Jack', 'Jerry', 'Lucy', 'Tom']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('default sort order descend', () => {
|
||||||
|
const wrapper = mount(createTable({
|
||||||
|
defaultSortOrder: {
|
||||||
|
columnTitle: 'Name',
|
||||||
|
sortOrder: 'descend',
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
expect(renderedNames(wrapper)).toEqual(['Tom', 'Lucy', 'Jack', 'Jerry']);
|
||||||
|
});
|
||||||
|
|
||||||
it('sort records', () => {
|
it('sort records', () => {
|
||||||
const wrapper = mount(createTable());
|
const wrapper = mount(createTable());
|
||||||
|
|
||||||
|
@ -89,5 +89,10 @@ function onChange(pagination, filters, sorter) {
|
|||||||
console.log('params', pagination, filters, sorter);
|
console.log('params', pagination, filters, sorter);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReactDOM.render(<Table columns={columns} dataSource={data} onChange={onChange} />, mountNode);
|
ReactDOM.render(<Table
|
||||||
|
columns={columns}
|
||||||
|
dataSource={data}
|
||||||
|
onChange={onChange}
|
||||||
|
defaultSortOrder={{ columnTitle: 'Age', sortOrder: 'descend' }}
|
||||||
|
/>, mountNode);
|
||||||
````
|
````
|
||||||
|
@ -60,7 +60,8 @@ const columns = [{
|
|||||||
| rowKey | get row's key, could be a string or function | string\|Function(record):string | 'key' |
|
| rowKey | get row's key, could be a string or function | string\|Function(record):string | 'key' |
|
||||||
| rowClassName | get row's className | Function(record, index):string | - |
|
| rowClassName | get row's className | Function(record, index):string | - |
|
||||||
| expandedRowRender | expanded container render for each row | Function | - |
|
| expandedRowRender | expanded container render for each row | Function | - |
|
||||||
| defaultExpandedRowKeys | initial expanded row keys | string[] | - |
|
| defaultSortOrder | default column sorting | Object({columnTitle, sortOrder}) | - |
|
||||||
|
| defaultExpandedRowKeys | initial expanded row keys | | - |
|
||||||
| expandedRowKeys | current expanded rows keys | string[] | - |
|
| expandedRowKeys | current expanded rows keys | string[] | - |
|
||||||
| defaultExpandAllRows | expand all rows initially | boolean | false |
|
| defaultExpandAllRows | expand all rows initially | boolean | false |
|
||||||
| onExpandedRowsChange | function to call when the expanded rows change | Function(expandedRows) | |
|
| onExpandedRowsChange | function to call when the expanded rows change | Function(expandedRows) | |
|
||||||
|
Loading…
Reference in New Issue
Block a user