tntd 2.8.0-beta.19 → 2.8.0-beta.20

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 (75) hide show
  1. package/es/array-input/index.js +57 -42
  2. package/es/array-input/index.js.map +1 -1
  3. package/es/array-input/index.less +4 -1
  4. package/es/locale/en_US.js +3 -0
  5. package/es/locale/en_US.js.map +1 -1
  6. package/es/locale/zh_CN.js +3 -0
  7. package/es/locale/zh_CN.js.map +1 -1
  8. package/es/table/expand.less +49 -0
  9. package/es/table/hooks/index.js +2 -1
  10. package/es/table/hooks/index.js.map +1 -1
  11. package/es/table/hooks/use-expand-fixed.js +78 -0
  12. package/es/table/hooks/use-expand-fixed.js.map +1 -0
  13. package/es/table/index.js +1 -0
  14. package/es/table/index.js.map +1 -1
  15. package/es/table/table.js +40 -7
  16. package/es/table/table.js.map +1 -1
  17. package/es/table/utils.js +11 -0
  18. package/es/table/utils.js.map +1 -1
  19. package/lib/array-input/index.d.ts +1 -12
  20. package/lib/array-input/index.d.ts.map +1 -1
  21. package/lib/array-input/index.js +62 -55
  22. package/lib/array-input/index.js.map +1 -1
  23. package/lib/array-input/index.less +4 -1
  24. package/lib/locale/default.d.ts +3 -0
  25. package/lib/locale/default.d.ts.map +1 -1
  26. package/lib/locale/en_US.d.ts +3 -0
  27. package/lib/locale/en_US.d.ts.map +1 -1
  28. package/lib/locale/en_US.js +3 -0
  29. package/lib/locale/en_US.js.map +1 -1
  30. package/lib/locale/zh_CN.d.ts +3 -0
  31. package/lib/locale/zh_CN.d.ts.map +1 -1
  32. package/lib/locale/zh_CN.js +3 -0
  33. package/lib/locale/zh_CN.js.map +1 -1
  34. package/lib/table/expand.less +49 -0
  35. package/lib/table/hooks/index.d.ts +1 -0
  36. package/lib/table/hooks/index.d.ts.map +1 -1
  37. package/lib/table/hooks/index.js +11 -0
  38. package/lib/table/hooks/index.js.map +1 -1
  39. package/lib/table/hooks/use-expand-fixed.d.ts +4 -0
  40. package/lib/table/hooks/use-expand-fixed.d.ts.map +1 -0
  41. package/lib/table/hooks/use-expand-fixed.js +108 -0
  42. package/lib/table/hooks/use-expand-fixed.js.map +1 -0
  43. package/lib/table/index.d.ts +1 -0
  44. package/lib/table/index.d.ts.map +1 -1
  45. package/lib/table/index.js +1 -0
  46. package/lib/table/index.js.map +1 -1
  47. package/lib/table/table.d.ts +2 -1
  48. package/lib/table/table.d.ts.map +1 -1
  49. package/lib/table/table.js +42 -4
  50. package/lib/table/table.js.map +1 -1
  51. package/lib/table/utils.d.ts +1 -0
  52. package/lib/table/utils.d.ts.map +1 -1
  53. package/lib/table/utils.js +13 -0
  54. package/lib/table/utils.js.map +1 -1
  55. package/package.json +5 -4
  56. package/es/array-input/icon.js +0 -25
  57. package/es/array-input/icon.js.map +0 -1
  58. package/es/drawer/drawer.less +0 -20
  59. package/es/table/style_/index.js +0 -10
  60. package/es/table/style_/index.js.map +0 -1
  61. package/es/table/style_antd/index.js +0 -10
  62. package/es/table/style_antd/index.js.map +0 -1
  63. package/lib/array-input/icon.d.ts +0 -4
  64. package/lib/array-input/icon.d.ts.map +0 -1
  65. package/lib/array-input/icon.js +0 -32
  66. package/lib/array-input/icon.js.map +0 -1
  67. package/lib/drawer/drawer.less +0 -20
  68. package/lib/table/style_/index.d.ts +0 -9
  69. package/lib/table/style_/index.d.ts.map +0 -1
  70. package/lib/table/style_/index.js +0 -10
  71. package/lib/table/style_/index.js.map +0 -1
  72. package/lib/table/style_antd/index.d.ts +0 -9
  73. package/lib/table/style_antd/index.d.ts.map +0 -1
  74. package/lib/table/style_antd/index.js +0 -10
  75. package/lib/table/style_antd/index.js.map +0 -1
@@ -13,17 +13,19 @@ var __rest = this && this.__rest || function (s, e) {
13
13
  return t;
14
14
  };
15
15
  import React, { isValidElement, useCallback, useEffect, useState } from 'react';
16
- import { deleteIcon, plusIcon } from './icon';
16
+ import LocaleReceiver from 'antd/es/locale-provider/LocaleReceiver';
17
17
  import Col from '../col';
18
18
  import Row from '../row';
19
19
  import Table from '../table';
20
20
  import Tooltip from '../tooltip';
21
+ import Icon from '../icon';
22
+ import Button from '../button';
21
23
  import './index.less';
22
24
  const {
23
25
  Column
24
26
  } = Table;
25
27
  const getWidth = span => 1000 / span;
