amis 1.9.1-beta.12 → 1.9.1-beta.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. package/README.md +1 -1
  2. package/lib/components/Select.js +2 -2
  3. package/lib/components/Select.js.map +2 -2
  4. package/lib/components/formula/Editor.d.ts +44 -40
  5. package/lib/components/formula/Editor.js +16 -5
  6. package/lib/components/formula/Editor.js.map +2 -2
  7. package/lib/components/formula/Picker.d.ts +88 -41
  8. package/lib/components/formula/Picker.js +50 -24
  9. package/lib/components/formula/Picker.js.map +2 -2
  10. package/lib/components/table/HeadCellFilter.js +4 -1
  11. package/lib/components/table/HeadCellFilter.js.map +2 -2
  12. package/lib/components/table/HeadCellSort.js +30 -24
  13. package/lib/components/table/HeadCellSort.js.map +2 -2
  14. package/lib/components/table/index.d.ts +6 -3
  15. package/lib/components/table/index.js +72 -86
  16. package/lib/components/table/index.js.map +2 -2
  17. package/lib/index.js +1 -1
  18. package/lib/locale/zh-CN.js +1 -1
  19. package/lib/locale/zh-CN.js.map +2 -2
  20. package/lib/renderers/Action.d.ts +21 -4
  21. package/lib/renderers/Action.js +44 -20
  22. package/lib/renderers/Action.js.map +2 -2
  23. package/lib/renderers/Breadcrumb.js +2 -2
  24. package/lib/renderers/Breadcrumb.js.map +2 -2
  25. package/lib/renderers/CRUD.js +3 -0
  26. package/lib/renderers/CRUD.js.map +2 -2
  27. package/lib/renderers/Form/InputFormula.d.ts +6 -2
  28. package/lib/renderers/Form/InputFormula.js +4 -3
  29. package/lib/renderers/Form/InputFormula.js.map +2 -2
  30. package/lib/renderers/Form/InputTree.d.ts +4 -0
  31. package/lib/renderers/Form/InputTree.js +2 -2
  32. package/lib/renderers/Form/InputTree.js.map +2 -2
  33. package/lib/renderers/Form/Picker.d.ts +1 -1
  34. package/lib/renderers/Form/Picker.js +38 -23
  35. package/lib/renderers/Form/Picker.js.map +2 -2
  36. package/lib/renderers/Form/wrapControl.js +10 -10
  37. package/lib/renderers/Form/wrapControl.js.map +2 -2
  38. package/lib/renderers/Service.js +0 -1
  39. package/lib/renderers/Service.js.map +2 -2
  40. package/lib/renderers/Steps.d.ts +2 -2
  41. package/lib/renderers/Steps.js +1 -1
  42. package/lib/renderers/Steps.js.map +2 -2
  43. package/lib/renderers/Table/index.js +2 -1
  44. package/lib/renderers/Table/index.js.map +2 -2
  45. package/lib/renderers/Table-v2/HeadCellSearchDropdown.d.ts +1 -1
  46. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js +38 -24
  47. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js.map +2 -2
  48. package/lib/renderers/Table-v2/index.d.ts +10 -4
  49. package/lib/renderers/Table-v2/index.js +109 -58
  50. package/lib/renderers/Table-v2/index.js.map +2 -2
  51. package/lib/renderers/Tabs.d.ts +6 -2
  52. package/lib/renderers/Tabs.js +21 -0
  53. package/lib/renderers/Tabs.js.map +2 -2
  54. package/lib/store/table-v2.d.ts +210 -4
  55. package/lib/store/table-v2.js +82 -5
  56. package/lib/store/table-v2.js.map +2 -2
  57. package/lib/themes/ang-ie11.css +59 -17
  58. package/lib/themes/ang.css +54 -12
  59. package/lib/themes/ang.css.map +1 -1
  60. package/lib/themes/antd-ie11.css +59 -17
  61. package/lib/themes/antd.css +54 -12
  62. package/lib/themes/antd.css.map +1 -1
  63. package/lib/themes/cxd-ie11.css +210 -168
  64. package/lib/themes/cxd.css +55 -13
  65. package/lib/themes/cxd.css.map +1 -1
  66. package/lib/themes/dark-ie11.css +59 -17
  67. package/lib/themes/dark.css +54 -12
  68. package/lib/themes/dark.css.map +1 -1
  69. package/lib/themes/default-ie11.css +210 -168
  70. package/lib/themes/default.css +55 -13
  71. package/lib/themes/default.css.map +1 -1
  72. package/lib/types.d.ts +1 -1
  73. package/lib/types.js.map +1 -1
  74. package/lib/utils/formula.js +4 -3
  75. package/lib/utils/formula.js.map +2 -2
  76. package/package.json +2 -2
  77. package/schema.json +22 -14
  78. package/scss/components/_formula.scss +45 -4
  79. package/scss/components/_modal.scss +1 -1
  80. package/scss/components/form/_checks.scss +47 -44
  81. package/scss/components/form/_icon-picker.scss +10 -6
  82. package/scss/components/form/_select.scss +3 -2
  83. package/scss/components/form/_switch.scss +1 -0
  84. package/scss/components/form/_text.scss +2 -0
  85. package/scss/themes/_cxd-variables.scss +1 -1
  86. package/sdk/ang-ie11.css +66 -17
  87. package/sdk/ang.css +61 -12
  88. package/sdk/antd-ie11.css +66 -17
  89. package/sdk/antd.css +61 -12
  90. package/sdk/barcode.js +51 -51
  91. package/sdk/charts.js +14 -14
  92. package/sdk/codemirror.js +7 -7
  93. package/sdk/color-picker.js +65 -65
  94. package/sdk/cropperjs.js +2 -2
  95. package/sdk/cxd-ie11.css +217 -168
  96. package/sdk/cxd.css +62 -13
  97. package/sdk/dark-ie11.css +66 -17
  98. package/sdk/dark.css +61 -12
  99. package/sdk/exceljs.js +1 -1
  100. package/sdk/markdown.js +69 -69
  101. package/sdk/papaparse.js +1 -1
  102. package/sdk/renderers/Form/CityDB.js +1 -1
  103. package/sdk/rest.js +16 -16
  104. package/sdk/rich-text.js +62 -62
  105. package/sdk/sdk-ie11.css +217 -168
  106. package/sdk/sdk.css +62 -13
  107. package/sdk/sdk.js +1342 -1338
  108. package/sdk/thirds/hls.js/hls.js +1 -1
  109. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  110. package/sdk/tinymce.js +57 -57
  111. package/src/components/Select.tsx +3 -6
  112. package/src/components/formula/Editor.tsx +51 -23
  113. package/src/components/formula/Picker.tsx +68 -12
  114. package/src/components/table/HeadCellFilter.tsx +4 -1
  115. package/src/components/table/HeadCellSort.tsx +1 -1
  116. package/src/components/table/index.tsx +66 -90
  117. package/src/locale/zh-CN.ts +1 -1
  118. package/src/renderers/Action.tsx +64 -19
  119. package/src/renderers/Breadcrumb.tsx +11 -12
  120. package/src/renderers/CRUD.tsx +2 -0
  121. package/src/renderers/Form/InputFormula.tsx +11 -3
  122. package/src/renderers/Form/InputTree.tsx +7 -0
  123. package/src/renderers/Form/Picker.tsx +11 -1
  124. package/src/renderers/Form/wrapControl.tsx +10 -10
  125. package/src/renderers/Service.tsx +0 -1
  126. package/src/renderers/Steps.tsx +5 -5
  127. package/src/renderers/Table/index.tsx +9 -7
  128. package/src/renderers/Table-v2/HeadCellSearchDropdown.tsx +14 -9
  129. package/src/renderers/Table-v2/index.tsx +130 -58
  130. package/src/renderers/Tabs.tsx +33 -3
  131. package/src/store/table-v2.ts +104 -7
  132. package/src/types.ts +2 -1
  133. package/src/utils/formula.ts +5 -3
