amis 1.9.1-beta.12 → 1.9.1-beta.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (240) hide show
  1. package/README.md +1 -1
  2. package/lib/components/AssociatedSelection.d.ts +40 -40
  3. package/lib/components/Badge.d.ts +1 -1
  4. package/lib/components/Badge.js.map +1 -1
  5. package/lib/components/ChainedSelection.d.ts +40 -40
  6. package/lib/components/GroupedSelection.d.ts +40 -40
  7. package/lib/components/GroupedSelection.js +3 -2
  8. package/lib/components/GroupedSelection.js.map +2 -2
  9. package/lib/components/PickerContainer.d.ts +1 -0
  10. package/lib/components/PickerContainer.js +4 -4
  11. package/lib/components/PickerContainer.js.map +2 -2
  12. package/lib/components/Radios.d.ts +10 -10
  13. package/lib/components/ResultBox.d.ts +44 -40
  14. package/lib/components/ResultBox.js +40 -6
  15. package/lib/components/ResultBox.js.map +2 -2
  16. package/lib/components/ResultList.d.ts +43 -53
  17. package/lib/components/ResultList.js +34 -22
  18. package/lib/components/ResultList.js.map +2 -2
  19. package/lib/components/ResultTableList.d.ts +40 -40
  20. package/lib/components/ResultTableList.js +16 -17
  21. package/lib/components/ResultTableList.js.map +2 -2
  22. package/lib/components/ResultTreeList.d.ts +40 -40
  23. package/lib/components/Select.d.ts +498 -294
  24. package/lib/components/Select.js +58 -10
  25. package/lib/components/Select.js.map +2 -2
  26. package/lib/components/Selection.d.ts +41 -40
  27. package/lib/components/Selection.js.map +2 -2
  28. package/lib/components/TableSelection.d.ts +42 -40
  29. package/lib/components/TableSelection.js +7 -2
  30. package/lib/components/TableSelection.js.map +2 -2
  31. package/lib/components/TabsTransfer.d.ts +2 -2
  32. package/lib/components/TabsTransfer.js.map +1 -1
  33. package/lib/components/TooltipWrapper.d.ts +1 -1
  34. package/lib/components/TooltipWrapper.js.map +2 -2
  35. package/lib/components/Transfer.d.ts +40 -40
  36. package/lib/components/Transfer.js +1 -1
  37. package/lib/components/Transfer.js.map +2 -2
  38. package/lib/components/TransferDropDown.d.ts +43 -40
  39. package/lib/components/TransferDropDown.js +2 -2
  40. package/lib/components/TransferDropDown.js.map +2 -2
  41. package/lib/components/TreeSelection.d.ts +40 -40
  42. package/lib/components/TreeSelection.js +3 -2
  43. package/lib/components/TreeSelection.js.map +2 -2
  44. package/lib/components/formula/Editor.d.ts +45 -41
  45. package/lib/components/formula/Editor.js +8 -2
  46. package/lib/components/formula/Editor.js.map +2 -2
  47. package/lib/components/formula/Picker.d.ts +43 -41
  48. package/lib/components/formula/Picker.js +40 -20
  49. package/lib/components/formula/Picker.js.map +2 -2
  50. package/lib/components/formula/VariableList.d.ts +2 -0
  51. package/lib/components/formula/VariableList.js +15 -5
  52. package/lib/components/formula/VariableList.js.map +2 -2
  53. package/lib/components/index.d.ts +3 -1
  54. package/lib/components/index.js +5 -1
  55. package/lib/components/index.js.map +2 -2
  56. package/lib/components/schema-editor/SchemaVariableList.d.ts +1 -0
  57. package/lib/components/schema-editor/SchemaVariableList.js +2 -2
  58. package/lib/components/schema-editor/SchemaVariableList.js.map +2 -2
  59. package/lib/components/schema-editor/SchemaVariableListPicker.d.ts +1 -0
  60. package/lib/components/schema-editor/SchemaVariableListPicker.js +2 -2
  61. package/lib/components/schema-editor/SchemaVariableListPicker.js.map +2 -2
  62. package/lib/components/table/HeadCellFilter.js +4 -1
  63. package/lib/components/table/HeadCellFilter.js.map +2 -2
  64. package/lib/components/table/HeadCellSort.js +30 -24
  65. package/lib/components/table/HeadCellSort.js.map +2 -2
  66. package/lib/components/table/index.d.ts +6 -3
  67. package/lib/components/table/index.js +72 -86
  68. package/lib/components/table/index.js.map +2 -2
  69. package/lib/index.js +1 -1
  70. package/lib/locale/de-DE.js +1 -1
  71. package/lib/locale/de-DE.js.map +2 -2
  72. package/lib/locale/en-US.js +1 -1
  73. package/lib/locale/en-US.js.map +2 -2
  74. package/lib/locale/zh-CN.js +1 -1
  75. package/lib/locale/zh-CN.js.map +2 -2
  76. package/lib/renderers/Action.d.ts +21 -4
  77. package/lib/renderers/Action.js +44 -20
  78. package/lib/renderers/Action.js.map +2 -2
  79. package/lib/renderers/Breadcrumb.js +2 -2
  80. package/lib/renderers/Breadcrumb.js.map +2 -2
  81. package/lib/renderers/CRUD.js +3 -0
  82. package/lib/renderers/CRUD.js.map +2 -2
  83. package/lib/renderers/Form/InputFormula.d.ts +5 -1
  84. package/lib/renderers/Form/InputFormula.js +2 -2
  85. package/lib/renderers/Form/InputFormula.js.map +2 -2
  86. package/lib/renderers/Form/InputImage.js.map +2 -2
  87. package/lib/renderers/Form/InputTag.d.ts +8 -0
  88. package/lib/renderers/Form/InputTag.js +2 -2
  89. package/lib/renderers/Form/InputTag.js.map +2 -2
  90. package/lib/renderers/Form/InputTree.d.ts +4 -0
  91. package/lib/renderers/Form/InputTree.js +2 -2
  92. package/lib/renderers/Form/InputTree.js.map +2 -2
  93. package/lib/renderers/Form/Picker.d.ts +1 -1
  94. package/lib/renderers/Form/Picker.js +38 -23
  95. package/lib/renderers/Form/Picker.js.map +2 -2
  96. package/lib/renderers/Form/Select.d.ts +19 -0
  97. package/lib/renderers/Form/Select.js +2 -2
  98. package/lib/renderers/Form/Select.js.map +2 -2
  99. package/lib/renderers/Form/Transfer.d.ts +1 -0
  100. package/lib/renderers/Form/Transfer.js +4 -0
  101. package/lib/renderers/Form/Transfer.js.map +2 -2
  102. package/lib/renderers/Form/wrapControl.js +10 -10
  103. package/lib/renderers/Form/wrapControl.js.map +2 -2
  104. package/lib/renderers/QRCode.d.ts +16 -0
  105. package/lib/renderers/QRCode.js +25 -1
  106. package/lib/renderers/QRCode.js.map +2 -2
  107. package/lib/renderers/Service.js +0 -1
  108. package/lib/renderers/Service.js.map +2 -2
  109. package/lib/renderers/Steps.d.ts +2 -2
  110. package/lib/renderers/Steps.js +1 -1
  111. package/lib/renderers/Steps.js.map +2 -2
  112. package/lib/renderers/Table/exportExcel.js +50 -36
  113. package/lib/renderers/Table/exportExcel.js.map +2 -2
  114. package/lib/renderers/Table/index.js +2 -1
  115. package/lib/renderers/Table/index.js.map +2 -2
  116. package/lib/renderers/Table-v2/HeadCellSearchDropdown.d.ts +1 -1
  117. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js +38 -24
  118. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js.map +2 -2
  119. package/lib/renderers/Table-v2/index.d.ts +10 -4
  120. package/lib/renderers/Table-v2/index.js +109 -58
  121. package/lib/renderers/Table-v2/index.js.map +2 -2
  122. package/lib/renderers/Tabs.d.ts +6 -2
  123. package/lib/renderers/Tabs.js +21 -0
  124. package/lib/renderers/Tabs.js.map +2 -2
  125. package/lib/store/table-v2.d.ts +210 -4
  126. package/lib/store/table-v2.js +82 -5
  127. package/lib/store/table-v2.js.map +2 -2
  128. package/lib/themes/ang-ie11.css +140 -44
  129. package/lib/themes/ang.css +140 -33
  130. package/lib/themes/ang.css.map +1 -1
  131. package/lib/themes/antd-ie11.css +140 -44
  132. package/lib/themes/antd.css +140 -33
  133. package/lib/themes/antd.css.map +1 -1
  134. package/lib/themes/cxd-ie11.css +297 -197
  135. package/lib/themes/cxd.css +151 -38
  136. package/lib/themes/cxd.css.map +1 -1
  137. package/lib/themes/dark-ie11.css +140 -44
  138. package/lib/themes/dark.css +140 -33
  139. package/lib/themes/dark.css.map +1 -1
  140. package/lib/themes/default-ie11.css +297 -197
  141. package/lib/themes/default.css +151 -38
  142. package/lib/themes/default.css.map +1 -1
  143. package/lib/types.d.ts +1 -1
  144. package/lib/types.js.map +1 -1
  145. package/lib/utils/formula.js +7 -5
  146. package/lib/utils/formula.js.map +2 -2
  147. package/lib/utils/helper.d.ts +1 -0
  148. package/lib/utils/helper.js +11 -1
  149. package/lib/utils/helper.js.map +2 -2
  150. package/package.json +2 -2
  151. package/schema.json +103 -35
  152. package/scss/_properties.scss +11 -6
  153. package/scss/components/_formula.scss +45 -4
  154. package/scss/components/_modal.scss +1 -1
  155. package/scss/components/_result-box.scss +34 -2
  156. package/scss/components/form/_checks.scss +47 -44
  157. package/scss/components/form/_date.scss +28 -19
  158. package/scss/components/form/_icon-picker.scss +10 -6
  159. package/scss/components/form/_select.scss +77 -34
  160. package/scss/components/form/_selection.scss +9 -6
  161. package/scss/components/form/_switch.scss +1 -0
  162. package/scss/components/form/_text.scss +2 -0
  163. package/scss/components/form/_transfer.scss +2 -1
  164. package/scss/themes/_cxd-variables.scss +3 -1
  165. package/scss/themes/cxd.scss +9 -6
  166. package/sdk/ang-ie11.css +159 -46
  167. package/sdk/ang.css +159 -35
  168. package/sdk/antd-ie11.css +159 -46
  169. package/sdk/antd.css +159 -35
  170. package/sdk/barcode.js +51 -51
  171. package/sdk/charts.js +14 -14
  172. package/sdk/codemirror.js +7 -7
  173. package/sdk/color-picker.js +65 -65
  174. package/sdk/cropperjs.js +2 -2
  175. package/sdk/cxd-ie11.css +317 -199
  176. package/sdk/cxd.css +171 -40
  177. package/sdk/dark-ie11.css +159 -46
  178. package/sdk/dark.css +159 -35
  179. package/sdk/exceljs.js +1 -1
  180. package/sdk/locale/de-DE.js +2 -2
  181. package/sdk/markdown.js +69 -69
  182. package/sdk/papaparse.js +1 -1
  183. package/sdk/renderers/Form/CityDB.js +1 -1
  184. package/sdk/rest.js +16 -16
  185. package/sdk/rich-text.js +62 -62
  186. package/sdk/sdk-ie11.css +317 -199
  187. package/sdk/sdk.css +171 -40
  188. package/sdk/sdk.js +1353 -1351
  189. package/sdk/thirds/hls.js/hls.js +1 -1
  190. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  191. package/sdk/tinymce.js +57 -57
  192. package/src/components/Badge.tsx +1 -1
  193. package/src/components/GroupedSelection.tsx +3 -2
  194. package/src/components/PickerContainer.tsx +13 -8
  195. package/src/components/ResultBox.tsx +95 -11
  196. package/src/components/ResultList.tsx +48 -51
  197. package/src/components/ResultTableList.tsx +32 -33
  198. package/src/components/Select.tsx +138 -17
  199. package/src/components/Selection.tsx +1 -0
  200. package/src/components/TableSelection.tsx +15 -8
  201. package/src/components/TabsTransfer.tsx +2 -2
  202. package/src/components/TooltipWrapper.tsx +20 -14
  203. package/src/components/Transfer.tsx +0 -4
  204. package/src/components/TransferDropDown.tsx +9 -1
  205. package/src/components/TreeSelection.tsx +2 -1
  206. package/src/components/formula/Editor.tsx +17 -2
  207. package/src/components/formula/Picker.tsx +44 -7
  208. package/src/components/formula/VariableList.tsx +36 -2
  209. package/src/components/index.tsx +4 -0
  210. package/src/components/schema-editor/SchemaVariableList.tsx +4 -2
  211. package/src/components/schema-editor/SchemaVariableListPicker.tsx +4 -1
  212. package/src/components/table/HeadCellFilter.tsx +4 -1
  213. package/src/components/table/HeadCellSort.tsx +1 -1
  214. package/src/components/table/index.tsx +66 -90
  215. package/src/locale/de-DE.ts +2 -2
  216. package/src/locale/en-US.ts +2 -2
  217. package/src/locale/zh-CN.ts +1 -1
  218. package/src/renderers/Action.tsx +64 -19
  219. package/src/renderers/Breadcrumb.tsx +11 -12
  220. package/src/renderers/CRUD.tsx +2 -0
  221. package/src/renderers/Form/InputFormula.tsx +9 -2
  222. package/src/renderers/Form/InputImage.tsx +4 -2
  223. package/src/renderers/Form/InputTag.tsx +14 -0
  224. package/src/renderers/Form/InputTree.tsx +7 -0
  225. package/src/renderers/Form/Picker.tsx +11 -1
  226. package/src/renderers/Form/Select.tsx +32 -1
  227. package/src/renderers/Form/Transfer.tsx +6 -0
  228. package/src/renderers/Form/wrapControl.tsx +10 -10
  229. package/src/renderers/QRCode.tsx +50 -1
  230. package/src/renderers/Service.tsx +0 -1
  231. package/src/renderers/Steps.tsx +5 -5
  232. package/src/renderers/Table/exportExcel.ts +29 -12
  233. package/src/renderers/Table/index.tsx +9 -7
  234. package/src/renderers/Table-v2/HeadCellSearchDropdown.tsx +14 -9
  235. package/src/renderers/Table-v2/index.tsx +130 -58
  236. package/src/renderers/Tabs.tsx +33 -3
  237. package/src/store/table-v2.ts +104 -7
  238. package/src/types.ts +2 -1
  239. package/src/utils/formula.ts +7 -5
  240. package/src/utils/helper.ts +12 -2
