@autobest-ui/components 1.1.1 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +10 -10
  2. package/esm/accordion/__stories__/style.scss +58 -58
  3. package/esm/affix/__stories__/style.scss +13 -13
  4. package/esm/affix/style/index.scss +34 -34
  5. package/esm/base.scss +42 -42
  6. package/esm/carousel/__stories__/style.scss +41 -41
  7. package/esm/carousel/style/index.scss +37 -37
  8. package/esm/checkbox/style/index.scss +117 -117
  9. package/esm/collapse/__stories__/style.scss +18 -18
  10. package/esm/collapse/style/index.scss +42 -42
  11. package/esm/confirm/style/index.scss +44 -44
  12. package/esm/date-picker/calendar/grid/index.scss +85 -85
  13. package/esm/date-picker/calendar/index.scss +57 -57
  14. package/esm/date-picker/index.d.ts +1 -0
  15. package/esm/date-picker/index.js +17 -7
  16. package/esm/date-picker/style/index.css +1 -1
  17. package/esm/date-picker/style/index.scss +23 -19
  18. package/esm/drawer/style/index.scss +44 -44
  19. package/esm/ellipsis/style/index.scss +35 -35
  20. package/esm/guide/__stories__/style.scss +13 -13
  21. package/esm/guide/style/index.scss +17 -17
  22. package/esm/icon/__stories__/style.scss +39 -39
  23. package/esm/icon/style/index.scss +6 -6
  24. package/esm/index.d.ts +2 -1
  25. package/esm/input-number/style/index.scss +86 -86
  26. package/esm/lazy-image/__stories__/style.scss +9 -9
  27. package/esm/lazy-image/style/index.scss +24 -24
  28. package/esm/link-list/style/index.scss +125 -125
  29. package/esm/loading/style/index.scss +30 -30
  30. package/esm/loading-bar/style/index.scss +62 -62
  31. package/esm/loading-container/__stories__/style.scss +5 -5
  32. package/esm/loading-container/style/index.scss +27 -27
  33. package/esm/loading-icon/style/index.scss +23 -23
  34. package/esm/mask/style/index.scss +34 -34
  35. package/esm/message/style/index.scss +70 -70
  36. package/esm/modal/style/index.scss +112 -112
  37. package/esm/move/__stories__/style.scss +6 -6
  38. package/esm/move/style/index.scss +7 -7
  39. package/esm/popover/__stories__/style.scss +15 -15
  40. package/esm/popover/style/index.scss +59 -59
  41. package/esm/select/__stories__/style.scss +8 -8
  42. package/esm/select/style/index.scss +126 -126
  43. package/esm/show-more/style/index.scss +22 -22
  44. package/esm/skeleton/__stories__/style.scss +2 -2
  45. package/esm/skeleton/style/index.scss +26 -26
  46. package/esm/style.css +14 -14
  47. package/esm/table/__stories__/style.css +1 -1
  48. package/esm/table/__stories__/style.scss +33 -2
  49. package/esm/table/body/BodyRow.d.ts +19 -0
  50. package/esm/table/body/BodyRow.js +98 -0
  51. package/esm/table/body/CheckIcon.d.ts +16 -0
  52. package/esm/table/body/CheckIcon.js +35 -0
  53. package/esm/table/body/index.d.ts +24 -0
  54. package/esm/table/body/index.js +62 -0
  55. package/esm/table/header/CheckIcon.d.ts +13 -0
  56. package/esm/table/header/CheckIcon.js +37 -0
  57. package/esm/table/header/HeaderCell.d.ts +18 -0
  58. package/esm/table/{HeaderCell.js → header/HeaderCell.js} +11 -4
  59. package/esm/table/header/HeaderRow.d.ts +16 -0
  60. package/esm/table/header/HeaderRow.js +76 -0
  61. package/esm/table/index.d.ts +52 -27
  62. package/esm/table/index.js +178 -155
  63. package/esm/table/interface.d.ts +16 -3
  64. package/esm/table/style/index.css +1 -1
  65. package/esm/table/style/index.scss +51 -70
  66. package/esm/tabs/__stories__/style.scss +8 -8
  67. package/esm/tabs/style/index.css +1 -1
  68. package/esm/tabs/style/index.scss +62 -62
  69. package/esm/tooltip/style/index.scss +61 -61
  70. package/esm/trigger/style/index.scss +79 -79
  71. package/lib/accordion/__stories__/style.scss +58 -58
  72. package/lib/affix/__stories__/style.scss +13 -13
  73. package/lib/affix/style/index.scss +34 -34
  74. package/lib/base.scss +42 -42
  75. package/lib/carousel/__stories__/style.scss +41 -41
  76. package/lib/carousel/style/index.scss +37 -37
  77. package/lib/checkbox/style/index.scss +117 -117
  78. package/lib/collapse/__stories__/style.scss +18 -18
  79. package/lib/collapse/style/index.scss +42 -42
  80. package/lib/confirm/style/index.scss +44 -44
  81. package/lib/date-picker/calendar/grid/index.scss +85 -85
  82. package/lib/date-picker/calendar/index.scss +57 -57
  83. package/lib/date-picker/index.d.ts +1 -0
  84. package/lib/date-picker/index.js +17 -7
  85. package/lib/date-picker/style/index.css +1 -1
  86. package/lib/date-picker/style/index.scss +23 -19
  87. package/lib/drawer/style/index.scss +44 -44
  88. package/lib/ellipsis/style/index.scss +35 -35
  89. package/lib/guide/__stories__/style.scss +13 -13
  90. package/lib/guide/style/index.scss +17 -17
  91. package/lib/icon/__stories__/style.scss +39 -39
  92. package/lib/icon/style/index.scss +6 -6
  93. package/lib/index.d.ts +2 -1
  94. package/lib/input-number/style/index.scss +86 -86
  95. package/lib/lazy-image/__stories__/style.scss +9 -9
  96. package/lib/lazy-image/style/index.scss +24 -24
  97. package/lib/link-list/style/index.scss +125 -125
  98. package/lib/loading/style/index.scss +30 -30
  99. package/lib/loading-bar/style/index.scss +62 -62
  100. package/lib/loading-container/__stories__/style.scss +5 -5
  101. package/lib/loading-container/style/index.scss +27 -27
  102. package/lib/loading-icon/style/index.scss +23 -23
  103. package/lib/mask/style/index.scss +34 -34
  104. package/lib/message/style/index.scss +70 -70
  105. package/lib/modal/style/index.scss +112 -112
  106. package/lib/move/__stories__/style.scss +6 -6
  107. package/lib/move/style/index.scss +7 -7
  108. package/lib/popover/__stories__/style.scss +15 -15
  109. package/lib/popover/style/index.scss +59 -59
  110. package/lib/select/__stories__/style.scss +8 -8
  111. package/lib/select/style/index.scss +126 -126
  112. package/lib/show-more/style/index.scss +22 -22
  113. package/lib/skeleton/__stories__/style.scss +2 -2
  114. package/lib/skeleton/style/index.scss +26 -26
  115. package/lib/style.css +14 -14
  116. package/lib/table/__stories__/style.css +1 -1
  117. package/lib/table/__stories__/style.scss +33 -2
  118. package/lib/table/body/BodyRow.d.ts +19 -0
  119. package/lib/table/body/BodyRow.js +112 -0
  120. package/lib/table/body/CheckIcon.d.ts +16 -0
  121. package/lib/table/body/CheckIcon.js +47 -0
  122. package/lib/table/body/index.d.ts +24 -0
  123. package/lib/table/body/index.js +74 -0
  124. package/lib/table/header/CheckIcon.d.ts +13 -0
  125. package/lib/table/header/CheckIcon.js +49 -0
  126. package/lib/table/header/HeaderCell.d.ts +18 -0
  127. package/lib/table/{HeaderCell.js → header/HeaderCell.js} +11 -4
  128. package/lib/table/header/HeaderRow.d.ts +16 -0
  129. package/lib/table/header/HeaderRow.js +89 -0
  130. package/lib/table/index.d.ts +52 -27
  131. package/lib/table/index.js +177 -155
  132. package/lib/table/interface.d.ts +16 -3
  133. package/lib/table/style/index.css +1 -1
  134. package/lib/table/style/index.scss +51 -70
  135. package/lib/tabs/__stories__/style.scss +8 -8
  136. package/lib/tabs/style/index.css +1 -1
  137. package/lib/tabs/style/index.scss +62 -62
  138. package/lib/tooltip/style/index.scss +61 -61
  139. package/lib/trigger/style/index.scss +79 -79
  140. package/package.json +2 -2
  141. package/esm/table/BodyCell.d.ts +0 -6
  142. package/esm/table/BodyCell.js +0 -12
  143. package/esm/table/HeaderCell.d.ts +0 -13
  144. package/lib/table/BodyCell.d.ts +0 -6
  145. package/lib/table/BodyCell.js +0 -22
  146. package/lib/table/HeaderCell.d.ts +0 -13
