DefaultSortOrder.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import React, { useState } from 'react';
  2. import { Table, Button } from '../../index';
  3. import { ColumnProps } from '../interface';
  4. interface Record {
  5. title?: string;
  6. age?: number;
  7. address?: string;
  8. name?: string
  9. }
  10. const columns: ColumnProps<Record>[] = [
  11. {
  12. title: 'Name',
  13. dataIndex: 'name',
  14. sorter: (a: Record, b: Record): number => a.name.length - b.name.length,
  15. defaultSortOrder: 'descend',
  16. },
  17. {
  18. title: 'Age',
  19. dataIndex: 'age',
  20. sorter: (a: Record, b: Record): number => (a.age - b.age > 0 ? 1 : -1),
  21. defaultSortOrder: 'ascend',
  22. },
  23. {
  24. title: 'Address',
  25. dataIndex: 'address',
  26. sorter: (a: Record, b: Record): number => a.address.length - b.address.length,
  27. defaultSortOrder: false,
  28. },
  29. ];
  30. const data1 = [
  31. {
  32. key: '1',
  33. name: 'John Brown',
  34. age: 32,
  35. address: 'New York No. 1 Lake Park',
  36. },
  37. {
  38. key: '2',
  39. name: 'Jim Green',
  40. age: 42,
  41. address: 'London No. 1 Lake Park',
  42. },
  43. {
  44. key: '3',
  45. name: 'Joe Black',
  46. age: 32,
  47. address: 'Sidney No. 1 Lake Park',
  48. },
  49. {
  50. key: '4',
  51. name: 'Jim Red',
  52. age: 32,
  53. address: 'London No. 2 Lake Park',
  54. },
  55. ];
  56. const data2 = [
  57. {
  58. key: '1',
  59. name: 'John Brown',
  60. age: 1,
  61. address: 'New York No. 1 Lake Park',
  62. },
  63. {
  64. key: '2',
  65. name: 'Jim Green',
  66. age: 2,
  67. address: 'London No. 1 Lake Park',
  68. },
  69. {
  70. key: '3',
  71. name: 'Joe Black',
  72. age: 4,
  73. address: 'Sidney No. 1 Lake Park',
  74. },
  75. {
  76. key: '4',
  77. name: 'Jim Red',
  78. age: 3,
  79. address: 'London No. 2 Lake Park',
  80. },
  81. ];
  82. interface OnChangeArgs {
  83. filters?: unknown[];
  84. sorter?: unknown;
  85. extra?: unknown
  86. }
  87. function App(): React.ReactElement {
  88. const [data, setData] = useState(data1);
  89. const [flag, setFlag] = useState(false);
  90. const handleChange = ({ sorter }: OnChangeArgs): void => {
  91. console.log('table sorter changed to', sorter);
  92. };
  93. const handleClick = (): void => {
  94. const newData = flag ? data1 : data2;
  95. setData(newData);
  96. setFlag(!flag);
  97. };
  98. const currentData = flag ? 'data2' : ' data1';
  99. return (
  100. <div>
  101. <div>
  102. <label>defaultSortOrder=ascend</label>
  103. <Table columns={columns} dataSource={data} onChange={handleChange} />
  104. </div>
  105. <Button onClick={handleClick}>update data</Button>
  106. <div>{currentData}</div>
  107. </div>
  108. );
  109. }
  110. export default App;