@@ -6,6 +6,7 @@ import Tabs, {Tab} from '../Tabs';
6
6
  import TreeSelection from '../TreeSelection';
7
7
  import SearchBox from '../SearchBox';
8
8
  import {findTree} from '../../utils/helper';
9
+ import {Badge} from '../Badge';
9
10
 
10
11
  import type {VariableItem} from './Editor';
11
12
  import type {ItemRenderStates} from '../Selection';
@@ -20,7 +21,9 @@ export interface VariableListProps extends ThemeProps {
20
21
  selectMode?: 'list' | 'tree' | 'tabs';
21
22
  tabsMode?: TabsMode;
22
23
  itemRender?: (option: Option, states: ItemRenderStates) => JSX.Element;
24
+ placeholderRender?: (props: any) => JSX.Element | null;
23
25
  onSelect?: (item: VariableItem) => void;
26
+ selfVariableName?: string;
24
27
  }
25
28
 
26
29
  function VariableList(props: VariableListProps) {
@@ -32,7 +35,9 @@ function VariableList(props: VariableListProps) {
32
35
  classPrefix: themePrefix,
33
36
  itemClassName,
34
37
  selectMode,
35
- onSelect
38
+ onSelect,
39
+ placeholderRender,
40
+ selfVariableName
36
41
  } = props;
37
42
  const [filterVars, setFilterVars] = React.useState(list);
38
43
  const classPrefix = `${themePrefix}FormulaEditor-VariableList`;
@@ -42,7 +47,32 @@ function VariableList(props: VariableListProps) {
42
47
  : (option: Option, states: ItemRenderStates): JSX.Element => {
43
48
  return (
44
49
  <span className={cx(`${classPrefix}-item`, itemClassName)}>
45
- <label>{option.label}</label>
50
+ {
51
+ option.label && option.label === selfVariableName && (
52
+ <Badge
53
+ classnames={cx}
54
+ badge={{
55
+ mode: "text",
56
+ text: "self",
57
+ offset: [
58
+ 15,
59
+ 2
60
+ ]
61
+ }}
62
+ >
63
+ <label>
64
+ {option.label}
65
+ </label>
66
+ </Badge>
67
+ )
68
+ }
69
+ {
70
+ option.label && option.label !== selfVariableName && (
71
+ <label>
72
+ {option.label}
73
+ </label>
74
+ )
75
+ }
46
76
  {option?.tag ? (
47
77
  <span className={cx(`${classPrefix}-item-tag`)}>
48
78
  {option.tag}
@@ -90,9 +120,11 @@ function VariableList(props: VariableListProps) {
90
120
  classPrefix={`${classPrefix}-sub-`}
91
121
  className={cx(`${classPrefix}-sub`)}
92
122
  itemRender={itemRender}
123
+ placeholderRender={placeholderRender}
93
124
  selectMode={item.selectMode}
94
125
  data={item.children!}
95
126
  onSelect={onSelect}
127
+ selfVariableName={selfVariableName}
96
128
  />
97
129
  </Tab>
98
130
  ))}
@@ -102,6 +134,7 @@ function VariableList(props: VariableListProps) {
102
134
  {renderSearchBox()}
103
135
  <TreeSelection
104
136
  itemRender={itemRender}
137
+ placeholderRender={placeholderRender}
105
138
  className={cx(`${classPrefix}-base`, 'is-scrollable')}
106
139
  multiple={false}
107
140
  options={filterVars}
@@ -113,6 +146,7 @@ function VariableList(props: VariableListProps) {
113
146
  {renderSearchBox()}
114
147
  <GroupedSelection
115
148
  itemRender={itemRender}
149
+ placeholderRender={placeholderRender}
116
150
  className={cx(`${classPrefix}-base`, 'is-scrollable')}
117
151
  multiple={false}
118
152
  options={filterVars}
@@ -61,7 +61,9 @@ import PullRefresh from './PullRefresh';
61
61
  import Table from './table';
62
62
  import SchemaVariableListPicker from './schema-editor/SchemaVariableListPicker';
63
63
  import SchemaVariableList from './schema-editor/SchemaVariableList';
64
+ import VariableList from './formula/VariableList';
64
65
  import FormulaPicker from './formula/Picker';
66
+ import PickerContainer from './PickerContainer';
65
67
  import InputJSONSchema from './json-schema';
66
68
 
67
69
  export {
@@ -128,6 +130,8 @@ export {
128
130
  Table,
129
131
  SchemaVariableListPicker,
130
132
  SchemaVariableList,
133
+ VariableList,
134
+ PickerContainer,
131
135
  FormulaPicker,
132
136
  InputJSONSchema
133
137
  };
@@ -13,6 +13,7 @@ export interface SchemaVariableListProps extends LocaleProps, ThemeProps {
13
13
  value?: string;
14
14
  onSelect?: (value: string, schema: JSONSchema) => void;
15
15
  selectMode?: 'list' | 'tree' | 'tabs';
16
+ placeholderRender?: (props: any) => JSX.Element | null;
16
17
  beforeBuildVariables?: (dataSchema: DataSchema) => void;
17
18
  }
18
19
 
@@ -77,15 +78,16 @@ export class SchemaVariableList extends React.Component<
77
78
  }
78
79
 
79
80
  render() {
80
- const {selectMode} = this.props;
81
+ const {selectMode, value, placeholderRender} = this.props;
81
82
 
82
83
  return (
83
84
  <VariableList
84
85
  data={this.state.variables}
85
- value={this.props.value}
86
+ value={value}
86
87
  onSelect={this.handleSelect}
87
88
  selectMode={selectMode || 'tree'}
88
89
  itemRender={this.itemRender}
90
+ placeholderRender={placeholderRender}
89
91
  />
90
92
  );
91
93
  }
@@ -17,6 +17,7 @@ export interface SchemaVariableListPickerProps extends SchemaVariableListProps {
17
17
  onConfirm?: (value?: any) => void;
18
18
  onCancel?: () => void;
19
19
  onPickerOpen?: (props: any) => any;
20
+ placeholderRender?: (props: any) => JSX.Element | null;
20
21
  }
21
22
 
22
23
  export class SchemaVariableListPicker extends React.Component<SchemaVariableListPickerProps> {
@@ -31,7 +32,8 @@ export class SchemaVariableListPicker extends React.Component<SchemaVariableList
31
32
  title,
32
33
  selectMode,
33
34
  beforeBuildVariables,
34
- onPickerOpen
35
+ onPickerOpen,
36
+ placeholderRender
35
37
  } = this.props;
36
38
 
37
39
  return (
@@ -51,6 +53,7 @@ export class SchemaVariableListPicker extends React.Component<SchemaVariableList
51
53
  schemas={stateSchemas ?? schemas}
52
54
  selectMode={selectMode}
53
55
  beforeBuildVariables={beforeBuildVariables}
56
+ placeholderRender={placeholderRender}
54
57
  />
55
58
  ) : (
56
59
  <></>
@@ -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
  );
@@ -132,7 +132,7 @@ register('de-DE', {
132
132
  'File.retry': 'Wiederholen',
133
133
  'File.start': 'Hochladen beginnen',
134
134
  'File.upload': 'Hochladen',
135
- 'Image.upload':'Hochladen',
135
+ 'Image.upload': 'Hochladen',
136
136
  'File.uploadFailed': 'Zurückgegebene Daten der Upload-API sind leer',
137
137
  'File.uploading': 'Wird hochgeladen...',
138
138
  'FormItem.autoUpdateloadFaild': 'Die Schnittstelle hat einen Fehler zurückgegeben, bitte sorgfältig prüfen',
@@ -333,5 +333,5 @@ register('de-DE', {
333
333
  'JSONSchema.description': 'Description',
334
334
  'JSONSchema.key': 'Key',
335
335
  'JSONSchema.array_items': 'Items',
336
- 'TimeNow': 'Jetzt',
336
+ 'TimeNow': 'Jetzt'
337
337
  });
@@ -134,7 +134,7 @@ register('en-US', {
134
134
  'File.sizeLimit': 'The maximum file size is {{maxSize}} B',
135
135
  'File.start': 'Start upload',
136
136
  'File.upload': 'Upload',
137
- 'Image.upload':'Upload image',
137
+ 'Image.upload': 'Upload image',
138
138
  'File.uploadFailed': 'return data of udpload api is empty',
139
139
  'File.uploading': 'Uploading',
140
140
  'FormItem.autoUpdateloadFaild': 'return data of autoUpdate api is error',
@@ -336,5 +336,5 @@ register('en-US', {
336
336
  'JSONSchema.description': 'Description',
337
337
  'JSONSchema.key': 'Key',
338
338
  'JSONSchema.array_items': 'Items',
339
- 'TimeNow': 'Now',
339
+ 'TimeNow': 'Now'
340
340
  });
@@ -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': '编辑详情',
@@ -1,10 +1,15 @@
1
1
  import React from 'react';
2
2
  import hotkeys from 'hotkeys-js';
3
+ import omit from 'lodash/omit';
4
+ import pick from 'lodash/pick';
3
5
  import {Renderer, RendererProps} from '../factory';
4
6
  import {filter} from '../utils/tpl';
5
7
  import Button from '../components/Button';
6
- import pick from 'lodash/pick';
7
- import omit from 'lodash/omit';
8
+ import {ScopedContext} from '../Scoped';
9
+ import {isObject} from '../utils/helper';
10
+
11
+ import type {IScopedContext} from '../Scoped';
12
+ import type {Action as ICmptAction} from '../types';
8
13
 
9
14
  export interface ButtonSchema extends BaseSchema {
10
15
  /**
@@ -407,7 +412,8 @@ const ActionProps = [
407
412
  'copyFormat',
408
413
  'payload',
409
414
  'requireSelected',
410
- 'countDown'
415
+ 'countDown',
416
+ 'fileName'
411
417
  ];
412
418
  import {filterContents} from './Remark';
413
419
  import {ClassNamesFn, themeable, ThemeProps} from '../theme';
@@ -431,7 +437,6 @@ import {generateIcon} from '../utils/icon';
431
437
  import {BadgeSchema, withBadge} from '../components/Badge';
432
438
  import {normalizeApi, str2AsyncFunction} from '../utils/api';
433
439
  import {TooltipWrapper} from '../components/TooltipWrapper';
434
- import handleAction from '../utils/handleAction';
435
440
 
436
441
  // 构造一个假的 React 事件避免可能的报错,主要用于快捷键功能
437
442
  // 来自 https://stackoverflow.com/questions/27062455/reactjs-can-i-create-my-own-syntheticevent
@@ -851,28 +856,68 @@ export class Action extends React.Component<ActionProps, ActionState> {
851
856
 
852
857
  export default themeable(Action);
853
858
 
859
+ export type ActionRendererProps = RendererProps &
860
+ Omit<ActionProps, 'onAction' | 'isCurrentUrl' | 'tooltipContainer'> & {
861
+ onAction: (
862
+ e: React.MouseEvent<any> | string | void | null,
863
+ action: object,
864
+ data: any
865
+ ) => void;
866
+ btnDisabled?: boolean;
867
+ };
868
+
854
869
  @Renderer({
855
870
  type: 'action'
856
871
  })
857
872
  // @ts-ignore 类型没搞定
858
873
  @withBadge
859
- export class ActionRenderer extends React.Component<
860
- RendererProps &
861
- Omit<ActionProps, 'onAction' | 'isCurrentUrl' | 'tooltipContainer'> & {
862
- onAction: (
863
- e: React.MouseEvent<any> | void | null,
864
- action: object,
865
- data: any
866
- ) => void;
867
- btnDisabled?: boolean;
874
+ export class ActionRenderer extends React.Component<ActionRendererProps> {
875
+ static contextType = ScopedContext;
876
+
877
+ constructor(props: ActionRendererProps, scoped: IScopedContext) {
878
+ super(props);
879
+
880
+ scoped.registerComponent(this);
881
+ }
882
+
883
+ componentWillUnmount() {
884
+ const scoped = this.context as IScopedContext;
885
+ scoped.unRegisterComponent(this);
886
+ }
887
+
888
+ /**
889
+ * 动作处理
890
+ */
891
+ doAction(
892
+ action: ICmptAction,
893
+ args: {
894
+ value?: string | {[key: string]: string};
895
+ }
896
+ ) {
897
+ const actionType = action?.actionType;
898
+
899
+ if (actionType === 'click') {
900
+ this.handleAction(actionType, action);
868
901
  }
869
- > {
902
+ }
903
+
870
904
  @autobind
871
- async handleAction(e: React.MouseEvent<any> | void | null, action: any) {
905
+ async handleAction(
906
+ e: React.MouseEvent<any> | string | void | null,
907
+ action: any
908
+ ) {
872
909
  const {env, onAction, data, ignoreConfirm, dispatchEvent} = this.props;
910
+ let mergedData = data;
911
+
912
+ if (action?.actionType === 'click' && isObject(action?.args)) {
913
+ mergedData = createObject(data, action.args);
914
+ }
873
915
 
874
916
  // 触发渲染器事件
875
- const rendererEvent = await dispatchEvent(e as React.MouseEvent<any>, data);
917
+ const rendererEvent = await dispatchEvent(
918
+ e as React.MouseEvent<any> | string,
919
+ mergedData
920
+ );
876
921
 
877
922
  // 阻止原有动作执行
878
923
  if (rendererEvent?.prevented) {
@@ -880,14 +925,14 @@ export class ActionRenderer extends React.Component<
880
925
  }
881
926
 
882
927
  if (!ignoreConfirm && action.confirmText && env.confirm) {
883
- let confirmed = await env.confirm(filter(action.confirmText, data));
928
+ let confirmed = await env.confirm(filter(action.confirmText, mergedData));
884
929
  if (confirmed) {
885
- await onAction(e, action, data);
930
+ await onAction(e, action, mergedData);
886
931
  } else if (action.countDown) {
887
932
  throw new Error('cancel');
888
933
  }
889
934
  } else {
890
- await onAction(e, action, data);
935
+ await onAction(e, action, mergedData);
891
936
  }
892
937
  }
893
938