26
- export default function ArrayInput({
28
+ function ArrayInput({
27
29
  children,
28
30
  defaultValue,
29
31
  value,
@@ -33,11 +35,17 @@ export default function ArrayInput({
33
35
  require = false,
34
36
  deleteTip = '',
35
37
  plusTip = '',
36
- addText = '添加'
38
+ addText,
39
+ locale,
40
+ xProps = {},
41
+ renderAction
37
42
  }) {
38
43
  if (!_isFunction(children)) {
39
44
  throw new Error('ArrayInput的children必须是函数');
40
45
  }
46
+ if (addText === undefined) {
47
+ addText = locale === null || locale === void 0 ? void 0 : locale.add;
48
+ }
41
49
  const [_value, setValue] = useState(value || defaultValue);
42
50
  useEffect(() => {
43
51
  setValue(value);
@@ -79,6 +87,7 @@ export default function ArrayInput({
79
87
  if (!_isArray(fields)) {
80
88
  fields = _get(fields, 'props.children', []);
81
89
  }
90
+ const actionSpan = 24 - _sum(fields.map(f => _get(f, 'props.span', 4))) % 24;
82
91
  return React.createElement(Row, {
83
92
  gutter: gutter,
84
93
  key: index,
@@ -109,29 +118,26 @@ export default function ArrayInput({
109
118
  }
110
119
  }, other)));
111
120
  }), React.createElement(Col, {
112
- span: 24 - _sum(fields.map(f => _get(f, 'props.span', 4))) % 24
121
+ span: actionSpan
113
122
  }, React.createElement("span", {
114
123
  className: "tntd-array-input-action"
115
- }, plusTip ? React.createElement(Tooltip, {
116
- title: plusTip,
117
- placement: "left"
118
- }, React.createElement("span", {
119
- className: "mr10",
120
- onClick: () => onAdd(index)
121
- }, plusIcon)) : React.createElement("span", {
122
- className: "mr10",
123
- onClick: () => onAdd(index)
124
- }, plusIcon), deleteTip ? React.createElement(Tooltip, {
125
- title: deleteTip,
126
- placement: "right"
124
+ }, renderAction ? renderAction(item, index, onDelete, onAdd) : React.createElement(React.Fragment, null, deleteTip ? React.createElement(Tooltip, {
125
+ title: deleteTip
127
126
  }, React.createElement("span", {
128
127
  onClick: () => onDelete(index)
129
- }, deleteIcon)) : React.createElement("span", {
128
+ }, React.createElement(Icon, {
129
+ type: "delete"
130
+ }))) : React.createElement("span", {
130
131
  onClick: () => onDelete(index)
131
- }, deleteIcon))));
132
- }), inValue.length === 0 && React.createElement("a", {
132
+ }, React.createElement(Icon, {
133
+ type: "delete"
134
+ }))))));
135
+ }), React.createElement(Button, {
136
+ type: "link",
133
137
  onClick: () => onAdd()
134
- }, addText));
138
+ }, React.createElement(Icon, {
139
+ type: "plus"
140
+ }), addText));
135
141
  } else {
136
142
  let fields = children({}, 0);
137
143
  if (!_isArray(fields)) {
@@ -149,15 +155,11 @@ export default function ArrayInput({
149
155
  });
150
156
  return React.createElement("div", {
151
157
  className: "tntd-array-input"
152
- }, React.createElement(Table, {
158
+ }, React.createElement(Table, Object.assign({
153
159
  dataSource: dataSource,
154
160
  pagination: false,
155
- locale: {
156
- emptyText: React.createElement("a", {
157
- onClick: () => onAdd()
158
- }, addText)
159
- }
160
- }, fields.map(field => {
161
+ bordered: true
162
+ }, xProps), fields.map(field => {
161
163
  const {
162
164
  name,
163
165
  span,
@@ -191,26 +193,39 @@ export default function ArrayInput({
191
193
  title: "\u64CD\u4F5C",
192
194
  width: getWidth(24 - _sumBy(fields, 'props.span') % 24),
193
195
  render: (text, row, index) => {
196
+ if (renderAction) {
197
+ return renderAction(row, index, onDelete, onAdd);
198
+ }
194
199
  return React.createElement("span", {
195
200
  className: "tntd-array-input-action"
196
- }, plusTip ? React.createElement(Tooltip, {
197
- title: plusTip,
198
- placement: "left"
199
- }, React.createElement("span", {
200
- className: "mr10",
201
- onClick: () => onAdd(index)
202
- }, plusIcon)) : React.createElement("span", {
203
- className: "mr10",
204
- onClick: () => onAdd(index)
205
- }, plusIcon), deleteTip ? React.createElement(Tooltip, {
206
- title: deleteTip,
207
- placement: "right"
201
+ }, deleteTip ? React.createElement(Tooltip, {
202
+ title: deleteTip
208
203
  }, React.createElement("span", {
209
204
  onClick: () => onDelete(index)
210
- }, deleteIcon)) : React.createElement("span", {
205
+ }, React.createElement(Icon, {
206
+ type: "delete"
207
+ }))) : React.createElement("span", {
211
208
  onClick: () => onDelete(index)
212
- }, deleteIcon));
209
+ }, React.createElement(Icon, {
210
+ type: "delete"
211
+ })));
213
212
  }
214
- })));
213
+ })), React.createElement(Button, {
214
+ type: "dashed",
215
+ block: true,
216
+ className: "mt10",
217
+ onClick: () => onAdd()
218
+ }, React.createElement(Icon, {
219
+ type: "plus"
220
+ }), addText));
215
221
  }