@@ -1,23 +1,31 @@
1
- import React from 'react';
1
+ import React, { ReactText } from 'react';
2
2
  import { AddListenerEventHandler } from '@autobest-ui/utils';
3
3
  import { Column } from './interface';
4
- export interface TableProps {
5
- /**
6
- * 定义每一列数据的格式
7
- */
8
- columns: Column[];
4
+ import { HeaderRowProps } from './header/HeaderRow';
5
+ import { BodyProps } from './body';
6
+ import { HeaderRowSelectionInfo } from './header/CheckIcon';
7
+ import { BodyRowSelectionInfo } from './body/CheckIcon';
8
+ export interface RowSelectionInfo<T> extends Partial<Pick<HeaderRowSelectionInfo, 'selectAllVisible' | 'onSelectAll'>>, Partial<Pick<BodyRowSelectionInfo<T>, 'checkIcon'>> {
9
+ defaultSelectedRowKeys?: ReactText[];
10
+ getDisabled?: (dataRow: any, selectedRowKeys: ReactText[], selectedRows: T[]) => boolean;
11
+ onSelect?: (checked: boolean, rowData: T, selectedRows: T[]) => void;
12
+ onSelectedRowChange?: (selectedRowKeys: ReactText[], selectedRows: T[]) => void;
13
+ }
14
+ declare type StateRowSelectionInfo<T> = Pick<HeaderRowSelectionInfo, 'selectAllVisible' | 'selectAllChecked' | 'onSelectAll'> & Pick<BodyRowSelectionInfo<T>, 'checkIcon' | 'getDisabled' | 'onSelect'>;
15
+ export interface TableProps<T> extends Pick<HeaderRowProps<T>, 'sortName' | 'sortIcon' | 'onSortChange' | 'isSortedDescending'>, Pick<BodyProps<T>, 'dataSource' | 'expandable'> {
9
16
  /**
10
- * 表格里的数据
17
+ * 样式名
11
18
  */
12
- dataSource: any[];
19
+ className?: string;
13
20
  /**
14
- * 主键,唯一标识某一条记录,需要checkbox时必传
21
+ * 定义每一列数据的格式
22
+ * 具体类型见Column
15
23
  */
16
- primaryKey: string;
24
+ columns: Column<T>[];
17
25
  /**
18
- * 样式名
26
+ * 获取单条记录的唯一主键; 若是string类型,则取当前行数据中对应名称的属性值; 若是函数,则传入当前行数据,获取rowKey值;这也是勾选功能匹配时所用的key值
19
27
  */
20
- className?: string;
28
+ rowKey?: string | ((rowData: T) => ReactText);
21
29
  /**
22
30
  * 是否固定表头
23
31
  */
@@ -26,7 +34,14 @@ export interface TableProps {
26
34
  * 最大高度,fixedHeader为true时生效
27
35
  */
28
36
  maxHeight?: string;
37
+ /**
38
+ * 为true时,Table会显示loading样式
39
+ */
29
40
  loading?: boolean;
41
+ /**
42
+ * 表格行是否可勾选,详见RowSelection
43
+ */
44
+ rowSelection?: RowSelectionInfo<T>;
30
45
  /**
31
46
  * 默认勾选项数组, 以primaryKey取值
32
47
  */
@@ -48,43 +63,53 @@ export interface TableProps {
48
63
  */
49
64
  isSortedDescending?: boolean;
50
65
  }
51
- interface TableState {
52
- isSelectedAll: boolean;
53
- selectedRowKeys: any[];
66
+ interface TableState<T> {
67
+ selectedRowKeys: ReactText[];
68
+ selectedRows: T[];
69
+ rowSelection: StateRowSelectionInfo<T>;
54
70
  }
55
- declare class Table extends React.Component<TableProps, TableState> {
71
+ declare class Table<RowDataType> extends React.Component<TableProps<RowDataType>, TableState<RowDataType>> {
56
72
  prefixCls: string;
57
73
  headerRef: React.RefObject<HTMLDivElement>;
58
74
  bodyRef: React.RefObject<HTMLDivElement>;
59
75
  scrollHandler: AddListenerEventHandler;
76
+ getRowKey: (rowData: RowDataType) => ReactText;
60
77
  static defaultProps: {
61
78
  fixedHeader: boolean;
62
79
  loading: boolean;
80
+ rowKey: string;
63
81
  };
64
- constructor(props: TableProps);
82
+ readonly defaultRowSelection: Pick<StateRowSelectionInfo<RowDataType>, 'selectAllVisible' | 'selectAllChecked' | 'getDisabled'>;
83
+ constructor(props: TableProps<RowDataType>);
65
84
  /**
66
85
  * 清空选项
67
86
  */
68
87
  clearSelection: () => void;
69
88
  componentDidMount(): void;
70
- componentDidUpdate(): void;
71
89
  componentWillUnmount(): void;
72
90
  addScrollListener: () => void;
91
+ getSelectedRows: (selectedKeys: any) => any;
73
92
  /**
74
93
  * 点击表头的checkbox,全选或全不选
75
94
  */
76
- onSelectAll: () => void;
95
+ onSelectAll: (checked: any) => void;
77
96
  /**
78
97
  * 点击某一行的checkbook
79
98
  * @param visible
80
- * @param name
81
- */
82
- onChange: (visible: boolean, name: string | number) => void;
83
- /**
84
- * 点击某一列的表头,触发排序
85
- * @param sortName
86
- */
87
- onSort: (sortName: string) => void;
99
+ * @param rowData
100
+ */
101
+ onSelect: (visible: boolean, rowData: RowDataType) => void;
102
+ getDisabled: (rowData: any) => boolean;
103
+ getRowSelection: () => {
104
+ onSelect: (visible: boolean, rowData: RowDataType) => void;
105
+ onSelectAll: (checked: any) => void;
106
+ getDisabled: (rowData: any) => boolean;
107
+ defaultSelectedRowKeys?: (string | number)[];
108
+ onSelectedRowChange?: (selectedRowKeys: (string | number)[], selectedRows: RowDataType[]) => void;
109
+ selectAllVisible?: boolean;
110
+ checkIcon?: (checked: boolean, rowData: RowDataType, index: number) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)>) | (new (props: any) => React.Component<any, any, any>)>;
111
+ selectAllChecked: boolean;
112
+ };
88
113
  /**
89
114
  * 用colgroup设置每一列的宽度
90
115
  */
@@ -15,11 +15,9 @@ var _utils = require("@autobest-ui/utils");
15
15
 
16
16
  var _loadingContainer = _interopRequireDefault(require("../loading-container"));
17
17
 
18
- var _checkbox = _interopRequireDefault(require("../checkbox"));
18
+ var _HeaderRow = _interopRequireDefault(require("./header/HeaderRow"));
19
19
 
20
- var _HeaderCell = _interopRequireDefault(require("./HeaderCell"));
21
-
22
- var _BodyCell = _interopRequireDefault(require("./BodyCell"));
20
+ var _body = _interopRequireDefault(require("./body"));
23
21
 
24
22
  var __extends = void 0 && (void 0).__extends || function () {
25
23
  var _extendStatics = function extendStatics(d, b) {
@@ -63,20 +61,6 @@ var __assign = void 0 && (void 0).__assign || function () {
63
61
  return __assign.apply(this, arguments);
64
62
  };
65
63
 
66
- var __spreadArrays = void 0 && (void 0).__spreadArrays || function () {
67
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) {
68
- s += arguments[i].length;
69
- }
70
-
71
- for (var r = Array(s), k = 0, i = 0; i < il; i++) {
72
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {
73
- r[k] = a[j];
74
- }
75
- }
76
-
77
- return r;
78
- };
79
-
80
64
  var Table =
81
65
  /** @class */
82
66
  function (_super) {
@@ -88,14 +72,26 @@ function (_super) {
88
72
  _this.prefixCls = 'ab-table';
89
73
  _this.headerRef = _react.default.createRef();
90
74
  _this.bodyRef = _react.default.createRef();
75
+ _this.defaultRowSelection = {
76
+ selectAllVisible: true,
77
+ selectAllChecked: false,
78
+ getDisabled: function getDisabled() {
79
+ return false;
80
+ }
81
+ };
91
82
  /**
92
83
  * 清空选项
93
84
  */
94
85
 
95
86
  _this.clearSelection = function () {
96
- _this.setState({
97
- selectedRowKeys: [],
98
- isSelectedAll: false
87
+ _this.setState(function (prevState) {
88
+ return {
89
+ selectedRowKeys: [],
90
+ selectedRows: [],
91
+ rowSelection: __assign(__assign({}, prevState.rowSelection), {
92
+ selectAllChecked: false
93
+ })
94
+ };
99
95
  });
100
96
  };
101
97
 
@@ -110,102 +106,167 @@ function (_super) {
110
106
  }));
111
107
  }
112
108
  };
109
+
110
+ _this.getSelectedRows = function (selectedKeys) {
111
+ if ((0, _utils.isEmptyArray)(selectedKeys)) {
112
+ return [];
113
+ }
114
+
115
+ var getRowKey = _this.getRowKey;
116
+ var dataSource = _this.props.dataSource;
117
+ return selectedKeys.map(function (key) {
118
+ return dataSource.find(function (item) {
119
+ return getRowKey(item) === key;
120
+ });
121
+ });
122
+ };
113
123
  /**
114
124
  * 点击表头的checkbox,全选或全不选
115
125
  */
116
126
 
117
127
 
118
- _this.onSelectAll = function () {
128
+ _this.onSelectAll = function (checked) {
129
+ var getRowKey = _this.getRowKey;
119
130
  var _a = _this.props,
120
131
  dataSource = _a.dataSource,
121
- primaryKey = _a.primaryKey,
122
- onSelectedRowChange = _a.onSelectedRowChange;
123
- var selectedRowKeys = _this.state.selectedRowKeys;
132
+ rowSelection = _a.rowSelection;
124
133
 
125
- if (selectedRowKeys.length === dataSource.length) {
126
- _this.setState({
127
- isSelectedAll: false,
128
- selectedRowKeys: []
134
+ if (checked) {
135
+ var newSelectedRowKeys_1 = dataSource.map(getRowKey);
136
+
137
+ if (rowSelection.onSelectAll) {
138
+ rowSelection.onSelectAll(true);
139
+ }
140
+
141
+ _this.setState(function (prevState) {
142
+ return {
143
+ rowSelection: __assign(__assign({}, prevState.rowSelection), {
144
+ selectAllChecked: true
145
+ }),
146
+ selectedRowKeys: newSelectedRowKeys_1
147
+ };
129
148
  });
130
149
 
131
- onSelectedRowChange([], []);
150
+ if (rowSelection.onSelectedRowChange) {
151
+ rowSelection.onSelectedRowChange(newSelectedRowKeys_1, dataSource);
152
+ }
153
+
132
154
  return;
133
155
  }
134
156
 
135
- var newSelectedRowKeys = dataSource.map(function (item) {
136
- return item[primaryKey];
137
- });
157
+ if (rowSelection.onSelectAll) {
158
+ rowSelection.onSelectAll(false);
159
+ }
138
160
 
139
- _this.setState({
140
- isSelectedAll: true,
141
- selectedRowKeys: newSelectedRowKeys
161
+ _this.setState(function (prevState) {
162
+ return {
163
+ rowSelection: __assign(__assign({}, prevState.rowSelection), {
164
+ selectAllChecked: false
165
+ }),
166
+ selectedRowKeys: []
167
+ };
142
168
  });
143
169
 
144
- onSelectedRowChange(newSelectedRowKeys, dataSource);
170
+ if (rowSelection.onSelectedRowChange) {
171
+ rowSelection.onSelectedRowChange([], []);
172
+ }
145
173
  };
146
174
  /**
147
175
  * 点击某一行的checkbook
148
176
  * @param visible
149
- * @param name
177
+ * @param rowData
150
178
  */
151
179
 
152
180
 
153
- _this.onChange = function (visible, name) {
181
+ _this.onSelect = function (visible, rowData) {
182
+ var getRowKey = _this.getRowKey;
154
183
  var _a = _this.props,
155
184
  dataSource = _a.dataSource,
156
- primaryKey = _a.primaryKey,
157
- onSelectedRowChange = _a.onSelectedRowChange;
158
- var selectedRowKeys = _this.state.selectedRowKeys;
159
- var legalResults = selectedRowKeys.filter(function (item) {
160
- return !!dataSource.find(function (j) {
161
- return j[primaryKey] === item;
162
- });
163
- });
185
+ rowSelection = _a.rowSelection;
186
+ var _b = _this.state,
187
+ selectedRowKeys = _b.selectedRowKeys,
188
+ selectedRows = _b.selectedRows;
189
+ var newRowKey = getRowKey(rowData);
164
190
  var newSelectedRowKeys = [];
191
+ var newSelectedRows = [];
165
192
 
166
193
  if (visible) {
167
- newSelectedRowKeys = __spreadArrays(legalResults, [name]);
168
-
169
- if (newSelectedRowKeys.length === dataSource.length) {
170
- _this.setState({
171
- isSelectedAll: true
172
- });
194
+ if (!selectedRowKeys.includes(newRowKey)) {
195
+ newSelectedRowKeys = selectedRowKeys.concat(newRowKey);
196
+ newSelectedRows = selectedRows.concat(rowData);
173
197
  }
174
- } else {
175
- newSelectedRowKeys = legalResults.filter(function (item) {
176
- return item !== name;
198
+ } else if (selectedRowKeys.includes(newRowKey)) {
199
+ var result = selectedRowKeys.reduce(function (previousValue, currentValue) {
200
+ if (currentValue === newRowKey) {
201
+ return previousValue;
202
+ }
203
+
204
+ var data = dataSource.find(function (data) {
205
+ return getRowKey(data) === currentValue;
206
+ });
207
+
208
+ if (data) {
209
+ previousValue.selectedRowKeys.push(currentValue);
210
+ previousValue.selectedRows.push(data);
211
+ }
212
+
213
+ return previousValue;
214
+ }, {
215
+ selectedRowKeys: [],
216
+ selectedRows: []
177
217
  });
218
+ newSelectedRows = result.selectedRows;
219
+ newSelectedRowKeys = result.selectedRowKeys;
220
+ }
178
221
 
179
- if (legalResults.length === dataSource.length) {
180
- _this.setState({
181
- isSelectedAll: false
182
- });
183
- }
222
+ if (rowSelection.onSelect) {
223
+ rowSelection.onSelect(visible, rowData, selectedRows);
224
+ }
225
+
226
+ if (!visible && _this.state.rowSelection.selectAllChecked) {
227
+ _this.setState(function (prevState) {
228
+ return {
229
+ rowSelection: __assign(__assign({}, prevState.rowSelection), {
230
+ selectAllChecked: false
231
+ })
232
+ };
233
+ });
184
234
  }
185
235
 
186
236
  _this.setState({
187
- selectedRowKeys: newSelectedRowKeys
237
+ selectedRowKeys: newSelectedRowKeys,
238
+ selectedRows: newSelectedRows
188
239
  });
189
240
 
190
- onSelectedRowChange(newSelectedRowKeys, dataSource.filter(function (item) {
191
- return newSelectedRowKeys.includes(item[primaryKey]);
192
- }));
241
+ if (rowSelection.onSelectedRowChange) {
242
+ rowSelection.onSelectedRowChange(newSelectedRowKeys, newSelectedRows);
243
+ }
193
244
  };
194
- /**
195
- * 点击某一列的表头,触发排序
196
- * @param sortName
197
- */
198
245
 
246
+ _this.getDisabled = function (rowData) {
247
+ var rowSelection = _this.props.rowSelection;
199
248
 
200
- _this.onSort = function (sortName) {
201
- var onHeaderClick = _this.props.onHeaderClick;
249
+ if ('getDisabled' in rowSelection) {
250
+ var _a = _this.state,
251
+ selectedRowKeys = _a.selectedRowKeys,
252
+ selectedRows = _a.selectedRows;
253
+ return rowSelection.getDisabled(rowData, selectedRowKeys, selectedRows);
254
+ }
202
255
 
203
- if (!onHeaderClick) {
204
- return;
256
+ return false;
257
+ };
258
+
259
+ _this.getRowSelection = function () {
260
+ if (!('rowSelection' in _this.props)) {
261
+ return null;
205
262
  }
206
263
 
207
- var isSortedDescending = _this.props.sortName === sortName ? !_this.props.isSortedDescending : true;
208
- onHeaderClick(isSortedDescending, sortName);
264
+ var propsRowSelection = _this.props.rowSelection;
265
+ return __assign(__assign(__assign({}, _this.defaultRowSelection), propsRowSelection), {
266
+ onSelect: _this.onSelect,
267
+ onSelectAll: _this.onSelectAll,
268
+ getDisabled: _this.getDisabled
269
+ });
209
270
  };
210
271
  /**
211
272
  * 用colgroup设置每一列的宽度
@@ -215,15 +276,15 @@ function (_super) {
215
276
  _this.renderColgroup = function () {
216
277
  var _a = _this.props,
217
278
  columns = _a.columns,
218
- onSelectedRowChange = _a.onSelectedRowChange;
219
- return _react.default.createElement("colgroup", null, onSelectedRowChange ? _react.default.createElement("col", {
279
+ rowSelection = _a.rowSelection;
280
+ return _react.default.createElement("colgroup", null, rowSelection ? _react.default.createElement("col", {
220
281
  width: 32
221
282
  }) : null, columns.map(function (item) {
222
283
  var width = item.width;
223
284
 
224
285
  if (width) {
225
286
  return _react.default.createElement("col", {
226
- key: item.fieldName,
287
+ key: item.key,
227
288
  style: {
228
289
  width: width,
229
290
  minWidth: width
@@ -232,7 +293,7 @@ function (_super) {
232
293
  }
233
294
 
234
295
  return _react.default.createElement("col", {
235
- key: item.fieldName
296
+ key: item.key
236
297
  });
237
298
  }));
238
299
  };
@@ -241,72 +302,53 @@ function (_super) {
241
302
  var cls = _this.prefixCls;
242
303
  var _a = _this.props,
243
304
  columns = _a.columns,
244
- onSelectedRowChange = _a.onSelectedRowChange,
245
305
  sortName = _a.sortName,
246
- isSortedDescending = _a.isSortedDescending;
247
- var isSelectedAll = _this.state.isSelectedAll;
248
- return _react.default.createElement("thead", null, _react.default.createElement("tr", null, onSelectedRowChange ? _react.default.createElement("th", {
249
- className: cls + "-checkbox"
250
- }, _react.default.createElement(_checkbox.default, {
251
- checked: isSelectedAll,
252
- onChange: _this.onSelectAll
253
- })) : null, columns.map(function (item) {
254
- return _react.default.createElement(_HeaderCell.default, __assign({
255
- key: item.fieldName
256
- }, item, {
257
- prefixCls: cls,
258
- isSort: sortName && sortName === item.sortName,
259
- isSortedDescending: isSortedDescending,
260
- onSort: _this.onSort
261
- }));
262
- })));
306
+ isSortedDescending = _a.isSortedDescending,
307
+ sortIcon = _a.sortIcon,
308
+ onSortChange = _a.onSortChange;
309
+ var rowSelection = _this.state.rowSelection;
310
+ return _react.default.createElement("thead", null, _react.default.createElement(_HeaderRow.default, {
311
+ prefixCls: cls,
312
+ columns: columns,
313
+ sortName: sortName,
314
+ isSortedDescending: isSortedDescending,
315
+ sortIcon: sortIcon,
316
+ onSortChange: onSortChange,
317
+ rowSelection: rowSelection
318
+ }));
263
319
  };
264
320
 
265
321
  _this.renderBody = function () {
266
322
  var cls = _this.prefixCls;
323
+ var getRowKey = _this.getRowKey;
267
324
  var _a = _this.props,
268
325
  columns = _a.columns,
269
326
  dataSource = _a.dataSource,
270
- primaryKey = _a.primaryKey,
271
- onSelectedRowChange = _a.onSelectedRowChange;
272
- var selectedRowKeys = _this.state.selectedRowKeys;
273
- return _react.default.createElement("tbody", null, dataSource.map(function (item) {
274
- var rowKey = item[primaryKey];
275
- var checked = selectedRowKeys.includes(rowKey);
276
- return _react.default.createElement("tr", {
277
- key: rowKey
278
- }, onSelectedRowChange ? _react.default.createElement("td", {
279
- className: cls + "-checkbox"
280
- }, _react.default.createElement(_checkbox.default, {
281
- checked: checked,
282
- onChange: _this.onChange,
283
- name: rowKey
284
- })) : null, columns.map(function (subItem, subIndex) {
285
- return _react.default.createElement(_BodyCell.default, __assign({
286
- key: subItem.fieldName,
287
- index: subIndex,
288
- rowData: item
289
- }, subItem));
290
- }));
327
+ expandable = _a.expandable;
328
+ var _b = _this.state,
329
+ rowSelection = _b.rowSelection,
330
+ selectedRowKeys = _b.selectedRowKeys;
331
+ return _react.default.createElement("tbody", null, _react.default.createElement(_body.default, {
332
+ prefixCls: cls,
333
+ getRowKey: getRowKey,
334
+ columns: columns,
335
+ dataSource: dataSource,
336
+ expandable: expandable,
337
+ rowSelection: rowSelection,
338
+ selectedRowKeys: selectedRowKeys
291
339
  }));
292
340
  };
293
341
 
294
- var defaultSelectedRowKeys = props.defaultSelectedRowKeys,
295
- dataSource = props.dataSource,
296
- primaryKey = props.primaryKey;
297
- var selectedRowKeys = [];
298
-
299
- if (!(0, _utils.isEmptyArray)(defaultSelectedRowKeys) && !(0, _utils.isEmptyArray)(dataSource)) {
300
- selectedRowKeys = defaultSelectedRowKeys.filter(function (item) {
301
- return !!dataSource.find(function (j) {
302
- return j[primaryKey] === item;
303
- });
304
- });
305
- }
306
-
342
+ var rowSelection = props.rowSelection,
343
+ rowKey = props.rowKey;
344
+ _this.getRowKey = typeof rowKey === 'string' ? function (data) {
345
+ return data[rowKey];
346
+ } : rowKey;
347
+ var defaultSelectedRowKeys = rowSelection && rowSelection.defaultSelectedRowKeys ? rowSelection.defaultSelectedRowKeys : [];
307
348
  _this.state = {
308
- isSelectedAll: false,
309
- selectedRowKeys: selectedRowKeys
349
+ selectedRowKeys: defaultSelectedRowKeys,
350
+ selectedRows: _this.getSelectedRows(defaultSelectedRowKeys),
351
+ rowSelection: _this.getRowSelection()
310
352
  };
311
353
  return _this;
312
354
  }
@@ -315,27 +357,6 @@ function (_super) {
315
357
  this.addScrollListener();
316
358
  };
317
359
 
318
- Table.prototype.componentDidUpdate = function () {
319
- var _a = this.props,
320
- dataSource = _a.dataSource,
321
- onSelectedRowChange = _a.onSelectedRowChange;
322
- var _b = this.state,
323
- isSelectedAll = _b.isSelectedAll,
324
- selectedRowKeys = _b.selectedRowKeys;
325
-
326
- if (onSelectedRowChange && !(0, _utils.isEmptyArray)(dataSource)) {
327
- if ((0, _utils.isEmptyArray)(selectedRowKeys) && isSelectedAll) {
328
- this.setState({
329
- isSelectedAll: false
330
- });
331
- } else if (selectedRowKeys.length === dataSource.length && !isSelectedAll) {
332
- this.setState({
333
- isSelectedAll: true
334
- });
335
- }
336
- }
337
- };
338
-
339
360
  Table.prototype.componentWillUnmount = function () {
340
361
  if (this.scrollHandler) {
341
362
  this.scrollHandler.remove();
@@ -375,7 +396,8 @@ function (_super) {
375
396
 
376
397
  Table.defaultProps = {
377
398
  fixedHeader: false,
378
- loading: false
399
+ loading: false,
400
+ rowKey: 'key'
379
401
  };
380
402
  return Table;
381
403
  }(_react.default.Component);
@@ -1,9 +1,22 @@
1
1
  import React from 'react';
2
- export interface Column {
2
+ export interface ColumnOnRenderReturnObjectInfo {
3
+ children: React.ReactNode | React.ReactNode[];
4
+ props: {
5
+ className?: string;
6
+ rowSpan?: number;
7
+ colSpan?: number;
8
+ };
9
+ }
10
+ export interface Column<T> {
3
11
  title: React.ReactNode | React.ReactNode[];
4
- fieldName: string;
12
+ key: string;
13
+ dataIndex?: string;
14
+ /**
15
+ * 当前触发排序的Column的sortName
16
+ */
5
17
  sortName?: string;
6
18
  width?: string | number;
7
19
  className?: string;
8
- onRender?: (rowData: any, index: number) => React.ReactNode | React.ReactNode[];
20
+ colSpan?: number;
21
+ onRender?: (rowData: T, rowIndex: number, colIndex: number) => React.ReactNode | React.ReactNode[] | ColumnOnRenderReturnObjectInfo;
9
22
  }
@@ -1 +1 @@
1
- .ab-table{overflow-x:auto}.ab-table table{border-spacing:0;width:100%;table-layout:fixed}.ab-table thead{background-color:#2b5797;color:#fff}.ab-table tbody tr:nth-child(2n){background-color:#f7f6f3}.ab-table-header{background-color:#2b5797;color:#fff;overflow:hidden}.ab-table-header table{width:calc(100% - .17rem)}.ab-table-body{overflow:auto scroll}.ab-table tr td,.ab-table tr th{padding:.16rem}.ab-table tr td.ab-table-checkbox,.ab-table tr th.ab-table-checkbox{width:.32rem;text-align:center;padding-left:.08rem;padding-right:.08rem}.ab-table-title{display:flex;align-items:center;text-align:left}.ab-table-title.ab-table-point{cursor:pointer}.ab-table-arrow{padding:0 .05rem}@media only screen and (max-width:767px){.ab-table-header table{width:100%}}
1
+ .ab-table{overflow-x:auto}.ab-table table{border-spacing:0;width:100%;table-layout:fixed}.ab-table-header{overflow:hidden}.ab-table-header table{width:calc(100% - .17rem)}.ab-table-body{overflow:auto scroll}.ab-table-checkbox{width:.32rem;text-align:center}.ab-table-title{display:flex;align-items:center;text-align:left}.ab-table-title.ab-table-point{cursor:pointer}.ab-table-arrow{padding:0 .05rem}@media only screen and (max-width:767px){.ab-table-header table{width:100%}}