@@ -778,10 +778,7 @@ export class Select extends React.Component<SelectProps, SelectState> {
778
778
  })}
779
779
  onClick={this.removeItem.bind(this, index)}
780
780
  >
781
- <Icon
782
- icon="close"
783
- className="icon"
784
- />
781
+ <Icon icon="close" className="icon" />
785
782
  </span>
786
783
  </div>
787
784
  </TooltipWrapper>
@@ -1026,7 +1023,7 @@ export class Select extends React.Component<SelectProps, SelectState> {
1026
1023
  </div>
1027
1024
  ) : null}
1028
1025
 
1029
- <div ref={this.menuItemRef} className={cx('Select-option invisible')}>
1026
+ <div ref={this.menuItemRef} className={cx('Select-option hidden')}>
1030
1027
  {multiple ? (
1031
1028
  <Checkbox size="sm">Placeholder</Checkbox>
1032
1029
  ) : (
@@ -1083,7 +1080,7 @@ export class Select extends React.Component<SelectProps, SelectState> {
1083
1080
  overlay
1084
1081
  className={cx('Select-popover')}
1085
1082
  style={{
1086
- minWidth: this.target ? this.target.offsetWidth : 'auto'
1083
+ width: this.target ? this.target.offsetWidth : 'auto'
1087
1084
  }}
1088
1085
  onHide={this.close}
1089
1086
  >
@@ -55,6 +55,11 @@ export interface FormulaEditorProps extends ThemeProps, LocaleProps {
55
55
  */
56
56
  variableMode?: 'tabs' | 'tree';
57
57
 
58
+ /**
59
+ * 只展示变量,不需要其他面板
60
+ */
61
+ onlyVariable?: boolean;
62
+
58
63
  /**
59
64
  * 函数集合,默认不需要传,即 amis-formula 里面那个函数
60
65
  * 如果有扩充,则需要传。
@@ -221,6 +226,19 @@ export class FormulaEditor extends React.Component<
221
226
 
222
227
  @autobind
223
228
  handleVariableSelect(item: VariableItem) {
229
+ const {onlyVariable, evalMode} = this.props;
230
+
231
+ // 只展示变量时,选择即提交
232
+ if (onlyVariable) {
233
+ const onChange = this.props.onChange;
234
+ const value = item.value
235
+ ? evalMode
236
+ ? item.value
237
+ : '${' + item.value + '}'
238
+ : '';
239
+ return onChange?.(value);
240
+ }
241
+
224
242
  this.editorPlugin?.insertContent(
225
243
  {
226
244
  key: item.value,
@@ -248,6 +266,7 @@ export class FormulaEditor extends React.Component<
248
266
  value,
249
267
  functions,
250
268
  variableMode,
269
+ onlyVariable,
251
270
  translate: __,
252
271
  classnames: cx,
253
272
  variableClassName,
@@ -267,23 +286,30 @@ export class FormulaEditor extends React.Component<
267
286
  'is-focused': focused
268
287
  })}
269
288
  >
270
- <section className={cx(`FormulaEditor-content`)}>
271
- <header className={cx(`FormulaEditor-header`)}>
272
- {__(header || 'FormulaEditor.title')}
273
- </header>
274
-
275
- <CodeMirrorEditor
276
- className={cx('FormulaEditor-editor')}
277
- value={value}
278
- onChange={this.handleOnChange}
279
- editorFactory={this.editorFactory}
280
- editorDidMount={this.handleEditorMounted}
281
- onFocus={this.handleFocus}
282
- onBlur={this.handleBlur}
283
- />
284
- </section>
285
-
286
- <section className={cx('FormulaEditor-settings')}>
289
+ {onlyVariable ? null : (
290
+ <section className={cx(`FormulaEditor-content`)}>
291
+ <header className={cx(`FormulaEditor-header`)}>
292
+ {__(header || 'FormulaEditor.title')}
293
+ </header>
294
+
295
+ <CodeMirrorEditor
296
+ className={cx('FormulaEditor-editor')}
297
+ value={value}
298
+ onChange={this.handleOnChange}
299
+ editorFactory={this.editorFactory}
300
+ editorDidMount={this.handleEditorMounted}
301
+ onFocus={this.handleFocus}
302
+ onBlur={this.handleBlur}
303
+ />
304
+ </section>
305
+ )}
306
+
307
+ <section
308
+ className={cx(
309
+ 'FormulaEditor-settings',
310
+ onlyVariable ? 'only-variable' : ''
311
+ )}
312
+ >
287
313
  <div className={cx('FormulaEditor-panel')}>
288
314
  {variableMode !== 'tabs' ? (
289
315
  <div className={cx('FormulaEditor-panel-header')}>
@@ -310,12 +336,14 @@ export class FormulaEditor extends React.Component<
310
336
  </div>
311
337
  </div>
312
338
 
313
- <FuncList
314
- className={functionClassName}
315
- title={__('FormulaEditor.function')}
316
- data={functionList}
317
- onSelect={this.handleFunctionSelect}
318
- />
339
+ {onlyVariable ? null : (
340
+ <FuncList
341
+ className={functionClassName}
342
+ title={__('FormulaEditor.function')}
343
+ data={functionList}
344
+ onSelect={this.handleFunctionSelect}
345
+ />
346
+ )}
319
347
  </section>
320
348
  </div>
321
349
  );
@@ -17,6 +17,7 @@ import {themeable} from '../../theme';
17
17
  import {localeable} from '../../locale';
18
18
  import type {SchemaIcon} from '../../Schema';
19
19
  import {parse, Evaluator} from 'amis-formula';
20
+ import Input from '../Input';
20
21
 
21
22
  export interface FormulaPickerProps extends FormulaEditorProps {
22
23
  // 新的属性?
@@ -35,13 +36,18 @@ export interface FormulaPickerProps extends FormulaEditorProps {
35
36
  /**
36
37
  * 控件模式
37
38
  */
38
- mode?: 'button' | 'input-button';
39
+ mode?: 'button' | 'input-button' | 'input-group';
39
40
 
40
41
  /**
41
42
  * 边框模式,全边框,还是半边框,或者没边框。
42
43
  */
43
44
  borderMode?: 'full' | 'half' | 'none';
44
45
 
46
+ /**
47
+ * 只展示变量,不需要其他面板
48
+ */
49
+ onlyVariable?: boolean;
50
+
45
51
  /**
46
52
  * 按钮Label,inputMode为button时生效
47
53
  */
@@ -132,7 +138,8 @@ export class FormulaPicker extends React.Component<
132
138
  }
133
139
 
134
140
  static defaultProps = {
135
- evalMode: true
141
+ evalMode: true,
142
+ onlyVariable: false
136
143
  };
137
144
 
138
145
  state: FormulaPickerState = {
@@ -173,8 +180,19 @@ export class FormulaPicker extends React.Component<
173
180
  this.setState({value}, () => this.handleConfirm());
174
181
  }
175
182
 
183
+ @autobind
184
+ handleInputGroupChange(e: React.ChangeEvent<HTMLInputElement>) {
185
+ const onChange = this.props.onChange;
186
+ onChange && onChange(e.currentTarget.value);
187
+ }
188
+
176
189
  @autobind
177
190
  handleEditorChange(value: string) {
191
+ const {onlyVariable} = this.props;
192
+ if (onlyVariable) {
193
+ return this.confirm(value);
194
+ }
195
+
178
196
  this.setState({
179
197
  editorValue: value,
180
198
  isError: false
@@ -185,6 +203,10 @@ export class FormulaPicker extends React.Component<
185
203
  handleEditorConfirm() {
186
204
  const {translate: __} = this.props;
187
205
  const value = this.state.editorValue;
206
+ this.confirm(value);
207
+ }
208
+
209
+ confirm(value: string) {
188
210
  const validate = this.validate(value);
189
211
 
190
212
  if (validate === true) {
@@ -237,13 +259,11 @@ export class FormulaPicker extends React.Component<
237
259
  const {translate: __} = this.props;
238
260
 
239
261
  try {
240
- const ast = parse(value, {
262
+ parse(value, {
241
263
  evalMode: this.props.evalMode,
242
264
  allowFilter: false
243
265
  });
244
266
 
245
- new Evaluator({}).evalute(ast);
246
-
247
267
  return true;
248
268
  } catch (e) {
249
269
  if (/\s(\d+:\d+)$/.test(e.message)) {
@@ -276,6 +296,7 @@ export class FormulaPicker extends React.Component<
276
296
  functions,
277
297
  children,
278
298
  variableMode,
299
+ onlyVariable,
279
300
  ...rest
280
301
  } = this.props;
281
302
  const {isOpened, value, editorValue, isError} = this.state;
@@ -291,8 +312,14 @@ export class FormulaPicker extends React.Component<
291
312
  setState: this.updateState
292
313
  })
293
314
  ) : (
294
- <div className={cx('FormulaPicker', className)}>
295
- {mode === 'button' ? (
315
+ <div
316
+ className={cx(
317
+ 'FormulaPicker',
318
+ className,
319
+ mode === 'input-group' ? 'is-input-group' : ''
320
+ )}
321
+ >
322
+ {mode === 'button' && (
296
323
  <Button
297
324
  className={cx('FormulaPicker-action', 'w-full')}
298
325
  level={level}
@@ -321,7 +348,8 @@ export class FormulaPicker extends React.Component<
321
348
  {__(btnLabel || 'FormulaEditor.btnLabel')}
322
349
  </span>
323
350
  </Button>
324
- ) : (
351
+ )}
352
+ {mode === 'input-button' && (
325
353
  <>
326
354
  <ResultBox
327
355
  className={cx(
@@ -362,6 +390,29 @@ export class FormulaPicker extends React.Component<
362
390
  </Button>
363
391
  </>
364
392
  )}
393
+ {mode === 'input-group' && (
394
+ <>
395
+ <Input
396
+ className={cx('FormulaPicker-input')}
397
+ onChange={this.handleInputGroupChange}
398
+ placeholder={allowInput ? placeholder : ''}
399
+ autoComplete="off"
400
+ value={value}
401
+ disabled={disabled}
402
+ readOnly={!allowInput}
403
+ />
404
+
405
+ <a
406
+ className={cx(`FormulaPicker-toggler`)}
407
+ onClick={this.handleClick}
408
+ >
409
+ <Icon
410
+ icon={onlyVariable ? 'ellipsis-v' : 'function'}
411
+ className="icon"
412
+ />
413
+ </a>
414
+ </>
415
+ )}
365
416
  </div>
366
417
  )}
367
418
  <Modal
@@ -379,6 +430,7 @@ export class FormulaPicker extends React.Component<
379
430
  variables={this.state.variables ?? variables}
380
431
  functions={this.state.functions ?? functions}
381
432
  variableMode={this.state.variableMode ?? variableMode}
433
+ onlyVariable={onlyVariable}
382
434
  value={editorValue}
383
435
  onChange={this.handleEditorChange}
384
436
  />
@@ -391,10 +443,14 @@ export class FormulaPicker extends React.Component<
391
443
  </span>
392
444
  </div>
393
445
  ) : null}
394
- <Button onClick={this.close}>{__('cancel')}</Button>
395
- <Button onClick={this.handleEditorConfirm} level="primary">
396
- {__('confirm')}
397
- </Button>
446
+ {onlyVariable ? null : (
447
+ <>
448
+ <Button onClick={this.close}>{__('cancel')}</Button>
449
+ <Button onClick={this.handleEditorConfirm} level="primary">
450
+ {__('confirm')}
451
+ </Button>
452
+ </>
453
+ )}
398
454
  </Modal.Footer>
399
455
  </Modal>
400
456
  </>
@@ -180,7 +180,10 @@ export class HeadCellFilter extends React.Component<Props, State> {
180
180
  const payload = {[column.key]: selectedKeys};
181
181
 
182
182
  if (onFilter) {
183
- const prevented = await onFilter(payload);
183
+ const prevented = await onFilter({
184
+ filterName: column.key,
185
+ filterValue: selectedKeys?.join(',')
186
+ });
184
187
  if (prevented) {
185
188
  return;
186
189
  }
@@ -51,7 +51,7 @@ export class HeadCellSort extends React.Component<Props, State> {
51
51
  }
52
52
 
53
53
  if (onSort) {
54
- const prevented = onSort({
54
+ const prevented = await onSort({
55
55
  orderBy: this.state.orderBy,
56
56
  order: this.state.order
57
57
  });
@@ -10,7 +10,6 @@ import find from 'lodash/find';
10
10
  import isEqual from 'lodash/isEqual';
11
11
  import filter from 'lodash/filter';
12
12
  import intersection from 'lodash/intersection';
13
- import cloneDeep from 'lodash/cloneDeep';
14
13
  import Sortable from 'sortablejs';
15
14
 
16
15
  import {themeable, ClassNamesFn, ThemeProps} from '../../theme';
@@ -325,12 +324,15 @@ export class Table extends React.PureComponent<TableProps, TableState> {
325
324
  constructor(props: TableProps) {
326
325
  super(props);
327
326
 
328
- this.selectedRows = props.rowSelection
329
- ? this.getSelectedRows(
330
- props.dataSource,
331
- props.rowSelection?.selectedRowKeys
332
- )
333
- : [];
327
+ if (props.rowSelection) {
328
+ const selectedResult = this.getSelectedRows(
329
+ props.dataSource,
330
+ props.rowSelection?.selectedRowKeys
331
+ );
332
+
333
+ this.selectedRows = selectedResult.selectedRows;
334
+ this.unSelectedRows = selectedResult.unSelectedRows;
335
+ }
334
336
 
335
337
  this.state = {
336
338
  selectedRowKeys: props.rowSelection
@@ -361,6 +363,8 @@ export class Table extends React.PureComponent<TableProps, TableState> {
361
363
  tdColumns: Array<TdProps>;
362
364
  // 表格当前选中行
363
365
  selectedRows: Array<any>;
366
+ // 表格当前未选中行
367
+ unSelectedRows: Array<any>;
364
368
  // 拖拽排序
365
369
  sortable: Sortable;
366
370
  // 记录点击起始横坐标
@@ -393,6 +397,7 @@ export class Table extends React.PureComponent<TableProps, TableState> {
393
397
  selectedRowKeys: Array<string | number>
394
398
  ) {
395
399
  const selectedRows: Array<any> = [];
400
+ const unSelectedRows: Array<any> = [];
396
401
  dataSource.forEach(data => {
397
402
  if (
398
403
  find(
@@ -401,10 +406,12 @@ export class Table extends React.PureComponent<TableProps, TableState> {
401
406
  )
402
407
  ) {
403
408
  selectedRows.push(data);
409
+ } else {
410
+ unSelectedRows.push(data);
404
411
  }
405
412
  });
406
413
 
407
- return selectedRows;
414
+ return {selectedRows, unSelectedRows};
408
415
  }
409
416
 
410
417
  updateTableBodyFixed() {
@@ -498,10 +505,12 @@ export class Table extends React.PureComponent<TableProps, TableState> {
498
505
  // 选择项发生了变化触发
499
506
  if (!isEqual(prevState.selectedRowKeys, this.state.selectedRowKeys)) {
500
507
  // 更新保存的已选择行数据
501
- this.selectedRows = this.getSelectedRows(
508
+ const selectedResult = this.getSelectedRows(
502
509
  this.state.dataSource,
503
510
  this.state.selectedRowKeys
504
511
  );
512
+ this.selectedRows = selectedResult.selectedRows;
513
+ this.unSelectedRows = selectedResult.unSelectedRows;
505
514
 
506
515
  const {rowSelection} = this.props;
507
516
  rowSelection &&
@@ -526,10 +535,12 @@ export class Table extends React.PureComponent<TableProps, TableState> {
526
535
  this.setState({
527
536
  selectedRowKeys: this.props.rowSelection.selectedRowKeys
528
537
  });
529
- this.selectedRows = this.getSelectedRows(
538
+ const selectedResult = this.getSelectedRows(
530
539
  this.state.dataSource,
531
540
  this.state.selectedRowKeys
532
541
  );
542
+ this.selectedRows = selectedResult.selectedRows;
543
+ this.unSelectedRows = selectedResult.unSelectedRows;
533
544
  }
534
545
  }
535
546
 
@@ -599,37 +610,6 @@ export class Table extends React.PureComponent<TableProps, TableState> {
599
610
  this.destroyDragging();
600
611
  }
601
612
 
602
- exchange(fromIndex: number, toIndex: number, item: any) {
603
- const {scroll, headSummary} = this.props;
604
- // 如果有头部总结行 fromIndex就会+1
605
- if ((!scroll || (scroll && !scroll.y)) && headSummary) {
606
- fromIndex = fromIndex - 1;
607
- }
608
-
609
- const index = toIndex - fromIndex;
610
-
611
- const levels = item.getAttribute('row-levels');
612
- const rowIndex = +item.getAttribute('row-index');
613
-
614
- const dataSource = cloneDeep(this.state.dataSource);
615
- const levelsArray = levels ? levels.split(',') : [];
616
- const childrenColumnName = this.getChildrenColumnName();
617
- let data: Array<any> = dataSource;
618
- let i = 0;
619
- while (i < levelsArray.length) {
620
- data = data[levelsArray[i]][childrenColumnName];
621
- i++;
622
- }
623
-
624
- if (data && data.length > 0) {
625
- const row = cloneDeep(data[rowIndex]);
626
- data.splice(rowIndex, 1);
627
- data.splice(rowIndex + index, 0, row);
628
- }
629
-
630
- return data;
631
- }
632
-
633
613
  initDragging() {
634
614
  const {classnames: cx, onDrag} = this.props;
635
615
 
@@ -666,14 +646,9 @@ export class Table extends React.PureComponent<TableProps, TableState> {
666
646
  return;
667
647
  }
668
648
 
669
- const {onDrag} = this.props;
670
- if (onDrag) {
671
- const data = this.exchange(e.oldIndex, e.newIndex, e.item);
672
- const prevented = await onDrag(data);
673
- if (prevented) {
674
- return;
675
- }
676
- }
649
+ const rowLevels = e.item.getAttribute('row-levels');
650
+
651
+ onDrag && onDrag(e.oldIndex, e.newIndex, rowLevels ? rowLevels.split(',') : []);
677
652
  }
678
653
  });
679
654
  }
@@ -1037,9 +1012,8 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1037
1012
  const selectedRowKeys = value ? allRowKeys : [];
1038
1013
  if (onSelectAll) {
1039
1014
  const prevented = await onSelectAll(
1040
- value,
1041
- selectedRowKeys,
1042
1015
  selectedRows,
1016
+ value ? [] : selectedRows,
1043
1017
  changeRows
1044
1018
  );
1045
1019
  if (prevented) {
@@ -1152,9 +1126,16 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1152
1126
  );
1153
1127
  }
1154
1128
 
1155
- onRowClick(event: React.ChangeEvent<any>, record?: any, rowIndex?: number) {
1129
+ async onRowClick(event: React.ChangeEvent<any>, record?: any, rowIndex?: number) {
1156
1130
  const {rowSelection, onRow} = this.props;
1157
1131
 
1132
+ if (onRow && onRow.onRowClick) {
1133
+ const prevented = await onRow.onRowClick(event, record, rowIndex);
1134
+ if (prevented) {
1135
+ return;
1136
+ }
1137
+ }
1138
+
1158
1139
  if (rowSelection && rowSelection.type && rowSelection.rowClick) {
1159
1140
  const defaultKey = this.getRowSelectionKeyField();
1160
1141
 
@@ -1165,10 +1146,6 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1165
1146
 
1166
1147
  this.selectedSingleRow(!isSelected, record);
1167
1148
  }
1168
-
1169
- if (record && onRow) {
1170
- onRow.onRowClick && onRow.onRowClick(event, record, rowIndex);
1171
- }
1172
1149
  }
1173
1150
 
1174
1151
  onRowMouseEnter(
@@ -1350,42 +1327,41 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1350
1327
  const defaultKey = this.getRowSelectionKeyField();
1351
1328
  const isRadio = rowSelection && rowSelection.type === 'radio';
1352
1329
 
1353
- if (onSelect) {
1354
- const prevented = await onSelect(
1355
- data,
1356
- value,
1357
- this.selectedRows,
1358
- this.state.selectedRowKeys
1359
- );
1360
- if (prevented) {
1361
- return;
1362
- }
1363
- }
1364
-
1330
+ let selectedRowKeys = [];
1365
1331
  if (value) {
1366
1332
  if (isRadio) {
1367
- this.setState({selectedRowKeys: [data[defaultKey]]});
1333
+ selectedRowKeys = [data[defaultKey]];
1368
1334
  } else {
1369
- this.setState(prevState => ({
1370
- selectedRowKeys: [
1371
- ...prevState.selectedRowKeys,
1372
- data[defaultKey],
1373
- ...this.getDataChildrenKeys(data)
1374
- ].filter((key, i, a) => a.indexOf(key) === i)
1375
- }));
1335
+ selectedRowKeys = [
1336
+ ...this.state.selectedRowKeys,
1337
+ data[defaultKey],
1338
+ ...this.getDataChildrenKeys(data)
1339
+ ].filter((key, i, a) => a.indexOf(key) === i)
1376
1340
  }
1377
1341
  } else {
1378
1342
  if (!isRadio) {
1379
- this.setState({
1380
- selectedRowKeys: this.state.selectedRowKeys.filter(
1381
- key =>
1382
- ![data[defaultKey], ...this.getDataChildrenKeys(data)].includes(
1383
- key
1384
- )
1385
- )
1386
- });
1343
+ selectedRowKeys = this.state.selectedRowKeys.filter(
1344
+ key =>
1345
+ ![data[defaultKey], ...this.getDataChildrenKeys(data)].includes(
1346
+ key
1347
+ )
1348
+ )
1349
+ }
1350
+ }
1351
+
1352
+ if (onSelect) {
1353
+ const selectedResult = this.getSelectedRows(this.state.dataSource, selectedRowKeys);
1354
+ const prevented = await onSelect(
1355
+ selectedResult.selectedRows,
1356
+ selectedRowKeys,
1357
+ selectedResult.unSelectedRows
1358
+ );
1359
+ if (prevented) {
1360
+ return;
1387
1361
  }
1388
1362
  }
1363
+
1364
+ this.setState({selectedRowKeys});
1389
1365
  }
1390
1366
 
1391
1367
  renderRow(data: any, rowIndex: number, levels: Array<number>) {
@@ -1396,6 +1372,7 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1396
1372
  draggable,
1397
1373
  indentSize,
1398
1374
  rowClassName,
1375
+ keyField,
1399
1376
  lineHeight // 是否设置了固定行高
1400
1377
  } = this.props;
1401
1378
 
@@ -1515,10 +1492,11 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1515
1492
  key => key === data[defaultKey]
1516
1493
  );
1517
1494
  const hasChildrenChecked = this.hasCheckedChildrenRows(data);
1495
+ const isRadio = rowSelection && rowSelection.type === 'radio';
1518
1496
 
1519
1497
  return [
1520
1498
  <tr
1521
- key={rowIndex}
1499
+ key={`${data[keyField || 'key'] || rowIndex}`} // 可能会拖拽排序,就不能用rowIndex作为key了,否则显示会有问题
1522
1500
  row-index={rowIndex}
1523
1501
  row-levels={levels.join(',')}
1524
1502
  className={cx(
@@ -1546,8 +1524,8 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1546
1524
  <CheckBox
1547
1525
  name={'Table-checkbox'}
1548
1526
  type={rowSelection.type || 'checkbox'}
1549
- partial={hasChildrenChecked && !isChecked}
1550
- checked={hasChildrenChecked || isChecked}
1527
+ partial={!isRadio && hasChildrenChecked && !isChecked}
1528
+ checked={isRadio ? isChecked : (hasChildrenChecked || isChecked)}
1551
1529
  onChange={(value, shift) => {
1552
1530
  if (!(rowSelection && rowSelection.rowClick)) {
1553
1531
  this.selectedSingleRow(value, data);
@@ -1603,9 +1581,7 @@ export class Table extends React.PureComponent<TableProps, TableState> {
1603
1581
  </Cell>
1604
1582
  </tr>
1605
1583
  ) : (
1606
- this.state.dataSource.map((data, index) => {
1607
- return this.renderRow(data, index, []);
1608
- })
1584
+ this.state.dataSource.map((data, index) => this.renderRow(data, index, []))
1609
1585
  )}
1610
1586
  </tbody>
1611
1587
  );
@@ -202,7 +202,7 @@ register('zh-CN', {
202
202
  'Select.clearAll': '移除所有',
203
203
  'Select.createLabel': '新增选项',
204
204
  'Select.placeholder': '请选择',
205
- 'Select.searchPromptText': '输入内容进行检索',
205
+ 'Select.searchPromptText': '搜索',
206
206
  'sort': '排序',
207
207
  'SubForm.button': '设置',
208
208
  'SubForm.editDetail': '编辑详情',