222
+ }
223
+ export default function WarpArrayInput(props) {
224
+ return React.createElement(LocaleReceiver, {
225
+ componentName: "ArrayInput"
226
+ }, locale => {
227
+ return React.createElement(ArrayInput, Object.assign({}, props, {
228
+ locale: locale
229
+ }));
230
+ });
216
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/array-input/index.js"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAClE,OAAO,KAAK,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,OAAO,MAAM,YAAY,CAAA;AAEhC,OAAO,cAAc,CAAA;AAErB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;AACxB,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAA;AAEtC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,IAAI,GAAG,MAAM,EACb,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,EAAE,EACd,OAAO,GAAG,EAAE,EACZ,OAAO,GAAG,IAAI,GACf;IACC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;IAED,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,CAAA;IAE1D,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,KAAK,CAAC,CAAA;SAChB;aAAM;YACL,QAAQ,CAAC,KAAK,CAAC,CAAA;SAChB;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,OAAO,GAAG,MAAM,IAAI,EAAE,CAAA;IAC1B,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACnC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAA;KACf;IAED,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,mCACT,OAAO,CAAC,KAAK,CAAC,KACjB,CAAC,IAAI,CAAC,EAAE,KAAK,GACd,CAAA;QACD,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE;QACtB,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;SAC5B;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAChC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;SACxB;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE;QACrB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpB,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,CACL,6BAAK,SAAS,EAAC,kBAAkB;YAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC3B,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBACpB,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAA;iBAC3C;gBACD,OAAO,CACL,oBAAC,GAAG,IAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,uBAAuB;oBAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;wBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;4BAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,oBAAC,GAAG,IAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IACjB,KAAK,CACF,CACP,CAAC,CAAC,CAAC,CACF,EAAE,CACH,CAAA;yBACF;wBACD,MAAM,KAAsD,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAlE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,WAAW,OAA2B,EAAtB,KAAK,cAAjD,4BAAmD,CAAe,CAAA;wBACxE,OAAO,CACL,oBAAC,GAAG,IAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IACpB,KAAK,CAAC,YAAY,CAAC,KAAK,kBACvB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACd,WAAW,IAAI,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;gCACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gCAC9C,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;4BACpC,CAAC,IACE,KAAK,EACR,CACE,CACP,CAAA;oBACH,CAAC,CAAC;oBACF,oBAAC,GAAG,IAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACpE,8BAAM,SAAS,EAAC,yBAAyB;4BACtC,OAAO,CAAC,CAAC,CAAC,CACT,oBAAC,OAAO,IAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAC,MAAM;gCACvC,8BAAM,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAC/C,QAAQ,CACJ,CACC,CACX,CAAC,CAAC,CAAC,CACF,8BAAM,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAC/C,QAAQ,CACJ,CACR;4BACA,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,OAAO,IAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,OAAO;gCAC1C,8BAAM,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAG,UAAU,CAAQ,CACjD,CACX,CAAC,CAAC,CAAC,CACF,8BAAM,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAG,UAAU,CAAQ,CAC1D,CACI,CACH,CACF,CACP,CAAA;YACH,CAAC,CAAC;YACD,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,2BAAG,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,IAAG,OAAO,CAAK,CAC7D,CACP,CAAA;KACF;SAAM;QACL,IAAI,MAAM,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACpB,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAA;SAC3C;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,EAAE,CAAA;YACf,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;gBACvB,MAAM,IAAI,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,IAAI,CAAA;gBAC/B,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QACF,OAAO,CACL,6BAAK,SAAS,EAAC,kBAAkB;YAC/B,oBAAC,KAAK,IACJ,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,KAAK,EACjB,MAAM,EAAE;oBACN,SAAS,EAAE,2BAAG,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,IAAG,OAAO,CAAK;iBACpD;gBAEA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACpB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,KAAI,EAAE,CAAA;oBAChD,OAAO,CACL,oBAAC,MAAM,IACL,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACjD,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;4BAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gCAC1B,OAAO,KAAK,CAAA;6BACb;4BACD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAA;4BAC7C,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;gCAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS;gCACxC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oCACd,WAAW,IAAI,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;oCACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;oCAC9C,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;gCACpC,CAAC;6BACF,CAAC,CAAA;wBACJ,CAAC,GACO,CACX,CAAA;gBACH,CAAC,CAAC;gBACF,oBAAC,MAAM,IACL,GAAG,EAAC,QAAQ,EACZ,SAAS,EAAC,QAAQ,EAClB,KAAK,EAAC,cAAI,EACV,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,EACxD,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;wBAC3B,OAAO,CACL,8BAAM,SAAS,EAAC,yBAAyB;4BACtC,OAAO,CAAC,CAAC,CAAC,CACT,oBAAC,OAAO,IAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAC,MAAM;gCACvC,8BAAM,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAC/C,QAAQ,CACJ,CACC,CACX,CAAC,CAAC,CAAC,CACF,8BAAM,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAC/C,QAAQ,CACJ,CACR;4BACA,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,OAAO,IAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,OAAO;gCAC1C,8BAAM,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAG,UAAU,CAAQ,CACjD,CACX,CAAC,CAAC,CAAC,CACF,8BAAM,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAG,UAAU,CAAQ,CAC1D,CACI,CACR,CAAA;oBACH,CAAC,GACO,CACJ,CACJ,CACP,CAAA;KACF;AACH,CAAC","sourcesContent":["import { get, isArray, isFunction, set, sum, sumBy } from 'lodash'\nimport React, { isValidElement, useCallback, useEffect, useState } from 'react'\nimport { deleteIcon, plusIcon } from './icon'\n\nimport Col from '../col'\nimport Row from '../row'\nimport Table from '../table'\nimport Tooltip from '../tooltip'\n\nimport './index.less'\n\nconst { Column } = Table\nconst getWidth = (span) => 1000 / span\n\nexport default function ArrayInput({\n children,\n defaultValue,\n value,\n onChange,\n mode = 'list',\n gutter = 10,\n require = false,\n deleteTip = '',\n plusTip = '',\n addText = '添加',\n}) {\n if (!isFunction(children)) {\n throw new Error('ArrayInput的children必须是函数')\n }\n\n const [_value, setValue] = useState(value || defaultValue)\n\n useEffect(() => {\n setValue(value)\n }, [value])\n\n const _onChange = useCallback((value) => {\n if (onChange) {\n onChange(value)\n } else {\n setValue(value)\n }\n }, [])\n\n let inValue = _value || []\n if (require && inValue.length === 0) {\n inValue = [{}]\n }\n\n const changeValue = (index, name, value) => {\n inValue[index] = {\n ...inValue[index],\n [name]: value,\n }\n _onChange([...inValue])\n }\n\n const onAdd = (index) => {\n if (index === undefined) {\n _onChange([...inValue, {}])\n } else {\n inValue.splice(index + 1, 0, {})\n _onChange([...inValue])\n }\n }\n\n const onDelete = (i) => {\n inValue.splice(i, 1)\n _onChange([...inValue])\n }\n\n if (mode === 'list') {\n return (\n <div className=\"tntd-array-input\">\n {inValue.map((item, index) => {\n let fields = children(item, index)\n if (!isArray(fields)) {\n fields = get(fields, 'props.children', [])\n }\n return (\n <Row gutter={gutter} key={index} className=\"tntd-array-input-item\">\n {fields.map((field, i) => {\n if (!isValidElement(field)) {\n return field ? (\n <Col span={4} key={i}>\n {field}\n </Col>\n ) : (\n ''\n )\n }\n const { name, span = 4, onChange: fieldChange, ...other } = field?.props\n return (\n <Col span={span} key={i}>\n {React.cloneElement(field, {\n value: item[name] || undefined,\n onChange: (e) => {\n fieldChange && fieldChange(e, index, changeValue)\n const newValue = e.target ? e.target.value : e\n changeValue(index, name, newValue)\n },\n ...other,\n })}\n </Col>\n )\n })}\n <Col span={24 - (sum(fields.map((f) => get(f, 'props.span', 4))) % 24)}>\n <span className=\"tntd-array-input-action\">\n {plusTip ? (\n <Tooltip title={plusTip} placement=\"left\">\n <span className=\"mr10\" onClick={() => onAdd(index)}>\n {plusIcon}\n </span>\n </Tooltip>\n ) : (\n <span className=\"mr10\" onClick={() => onAdd(index)}>\n {plusIcon}\n </span>\n )}\n {deleteTip ? (\n <Tooltip title={deleteTip} placement=\"right\">\n <span onClick={() => onDelete(index)}>{deleteIcon}</span>\n </Tooltip>\n ) : (\n <span onClick={() => onDelete(index)}>{deleteIcon}</span>\n )}\n </span>\n </Col>\n </Row>\n )\n })}\n {inValue.length === 0 && <a onClick={() => onAdd()}>{addText}</a>}\n </div>\n )\n } else {\n let fields = children({}, 0)\n if (!isArray(fields)) {\n fields = get(fields, 'props.children', [])\n }\n const dataSource = inValue.map((value, index) => {\n const fields = children(value, index)\n const back = {}\n fields.forEach((field) => {\n const name = field?.props?.name\n name && set(back, name, field)\n })\n return back\n })\n return (\n <div className=\"tntd-array-input\">\n <Table\n dataSource={dataSource}\n pagination={false}\n locale={{\n emptyText: <a onClick={() => onAdd()}>{addText}</a>,\n }}\n >\n {fields.map((field) => {\n const { name, span, title } = field?.props || {}\n return (\n <Column\n key={name}\n dataIndex={name}\n title={title}\n width={getWidth(span || 24 / (fields.length + 1))}\n render={(field, row, index) => {\n if (!isValidElement(field)) {\n return field\n }\n const { onChange: fieldChange } = field.props\n return React.cloneElement(field, {\n value: inValue[index][name] || undefined,\n onChange: (e) => {\n fieldChange && fieldChange(e, index, changeValue)\n const newValue = e.target ? e.target.value : e\n changeValue(index, name, newValue)\n },\n })\n }}\n ></Column>\n )\n })}\n <Column\n key=\"action\"\n dataIndex=\"action\"\n title=\"操作\"\n width={getWidth(24 - (sumBy(fields, 'props.span') % 24))}\n render={(text, row, index) => {\n return (\n <span className=\"tntd-array-input-action\">\n {plusTip ? (\n <Tooltip title={plusTip} placement=\"left\">\n <span className=\"mr10\" onClick={() => onAdd(index)}>\n {plusIcon}\n </span>\n </Tooltip>\n ) : (\n <span className=\"mr10\" onClick={() => onAdd(index)}>\n {plusIcon}\n </span>\n )}\n {deleteTip ? (\n <Tooltip title={deleteTip} placement=\"right\">\n <span onClick={() => onDelete(index)}>{deleteIcon}</span>\n </Tooltip>\n ) : (\n <span onClick={() => onDelete(index)}>{deleteIcon}</span>\n )}\n </span>\n )\n }}\n ></Column>\n </Table>\n </div>\n )\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/array-input/index.js"],"names":[],"mappings":"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","sourcesContent":["import { get, isArray, isFunction, set, sum, sumBy } from 'lodash'\nimport React, { isValidElement, useCallback, useEffect, useState } from 'react'\nimport LocaleReceiver from 'antd/es/locale-provider/LocaleReceiver'\nimport Col from '../col'\nimport Row from '../row'\nimport Table from '../table'\nimport Tooltip from '../tooltip'\nimport Icon from '../icon'\nimport Button from '../button'\n\nimport './index.less'\n\nconst { Column } = Table\nconst getWidth = (span) => 1000 / span\n\nfunction ArrayInput({\n children,\n defaultValue,\n value,\n onChange,\n mode = 'list',\n gutter = 10,\n require = false,\n deleteTip = '',\n plusTip = '',\n addText,\n locale,\n xProps = {},\n renderAction,\n}) {\n if (!isFunction(children)) {\n throw new Error('ArrayInput的children必须是函数')\n }\n if (addText === undefined) {\n addText = locale?.add\n }\n\n const [_value, setValue] = useState(value || defaultValue)\n\n useEffect(() => {\n setValue(value)\n }, [value])\n\n const _onChange = useCallback((value) => {\n if (onChange) {\n onChange(value)\n } else {\n setValue(value)\n }\n }, [])\n\n let inValue = _value || []\n if (require && inValue.length === 0) {\n inValue = [{}]\n }\n\n const changeValue = (index, name, value) => {\n inValue[index] = {\n ...inValue[index],\n [name]: value,\n }\n _onChange([...inValue])\n }\n\n const onAdd = (index) => {\n if (index === undefined) {\n _onChange([...inValue, {}])\n } else {\n inValue.splice(index + 1, 0, {})\n _onChange([...inValue])\n }\n }\n\n const onDelete = (i) => {\n inValue.splice(i, 1)\n _onChange([...inValue])\n }\n\n if (mode === 'list') {\n return (\n <div className=\"tntd-array-input\">\n {inValue.map((item, index) => {\n let fields = children(item, index)\n if (!isArray(fields)) {\n fields = get(fields, 'props.children', [])\n }\n const actionSpan = 24 - (sum(fields.map((f) => get(f, 'props.span', 4))) % 24)\n return (\n <Row gutter={gutter} key={index} className=\"tntd-array-input-item\">\n {fields.map((field, i) => {\n if (!isValidElement(field)) {\n return field ? (\n <Col span={4} key={i}>\n {field}\n </Col>\n ) : (\n ''\n )\n }\n const { name, span = 4, onChange: fieldChange, ...other } = field?.props\n return (\n <Col span={span} key={i}>\n {React.cloneElement(field, {\n value: item[name] || undefined,\n onChange: (e) => {\n fieldChange && fieldChange(e, index, changeValue)\n const newValue = e.target ? e.target.value : e\n changeValue(index, name, newValue)\n },\n ...other,\n })}\n </Col>\n )\n })}\n <Col span={actionSpan}>\n <span className=\"tntd-array-input-action\">\n {renderAction ? (\n renderAction(item, index, onDelete, onAdd)\n ) : (\n <>\n {deleteTip ? (\n <Tooltip title={deleteTip}>\n <span onClick={() => onDelete(index)}>\n <Icon type=\"delete\" />\n </span>\n </Tooltip>\n ) : (\n <span onClick={() => onDelete(index)}>\n <Icon type=\"delete\" />\n </span>\n )}\n </>\n )}\n </span>\n </Col>\n </Row>\n )\n })}\n <Button type=\"link\" onClick={() => onAdd()}>\n <Icon type=\"plus\" />\n {addText}\n </Button>\n </div>\n )\n } else {\n let fields = children({}, 0)\n if (!isArray(fields)) {\n fields = get(fields, 'props.children', [])\n }\n const dataSource = inValue.map((value, index) => {\n const fields = children(value, index)\n const back = {}\n fields.forEach((field) => {\n const name = field?.props?.name\n name && set(back, name, field)\n })\n return back\n })\n return (\n <div className=\"tntd-array-input\">\n <Table dataSource={dataSource} pagination={false} bordered {...xProps}>\n {fields.map((field) => {\n const { name, span, title } = field?.props || {}\n return (\n <Column\n key={name}\n dataIndex={name}\n title={title}\n width={getWidth(span || 24 / (fields.length + 1))}\n render={(field, row, index) => {\n if (!isValidElement(field)) {\n return field\n }\n const { onChange: fieldChange } = field.props\n return React.cloneElement(field, {\n value: inValue[index][name] || undefined,\n onChange: (e) => {\n fieldChange && fieldChange(e, index, changeValue)\n const newValue = e.target ? e.target.value : e\n changeValue(index, name, newValue)\n },\n })\n }}\n ></Column>\n )\n })}\n <Column\n key=\"action\"\n dataIndex=\"action\"\n title=\"操作\"\n width={getWidth(24 - (sumBy(fields, 'props.span') % 24))}\n render={(text, row, index) => {\n if (renderAction) {\n return renderAction(row, index, onDelete, onAdd)\n }\n return (\n <span className=\"tntd-array-input-action\">\n {deleteTip ? (\n <Tooltip title={deleteTip}>\n <span onClick={() => onDelete(index)}>\n <Icon type=\"delete\" />\n </span>\n </Tooltip>\n ) : (\n <span onClick={() => onDelete(index)}>\n <Icon type=\"delete\" />\n </span>\n )}\n </span>\n )\n }}\n ></Column>\n </Table>\n <Button type=\"dashed\" block className=\"mt10\" onClick={() => onAdd()}>\n <Icon type=\"plus\" />\n {addText}\n </Button>\n </div>\n )\n }\n}\n\nexport default function WarpArrayInput(props) {\n return (\n <LocaleReceiver componentName=\"ArrayInput\">\n {(locale) => {\n return <ArrayInput {...props} locale={locale} />\n }}\n </LocaleReceiver>\n )\n}\n"]}
@@ -11,8 +11,11 @@
11
11
  .mr10 {
12
12
  margin-right: 10px;
13
13
  }
14
+ .mt10 {
15
+ margin-top: 10px;
16
+ }
14
17
  &-action {
15
- line-height: 28px;
18
+ line-height: @btn-height-base;
16
19
  > span {
17
20
  cursor: pointer;
18
21
  }
@@ -54,6 +54,9 @@ const en_US = _merge(sourceLocale, {
54
54
  Drawer: {
55
55
  okText: 'Submit',
56
56
  cancelText: 'Cancel'
57
+ },
58
+ ArrayInput: {
59
+ add: 'Add'
57
60
  }
58
61
  });
59
62
  export default en_US;
@@ -1 +1 @@
1
- {"version":3,"file":"en_US.js","sourceRoot":"","sources":["../../src/locale/en_US.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,yCAAyC;AACzC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE;IAChC,KAAK,EAAE;QACL,kBAAkB,EAAE,YAAY;QAChC,gBAAgB,EAAE,SAAS;QAC3B,KAAK,EAAE,4BAA4B;KACpC;IACD,KAAK,EAAE;QACL,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,eAAe;QAC7B,mBAAmB,EAAE,sBAAsB;QAC3C,cAAc,EAAE,iBAAiB;QACjC,SAAS,EAAE,uBAAuB;QAClC,MAAM,EAAE,SAAS;KAClB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,UAAU,EAAE,aAAa;YACzB,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,aAAa;SAC1B;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;KACb;IACD,SAAS,EAAE;QACT,KAAK,EAAE,0CAA0C;QACjD,KAAK,EAAE,0CAA0C;QACjD,KAAK,EAAE,yCAAyC;KACjD;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,SAAS;KAClB;IACD,UAAU,EAAE;QACV,MAAM,EAAE,SAAS;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,YAAY;KACnB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;KACb;IACD,WAAW,EAAE,EAAE;IACf,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,QAAQ;KACrB;CACF,CAAC,CAAA;AAEF,eAAe,KAAK,CAAA","sourcesContent":["/*\n * @Author: 周泽飞 zefei.zhou@tongdun.net\n * @Date: 2023-11-01 17:14:46\n * @LastEditors: 周泽飞 zefei.zhou@tongdun.net\n * @LastEditTime: 2023-11-03 17:02:30\n * @FilePath: /tntd/packages/tntd/src/locale/en_US.ts\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n */\nimport sourceLocale from 'antd/es/locale/en_US'\n\nimport { merge } from 'lodash'\n\n// 覆盖原始的语言包,以便在使用 LocalReceiver 时获取正确的语言包\nconst en_US = merge(sourceLocale, {\n Table: {\n loadingDescription: 'loading...',\n emptyDescription: 'No data',\n total: 'Totally ${total} Record(s)',\n },\n Empty: {\n noGraphData: 'No data',\n noPermission: 'No permission',\n createdSuccessfully: 'Created successfully',\n creationFailed: 'Creation failed',\n noNetwork: 'Network not connected',\n noData: 'No data',\n },\n Calendar: {\n lang: {\n timeSelect: 'Select time',\n ok: 'OK',\n dateSelect: 'Select date',\n },\n },\n Handle: {\n more: 'More',\n },\n Exception: {\n '403': \"Sorry, we don't have access to this page\",\n '404': 'Sorry, there are no results on this page',\n '500': \"I'm sorry, the server reported an error\",\n },\n TntdCascader: {\n noData: 'No data',\n },\n TntdSelect: {\n noData: 'No data',\n },\n PageLoading: {\n text: 'loading...',\n },\n TntdSecondPage: {\n back: 'Back',\n },\n ColorPicker: {},\n Drawer: {\n okText: 'Submit',\n cancelText: 'Cancel',\n },\n})\n\nexport default en_US\n"]}
1
+ {"version":3,"file":"en_US.js","sourceRoot":"","sources":["../../src/locale/en_US.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,yCAAyC;AACzC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE;IAChC,KAAK,EAAE;QACL,kBAAkB,EAAE,YAAY;QAChC,gBAAgB,EAAE,SAAS;QAC3B,KAAK,EAAE,4BAA4B;KACpC;IACD,KAAK,EAAE;QACL,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,eAAe;QAC7B,mBAAmB,EAAE,sBAAsB;QAC3C,cAAc,EAAE,iBAAiB;QACjC,SAAS,EAAE,uBAAuB;QAClC,MAAM,EAAE,SAAS;KAClB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,UAAU,EAAE,aAAa;YACzB,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,aAAa;SAC1B;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;KACb;IACD,SAAS,EAAE;QACT,KAAK,EAAE,0CAA0C;QACjD,KAAK,EAAE,0CAA0C;QACjD,KAAK,EAAE,yCAAyC;KACjD;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,SAAS;KAClB;IACD,UAAU,EAAE;QACV,MAAM,EAAE,SAAS;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,YAAY;KACnB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;KACb;IACD,WAAW,EAAE,EAAE;IACf,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,QAAQ;KACrB;IACD,UAAU,EAAE;QACV,GAAG,EAAE,KAAK;KACX;CACF,CAAC,CAAA;AAEF,eAAe,KAAK,CAAA","sourcesContent":["/*\n * @Author: 周泽飞 zefei.zhou@tongdun.net\n * @Date: 2023-11-01 17:14:46\n * @LastEditors: 周泽飞 zefei.zhou@tongdun.net\n * @LastEditTime: 2023-11-03 17:02:30\n * @FilePath: /tntd/packages/tntd/src/locale/en_US.ts\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n */\nimport sourceLocale from 'antd/es/locale/en_US'\n\nimport { merge } from 'lodash'\n\n// 覆盖原始的语言包,以便在使用 LocalReceiver 时获取正确的语言包\nconst en_US = merge(sourceLocale, {\n Table: {\n loadingDescription: 'loading...',\n emptyDescription: 'No data',\n total: 'Totally ${total} Record(s)',\n },\n Empty: {\n noGraphData: 'No data',\n noPermission: 'No permission',\n createdSuccessfully: 'Created successfully',\n creationFailed: 'Creation failed',\n noNetwork: 'Network not connected',\n noData: 'No data',\n },\n Calendar: {\n lang: {\n timeSelect: 'Select time',\n ok: 'OK',\n dateSelect: 'Select date',\n },\n },\n Handle: {\n more: 'More',\n },\n Exception: {\n '403': \"Sorry, we don't have access to this page\",\n '404': 'Sorry, there are no results on this page',\n '500': \"I'm sorry, the server reported an error\",\n },\n TntdCascader: {\n noData: 'No data',\n },\n TntdSelect: {\n noData: 'No data',\n },\n PageLoading: {\n text: 'loading...',\n },\n TntdSecondPage: {\n back: 'Back',\n },\n ColorPicker: {},\n Drawer: {\n okText: 'Submit',\n cancelText: 'Cancel',\n },\n ArrayInput: {\n add: 'Add',\n },\n})\n\nexport default en_US\n"]}
@@ -39,6 +39,9 @@ const zh_CN = _merge(sourceLocale, {
39
39
  Drawer: {
40
40
  okText: '确定',
41
41
  cancelText: '取消'
42
+ },
43
+ ArrayInput: {
44
+ add: '添加'
42
45
  }
43
46
  });
44
47
  export default zh_CN;
@@ -1 +1 @@
1
- {"version":3,"file":"zh_CN.js","sourceRoot":"","sources":["../../src/locale/zh_CN.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,yCAAyC;AACzC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE;IAChC,KAAK,EAAE;QACL,kBAAkB,EAAE,UAAU;QAC9B,gBAAgB,EAAE,MAAM;QACxB,KAAK,EAAE,gBAAgB;KACxB;IACD,KAAK,EAAE;QACL,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM;QACpB,mBAAmB,EAAE,MAAM;QAC3B,cAAc,EAAE,MAAM;QACtB,SAAS,EAAE,OAAO;QAClB,MAAM,EAAE,MAAM;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;KACX;IACD,SAAS,EAAE;QACT,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,WAAW;KACnB;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM;KACf;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;KACf;IACD,UAAU,EAAE;QACV,MAAM,EAAE,MAAM;KACf;IACD,cAAc,EAAE;QACd,IAAI,EAAE,IAAI;KACX;IACD,WAAW,EAAE,EAAE;IACf,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;KACjB;CACF,CAAC,CAAA;AAEF,eAAe,KAAK,CAAA","sourcesContent":["import sourceLocale from 'antd/es/locale/zh_CN'\n\nimport { merge } from 'lodash'\n\n// 覆盖原始的语言包,以便在使用 LocalReceiver 时获取正确的语言包\nconst zh_CN = merge(sourceLocale, {\n Table: {\n loadingDescription: '数据加载中...',\n emptyDescription: '暂无数据',\n total: '共 ${total} 条记录',\n },\n Empty: {\n noGraphData: '暂无图表',\n noPermission: '暂无权限',\n createdSuccessfully: '创建成功',\n creationFailed: '创建失败',\n noNetwork: '网络未连接',\n noData: '暂无数据',\n },\n Handle: {\n more: '更多',\n },\n Exception: {\n '403': '很抱歉,暂无该页面访问权限',\n '404': '很抱歉,本页暂无结果',\n '500': '很抱歉,服务器报错',\n },\n TntdCascader: {\n noData: '暂无数据',\n },\n PageLoading: {\n text: '加载中...',\n },\n TntdSelect: {\n noData: '暂无数据',\n },\n TntdSecondPage: {\n back: '返回',\n },\n ColorPicker: {},\n Drawer: {\n okText: '确定',\n cancelText: '取消',\n },\n})\n\nexport default zh_CN\n"]}
1
+ {"version":3,"file":"zh_CN.js","sourceRoot":"","sources":["../../src/locale/zh_CN.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE9B,yCAAyC;AACzC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE;IAChC,KAAK,EAAE;QACL,kBAAkB,EAAE,UAAU;QAC9B,gBAAgB,EAAE,MAAM;QACxB,KAAK,EAAE,gBAAgB;KACxB;IACD,KAAK,EAAE;QACL,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM;QACpB,mBAAmB,EAAE,MAAM;QAC3B,cAAc,EAAE,MAAM;QACtB,SAAS,EAAE,OAAO;QAClB,MAAM,EAAE,MAAM;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;KACX;IACD,SAAS,EAAE;QACT,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,WAAW;KACnB;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM;KACf;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;KACf;IACD,UAAU,EAAE;QACV,MAAM,EAAE,MAAM;KACf;IACD,cAAc,EAAE;QACd,IAAI,EAAE,IAAI;KACX;IACD,WAAW,EAAE,EAAE;IACf,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;KACjB;IACD,UAAU,EAAE;QACV,GAAG,EAAE,IAAI;KACV;CACF,CAAC,CAAA;AAEF,eAAe,KAAK,CAAA","sourcesContent":["import sourceLocale from 'antd/es/locale/zh_CN'\n\nimport { merge } from 'lodash'\n\n// 覆盖原始的语言包,以便在使用 LocalReceiver 时获取正确的语言包\nconst zh_CN = merge(sourceLocale, {\n Table: {\n loadingDescription: '数据加载中...',\n emptyDescription: '暂无数据',\n total: '共 ${total} 条记录',\n },\n Empty: {\n noGraphData: '暂无图表',\n noPermission: '暂无权限',\n createdSuccessfully: '创建成功',\n creationFailed: '创建失败',\n noNetwork: '网络未连接',\n noData: '暂无数据',\n },\n Handle: {\n more: '更多',\n },\n Exception: {\n '403': '很抱歉,暂无该页面访问权限',\n '404': '很抱歉,本页暂无结果',\n '500': '很抱歉,服务器报错',\n },\n TntdCascader: {\n noData: '暂无数据',\n },\n PageLoading: {\n text: '加载中...',\n },\n TntdSelect: {\n noData: '暂无数据',\n },\n TntdSecondPage: {\n back: '返回',\n },\n ColorPicker: {},\n Drawer: {\n okText: '确定',\n cancelText: '取消',\n },\n ArrayInput: {\n add: '添加',\n },\n})\n\nexport default zh_CN\n"]}
@@ -0,0 +1,49 @@
1
+ @table-prefix-cls: ~'@{ant-prefix}-table';
2
+
3
+ // .@{table-prefix-cls} {
4
+ .tnt-table-wrapper {
5
+ // customize the fixed of table
6
+ &.@{table-prefix-cls}-sticky {
7
+ .@{table-prefix-cls}-scroll,
8
+ .@{table-prefix-cls}-default {
9
+ .@{table-prefix-cls}-body table {
10
+ table-layout: fixed;
11
+
12
+ tr.@{table-prefix-cls}-expanded-row.@{table-prefix-cls}-expanded-row-level-1 {
13
+ position: relative;
14
+ z-index: 10;
15
+
16
+ > td:not([colspan]) {
17
+ display: none;
18
+ }
19
+
20
+ // 兼容低版本浏览器
21
+ > td[colspan] {
22
+ position: relative;
23
+ z-index: 100;
24
+ padding: 0;
25
+
26
+ > .@{table-prefix-cls}-expanded-row-fixed {
27
+ position: sticky;
28
+ left: 0px;
29
+ overflow: hidden;
30
+ padding: 0px 16px;
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ .@{table-prefix-cls}-fixed-left table, .@{table-prefix-cls}-fixed-right table {
38
+ width: fit-content;
39
+
40
+ tr.@{table-prefix-cls}-expanded-row.@{table-prefix-cls}-expanded-row-level-1 {
41
+ > td {
42
+ position: relative;
43
+ z-index: -1;
44
+ }
45
+ }
46
+ }
47
+
48
+ }
49
+ }
@@ -1 +1,2 @@
1
- export * from './use-column-setting';
1
+ export * from './use-column-setting';
2
+ export * from './use-expand-fixed';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA","sourcesContent":["export * from './use-column-setting'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA","sourcesContent":["export * from './use-column-setting'\nexport * from './use-expand-fixed'\n"]}
@@ -0,0 +1,78 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { makeRandomCode } from '../utils';
3
+ export const useExpandFixed = () => {
4
+ const curTableKey = useRef(makeRandomCode());
5
+ const activeKeyRef = useRef(null);
6
+ const oldActiveKeyRef = useRef({
7
+ main: null,
8
+ right: null,
9
+ left: null
10
+ });
11
+ const container = useRef(null);
12
+ const observer = useRef(null);
13
+ const getDom = key => {
14
+ const main = document.querySelector(`.${curTableKey.current} .ant-table-scroll [data-row-key="${key}-extra-row"]`) || document.querySelector(`.${curTableKey.current} .ant-table-default [data-row-key="${key}-extra-row"]`);
15
+ const right = document.querySelector(`.${curTableKey.current} .ant-table-fixed-right [data-row-key="${key}-extra-row"]`);
16
+ const left = document.querySelector(`.${curTableKey.current} .ant-table-fixed-left [data-row-key="${key}-extra-row"]`);
17
+ return [main, right, left];
18
+ };
19
+ const expand = async () => {
20
+ const [main, right, left] = getDom(String(activeKeyRef.current) || '');
21
+ const border = 2;
22
+ const height = (main === null || main === void 0 ? void 0 : main.offsetHeight) - border || 0;
23
+ if (right) {
24
+ right.setAttribute('style', `display: inline-block; height: ${height}px; overflow: hidden;`);
25
+ }
26
+ if (left) {
27
+ left.setAttribute('style', `display: inline-block; height: ${height}px; overflow: hidden;`);
28
+ }
29
+ if (main) {
30
+ // 解决 expandIconAsCell为true 且 iconCell的td元素为display: none;时, 展开内容滚动到最右边,会多出一部分iconCell所占据的空间 的问题
31
+ const td = main.childNodes[1];
32
+ const colspan = td.getAttribute('colspan') || 0;
33
+ const Oldcolspan = td.getAttribute('oldcolspan') || 0;
34
+ const newColspan = Oldcolspan ? Oldcolspan : Number(colspan) + 1 + '';
35
+ if (!Oldcolspan) td.setAttribute('oldcolspan', newColspan);
36
+ td.setAttribute('colspan', newColspan);
37
+ //
38
+ }
39
+ oldActiveKeyRef.current = {
40
+ main,
41
+ right,
42
+ left
43
+ };
44
+ };
45
+ const ob = () => {
46
+ const classname = curTableKey.current;
47
+ if (!classname) return;
48
+ container.current = document.querySelector(`.${classname}.ant-table-wrapper.collapse-panel > .ant-spin-nested-loading > .ant-spin-container > .ant-table`);
49
+ observer.current = new MutationObserver(expand);
50
+ observer.current.observe(container.current, {
51
+ childList: true,
52
+ attributes: true
53
+ });
54
+ };
55
+ const setChangedKey = key => {
56
+ activeKeyRef.current = key;
57
+ };
58
+ const trigger = key => {
59
+ setChangedKey(key);
60
+ const className = curTableKey.current;
61
+ if (!className) return;
62
+ const dom = document === null || document === void 0 ? void 0 : document.querySelector(`.${className}.ant-table-wrapper.collapse-panel > .ant-spin-nested-loading > .ant-spin-container > .ant-table`);
63
+ dom === null || dom === void 0 ? void 0 : dom.setAttribute('c-data', 'Mutation');
64
+ };
65
+ useEffect(() => {
66
+ ob();
67
+ }, [curTableKey.current]);
68
+ return [curTableKey.current, trigger];
69
+ };
70
+ export const findRowKey = (record, rowKey) => {
71
+ let res = '';
72
+ if (typeof rowKey === 'function') {
73
+ res = [record].map(rowKey)[0];
74
+ } else if (typeof rowKey === 'string') {
75
+ res = record[rowKey];
76
+ }
77
+ return res;
78
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-expand-fixed.js","sourceRoot":"","sources":["../../../src/table/hooks/use-expand-fixed.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef } from 'react'\nimport { makeRandomCode } from '../utils'\n\nexport type keyType = string | number | null\n\ninterface OldDom {\n main: HTMLDivElement | null\n right: HTMLDivElement | null\n left: HTMLDivElement | null\n}\n\nexport const useExpandFixed = () => {\n const curTableKey = useRef<keyType>(makeRandomCode())\n const activeKeyRef = useRef<string | null>(null)\n const oldActiveKeyRef = useRef<OldDom>({\n main: null,\n right: null,\n left: null,\n })\n const container = useRef<HTMLDivElement | null>(null)\n const observer = useRef<MutationObserver | null>(null)\n\n const getDom = (key: string | number | undefined) => {\n const main =\n (document.querySelector(\n `.${curTableKey.current} .ant-table-scroll [data-row-key=\"${key}-extra-row\"]`\n ) as HTMLDivElement) ||\n (document.querySelector(\n `.${curTableKey.current} .ant-table-default [data-row-key=\"${key}-extra-row\"]`\n ) as HTMLDivElement)\n const right = document.querySelector(\n `.${curTableKey.current} .ant-table-fixed-right [data-row-key=\"${key}-extra-row\"]`\n ) as HTMLDivElement\n const left = document.querySelector(\n `.${curTableKey.current} .ant-table-fixed-left [data-row-key=\"${key}-extra-row\"]`\n ) as HTMLDivElement\n return [main, right, left]\n }\n\n const expand = async () => {\n const [main, right, left] = getDom(String(activeKeyRef.current) || '')\n const border = 2\n const height = main?.offsetHeight - border || 0\n if (right) {\n right.setAttribute('style', `display: inline-block; height: ${height}px; overflow: hidden;`)\n }\n\n if (left) {\n left.setAttribute('style', `display: inline-block; height: ${height}px; overflow: hidden;`)\n }\n\n if (main) {\n // 解决 expandIconAsCell为true 且 iconCell的td元素为display: none;时, 展开内容滚动到最右边,会多出一部分iconCell所占据的空间 的问题\n const td = main.childNodes[1] as HTMLDivElement\n\n const colspan = td.getAttribute('colspan') || 0\n const Oldcolspan = td.getAttribute('oldcolspan') || 0\n const newColspan = Oldcolspan ? Oldcolspan : Number(colspan) + 1 + ''\n if (!Oldcolspan) td.setAttribute('oldcolspan', newColspan)\n\n td.setAttribute('colspan', newColspan)\n //\n }\n\n oldActiveKeyRef.current = {\n main,\n right,\n left,\n }\n }\n\n const ob = () => {\n const classname = curTableKey.current\n if (!classname) return\n\n container.current = document.querySelector(\n `.${classname}.ant-table-wrapper.collapse-panel > .ant-spin-nested-loading > .ant-spin-container > .ant-table`\n ) as HTMLDivElement\n\n observer.current = new MutationObserver(expand)\n observer.current.observe(container.current, {\n childList: true, // 子节点的变动\n attributes: true,\n })\n }\n\n const setChangedKey = (key: string) => {\n activeKeyRef.current = key\n }\n\n const trigger = (key: string) => {\n setChangedKey(key)\n const className = curTableKey.current\n if (!className) return\n const dom = document?.querySelector(\n `.${className}.ant-table-wrapper.collapse-panel > .ant-spin-nested-loading > .ant-spin-container > .ant-table`\n )\n dom?.setAttribute('c-data', 'Mutation')\n }\n\n useEffect(() => {\n ob()\n }, [curTableKey.current])\n\n return [curTableKey.current, trigger as (key: string) => void] as const\n}\n\nexport const findRowKey = (\n record: any,\n rowKey: string | ((record: any, index: number) => string)\n) => {\n let res: string | number = ''\n if (typeof rowKey === 'function') {\n res = [record].map(rowKey)[0]\n } else if (typeof rowKey === 'string') {\n res = record[rowKey]\n }\n\n return res\n}\n"]}
package/es/table/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import './style';
2
2
  import { Table } from './table';
3
3
  import './table.less';
4
+ import './expand.less';
4
5
  export * from './table';
5
6
  export default Table;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAChB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,cAAc,CAAA;AAErB,cAAc,SAAS,CAAA;AAEvB,eAAe,KAAK,CAAA","sourcesContent":["import './style'\nimport { Table } from './table'\nimport './table.less'\n\nexport * from './table'\n\nexport default Table\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAChB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,cAAc,CAAA;AACrB,OAAO,eAAe,CAAA;AAEtB,cAAc,SAAS,CAAA;AAEvB,eAAe,KAAK,CAAA","sourcesContent":["import './style'\nimport { Table } from './table'\nimport './table.less'\nimport './expand.less'\n\nexport * from './table'\n\nexport default Table\n"]}
package/es/table/table.js CHANGED
@@ -12,14 +12,15 @@ import { default as AntdTable } from 'antd/es/table';
12
12
  import Column from 'antd/es/table/Column';
13
13
  import ColumnGroup from 'antd/es/table/ColumnGroup';
14
14
  import classNames from 'classnames';
15
- import React, { useMemo, useRef } from 'react';
15
+ import React, { useMemo, useRef, useState } from 'react';
16
16
  import Ellipsis from '../ellipsis';
17
17
  import { TableContext } from './context';
18
- import { useColumnSetting } from './hooks';
18
+ import { useColumnSetting, useExpandFixed } from './hooks';
19
19
  import { normalizeColumns } from './utils';
20
20
  import { titleCaseUpper } from '../utils/lang';
21
21
  import { TotalShower } from './total-shower';
22
22
  import { getLanguage } from '../prev-locale';
23
+ import ResizeObserver from 'rc-resize-observer';
23
24
  const sizeWidthMap = {
24
25
  default: 40,
25
26
  middle: 20,
@@ -53,6 +54,7 @@ export const Table = _a => {
53
54
  storageKey,
54
55
  columns,
55
56
  children,
57
+ sticky = false,
56
58
  shadowed,
57
59
  striped = false,
58
60
  showCellBorders = false,
@@ -65,7 +67,7 @@ export const Table = _a => {
65
67
  unTooltip,
66
68
  smallPadding
67
69
  } = _a,
68
- rest = __rest(_a, ["className", "locale", "bordered", "size", "storageKey", "columns", "children", "shadowed", "striped", "showCellBorders", "enableToolbar", "refresh", "upperCaseIgnore", "unUpperConverted", "unTooltip", "smallPadding"]);
70
+ rest = __rest(_a, ["className", "locale", "bordered", "size", "storageKey", "columns", "children", "sticky", "shadowed", "striped", "showCellBorders", "enableToolbar", "refresh", "upperCaseIgnore", "unUpperConverted", "unTooltip", "smallPadding"]);
69
71
  const tableContainer = useRef(null);
70
72
  // const [innerSize, setInnerSize] = useLocalStorage<TableProps<T>['size']>(
71
73
  // TABLE_SIZE_STORAGE_KEY,
@@ -73,6 +75,7 @@ export const Table = _a => {
73
75
  // )
74
76
  const normalizedColumns = useMemo(() => columns || normalizeColumns(children), [children, columns]);
75
77
  const [displayColumns, columnSetting, setColumnSetting] = useColumnSetting(normalizedColumns, storageKey);
78
+ const [fixedWidth, setFixedWidth] = useState(Number);
76
79
  const lang = getLanguage();
77
80
  let newColumns = displayColumns;
78
81
  // 非中文做处理
@@ -152,6 +155,29 @@ export const Table = _a => {
152
155
  // setInnerSize(size)
153
156
  // }
154
157
  // }, [setInnerSize, size])
158
+ /**
159
+ * expand 与 fix 兼容,expand悬浮
160
+ */
161
+ const [tableKey, trigger] = useExpandFixed();
162
+ const stickyProps = useMemo(() => {
163
+ return {
164
+ onExpandedRowsChange: arg => {
165
+ const key = arg && arg[arg.length - 1];
166
+ if (rest === null || rest === void 0 ? void 0 : rest.onExpandedRowsChange) rest === null || rest === void 0 ? void 0 : rest.onExpandedRowsChange([Number(key)]);
167
+ // 触发MutationObserver监听
168
+ trigger(key);
169
+ },
170
+ expandedRowRender: (rest === null || rest === void 0 ? void 0 : rest.expandedRowRender) ? (record, index, indent, expanded) => {
171
+ const padding = 0;
172
+ return React.createElement("div", {
173
+ className: "ant-table-expanded-row-fixed",
174
+ style: {
175
+ width: fixedWidth + padding
176
+ }
177
+ }, (rest === null || rest === void 0 ? void 0 : rest.expandedRowRender) && (rest === null || rest === void 0 ? void 0 : rest.expandedRowRender(record, index, indent, expanded)));
178
+ } : undefined
179
+ };
180
+ }, [rest === null || rest === void 0 ? void 0 : rest.expandedRowRender, rest === null || rest === void 0 ? void 0 : rest.onExpandedRowsChange, trigger]);
155
181
  return React.createElement(TableContext.Provider, {
156
182
  value: {
157
183
  // size: innerSize,
@@ -174,23 +200,30 @@ export const Table = _a => {
174
200
  }, localeObject => {
175
201
  // const locale = localeObject as Record<string, string>
176
202
  // const paginationConfig = pagination ? getDefaultPagination(locale) : pagination
177
- return React.createElement(AntdTable, Object.assign({
203
+ return React.createElement(ResizeObserver, {
204
+ onResize: ({
205
+ width
206
+ }) => {
207
+ setFixedWidth(width);
208
+ }
209
+ }, React.createElement(AntdTable, Object.assign({
178
210
  className: classNames(
179
211
  // prefixCls,
180
- 'tnt-table-wrapper', {
212
+ 'tnt-table-wrapper', `${tableKey} collapse-panel`, {
181
213
  [`${prefixCls}-borderless`]: !bordered,
182
214
  [`${prefixCls}-hide-cell-borders`]: !showCellBorders,
183
215
  [`${prefixCls}-size-small`]: size === 'small',
184
216
  [`${prefixCls}-size-middle`]: size === 'middle',
185
217
  [`${prefixCls}-striped`]: striped,
186
218
  [`${prefixCls}-shadowed`]: shadowed,
187
- [`${prefixCls}-small-padding`]: smallPadding
219
+ [`${prefixCls}-small-padding`]: smallPadding,
220
+ [`${prefixCls}-sticky`]: sticky
188
221
  }, className),
189
222
  locale: locale,
190
223
  bordered: bordered,
191
224
  size: size,
192
225
  columns: newColumns
193
- }, rest));
226
+ }, rest, sticky ? stickyProps : {})));
194
227
  }));
195
228
  }));
196
229
  };