@fjyueke/arco-mcp 1.0.0

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 (191) hide show
  1. package/README.md +85 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +244 -0
  4. package/metaData/components/action-sheet/doc.md +102 -0
  5. package/metaData/components/action-sheet/example/index.tsx +199 -0
  6. package/metaData/components/action-sheet/example/methods.tsx +6 -0
  7. package/metaData/components/avatar/doc.md +57 -0
  8. package/metaData/components/avatar/example/group.tsx +69 -0
  9. package/metaData/components/avatar/example/index.tsx +196 -0
  10. package/metaData/components/badge/doc.md +28 -0
  11. package/metaData/components/badge/example/index.tsx +128 -0
  12. package/metaData/components/button/doc.md +45 -0
  13. package/metaData/components/button/example/index.tsx +264 -0
  14. package/metaData/components/carousel/doc.md +89 -0
  15. package/metaData/components/carousel/example/index.tsx +1481 -0
  16. package/metaData/components/cell/doc.md +68 -0
  17. package/metaData/components/cell/example/arrow.tsx +13 -0
  18. package/metaData/components/cell/example/cell.tsx +71 -0
  19. package/metaData/components/cell/example/group.tsx +63 -0
  20. package/metaData/components/cell/example/index.tsx +19 -0
  21. package/metaData/components/checkbox/doc.md +91 -0
  22. package/metaData/components/checkbox/example/checkbox.tsx +158 -0
  23. package/metaData/components/checkbox/example/group.tsx +103 -0
  24. package/metaData/components/checkbox/example/index.tsx +25 -0
  25. package/metaData/components/circle-progress/doc.md +40 -0
  26. package/metaData/components/circle-progress/example/index.tsx +323 -0
  27. package/metaData/components/collapse/doc.md +74 -0
  28. package/metaData/components/collapse/example/collapse.tsx +183 -0
  29. package/metaData/components/collapse/example/group.tsx +136 -0
  30. package/metaData/components/collapse/example/index.tsx +16 -0
  31. package/metaData/components/collapse/example/utils.tsx +20 -0
  32. package/metaData/components/context-provider/doc.md +44 -0
  33. package/metaData/components/context-provider/example/index.tsx +208 -0
  34. package/metaData/components/count-down/doc.md +40 -0
  35. package/metaData/components/count-down/example/hooks.tsx +118 -0
  36. package/metaData/components/count-down/example/index.tsx +63 -0
  37. package/metaData/components/date-picker/doc.md +102 -0
  38. package/metaData/components/date-picker/example/index.tsx +545 -0
  39. package/metaData/components/dialog/doc.md +200 -0
  40. package/metaData/components/dialog/example/index.tsx +328 -0
  41. package/metaData/components/dialog/example/methods.tsx +56 -0
  42. package/metaData/components/divider/doc.md +25 -0
  43. package/metaData/components/divider/example/index.tsx +87 -0
  44. package/metaData/components/dropdown/doc.md +80 -0
  45. package/metaData/components/dropdown/example/dropdown.tsx +308 -0
  46. package/metaData/components/dropdown/example/index.tsx +19 -0
  47. package/metaData/components/dropdown/example/options.tsx +103 -0
  48. package/metaData/components/dropdown-menu/doc.md +91 -0
  49. package/metaData/components/dropdown-menu/example/dropdown-menu.tsx +270 -0
  50. package/metaData/components/dropdown-menu/example/index.tsx +16 -0
  51. package/metaData/components/ellipsis/doc.md +33 -0
  52. package/metaData/components/ellipsis/example/index.tsx +93 -0
  53. package/metaData/components/ellipsis/example/js-ellipsis.tsx +229 -0
  54. package/metaData/components/ellipsis/example/native-ellipsis.tsx +48 -0
  55. package/metaData/components/form/doc.md +90 -0
  56. package/metaData/components/form/example/form-item-context.tsx +8 -0
  57. package/metaData/components/form/example/form-item.tsx +378 -0
  58. package/metaData/components/form/example/index.tsx +87 -0
  59. package/metaData/components/form/example/linked-container.tsx +66 -0
  60. package/metaData/components/grid/doc.md +39 -0
  61. package/metaData/components/grid/example/index.tsx +252 -0
  62. package/metaData/components/icon/doc.md +15 -0
  63. package/metaData/components/icon/example/index.tsx +32 -0
  64. package/metaData/components/image/doc.md +62 -0
  65. package/metaData/components/image/example/index.tsx +528 -0
  66. package/metaData/components/image-picker/doc.md +116 -0
  67. package/metaData/components/image-picker/example/add-icon.tsx +14 -0
  68. package/metaData/components/image-picker/example/index.tsx +175 -0
  69. package/metaData/components/image-preview/doc.md +119 -0
  70. package/metaData/components/image-preview/example/index.tsx +1290 -0
  71. package/metaData/components/image-preview/example/methods.tsx +72 -0
  72. package/metaData/components/index-bar/doc.md +83 -0
  73. package/metaData/components/index-bar/example/group.tsx +93 -0
  74. package/metaData/components/index-bar/example/index.tsx +271 -0
  75. package/metaData/components/index-bar/example/side-bar.tsx +82 -0
  76. package/metaData/components/input/doc.md +60 -0
  77. package/metaData/components/input/example/hooks.tsx +259 -0
  78. package/metaData/components/input/example/index.tsx +134 -0
  79. package/metaData/components/input/example/props.tsx +183 -0
  80. package/metaData/components/keyboard/doc.md +73 -0
  81. package/metaData/components/keyboard/example/index.tsx +238 -0
  82. package/metaData/components/load-more/doc.md +48 -0
  83. package/metaData/components/load-more/example/index.tsx +395 -0
  84. package/metaData/components/loading/doc.md +34 -0
  85. package/metaData/components/loading/example/index.tsx +312 -0
  86. package/metaData/components/masking/doc.md +93 -0
  87. package/metaData/components/masking/example/index.tsx +410 -0
  88. package/metaData/components/masking/example/methods.tsx +88 -0
  89. package/metaData/components/nav-bar/doc.md +40 -0
  90. package/metaData/components/nav-bar/example/back-icon.tsx +28 -0
  91. package/metaData/components/nav-bar/example/index.tsx +305 -0
  92. package/metaData/components/notice-bar/doc.md +34 -0
  93. package/metaData/components/notice-bar/example/index.tsx +294 -0
  94. package/metaData/components/notify/doc.md +81 -0
  95. package/metaData/components/notify/example/index.tsx +171 -0
  96. package/metaData/components/notify/example/methods.tsx +83 -0
  97. package/metaData/components/pagination/doc.md +41 -0
  98. package/metaData/components/pagination/example/arrow.tsx +14 -0
  99. package/metaData/components/pagination/example/index.tsx +292 -0
  100. package/metaData/components/picker/doc.md +89 -0
  101. package/metaData/components/picker/example/index.tsx +217 -0
  102. package/metaData/components/picker-view/doc.md +57 -0
  103. package/metaData/components/picker-view/example/cascader.tsx +141 -0
  104. package/metaData/components/picker-view/example/index.tsx +297 -0
  105. package/metaData/components/picker-view/example/multi-picker.tsx +66 -0
  106. package/metaData/components/picker-view/example/picker-cell.tsx +416 -0
  107. package/metaData/components/popover/doc.md +144 -0
  108. package/metaData/components/popover/example/index.tsx +23 -0
  109. package/metaData/components/popover/example/menu.tsx +145 -0
  110. package/metaData/components/popover/example/popover-inner.tsx +147 -0
  111. package/metaData/components/popover/example/popover.tsx +268 -0
  112. package/metaData/components/popup/doc.md +101 -0
  113. package/metaData/components/popup/example/index.tsx +125 -0
  114. package/metaData/components/popup/example/methods.tsx +6 -0
  115. package/metaData/components/popup-swiper/doc.md +108 -0
  116. package/metaData/components/popup-swiper/example/index.tsx +332 -0
  117. package/metaData/components/popup-swiper/example/methods.tsx +6 -0
  118. package/metaData/components/portal/doc.md +14 -0
  119. package/metaData/components/portal/example/index.tsx +35 -0
  120. package/metaData/components/progress/doc.md +42 -0
  121. package/metaData/components/progress/example/index.tsx +256 -0
  122. package/metaData/components/pull-refresh/doc.md +37 -0
  123. package/metaData/components/pull-refresh/example/android-pull-refresh.tsx +260 -0
  124. package/metaData/components/pull-refresh/example/index.tsx +44 -0
  125. package/metaData/components/pull-refresh/example/ios-pull-refresh.tsx +216 -0
  126. package/metaData/components/radio/doc.md +89 -0
  127. package/metaData/components/radio/example/group.tsx +92 -0
  128. package/metaData/components/radio/example/index.tsx +25 -0
  129. package/metaData/components/radio/example/radio.tsx +22 -0
  130. package/metaData/components/rate/doc.md +33 -0
  131. package/metaData/components/rate/example/index.tsx +281 -0
  132. package/metaData/components/search-bar/doc.md +97 -0
  133. package/metaData/components/search-bar/example/association.tsx +89 -0
  134. package/metaData/components/search-bar/example/cancel-button.tsx +34 -0
  135. package/metaData/components/search-bar/example/highlight.tsx +66 -0
  136. package/metaData/components/search-bar/example/index.tsx +251 -0
  137. package/metaData/components/show-monitor/doc.md +34 -0
  138. package/metaData/components/show-monitor/example/index.tsx +646 -0
  139. package/metaData/components/skeleton/doc.md +101 -0
  140. package/metaData/components/skeleton/example/elements.tsx +290 -0
  141. package/metaData/components/skeleton/example/index.tsx +96 -0
  142. package/metaData/components/skeleton/example/skeleton-context.tsx +7 -0
  143. package/metaData/components/slider/doc.md +42 -0
  144. package/metaData/components/slider/example/index.tsx +326 -0
  145. package/metaData/components/slider/example/marks.tsx +50 -0
  146. package/metaData/components/slider/example/popover.tsx +38 -0
  147. package/metaData/components/slider/example/thumb.tsx +48 -0
  148. package/metaData/components/slider/example/useSliderIcon.tsx +38 -0
  149. package/metaData/components/slider/example/useSliderInit.tsx +170 -0
  150. package/metaData/components/stepper/doc.md +46 -0
  151. package/metaData/components/stepper/example/index.tsx +166 -0
  152. package/metaData/components/stepper/example/useButtonClick.tsx +74 -0
  153. package/metaData/components/stepper/example/useInputEvent.tsx +65 -0
  154. package/metaData/components/stepper/example/useValue.tsx +43 -0
  155. package/metaData/components/steps/doc.md +57 -0
  156. package/metaData/components/steps/example/index.tsx +123 -0
  157. package/metaData/components/steps/example/step.tsx +126 -0
  158. package/metaData/components/sticky/doc.md +45 -0
  159. package/metaData/components/sticky/example/index.tsx +430 -0
  160. package/metaData/components/swipe-action/doc.md +44 -0
  161. package/metaData/components/swipe-action/example/index.tsx +338 -0
  162. package/metaData/components/swipe-action/example/item.tsx +40 -0
  163. package/metaData/components/swipe-load/doc.md +43 -0
  164. package/metaData/components/swipe-load/example/index.tsx +339 -0
  165. package/metaData/components/swipe-load/example/type.tsx +153 -0
  166. package/metaData/components/switch/doc.md +38 -0
  167. package/metaData/components/switch/example/index.tsx +237 -0
  168. package/metaData/components/tab-bar/doc.md +57 -0
  169. package/metaData/components/tab-bar/example/index.tsx +18 -0
  170. package/metaData/components/tab-bar/example/item.tsx +74 -0
  171. package/metaData/components/tab-bar/example/tab-bar.tsx +105 -0
  172. package/metaData/components/tabs/doc.md +187 -0
  173. package/metaData/components/tabs/example/index.tsx +514 -0
  174. package/metaData/components/tabs/example/tab-cell-underline.tsx +320 -0
  175. package/metaData/components/tabs/example/tab-cell.tsx +433 -0
  176. package/metaData/components/tabs/example/tab-pane.tsx +349 -0
  177. package/metaData/components/tag/doc.md +80 -0
  178. package/metaData/components/tag/example/index.tsx +23 -0
  179. package/metaData/components/tag/example/list.tsx +97 -0
  180. package/metaData/components/tag/example/tag.tsx +85 -0
  181. package/metaData/components/textarea/doc.md +67 -0
  182. package/metaData/components/textarea/example/index.tsx +258 -0
  183. package/metaData/components/toast/doc.md +90 -0
  184. package/metaData/components/toast/example/index.tsx +335 -0
  185. package/metaData/components/toast/example/methods.tsx +87 -0
  186. package/metaData/components/transition/doc.md +19 -0
  187. package/metaData/components/transition/example/index.tsx +113 -0
  188. package/metaData/components/uploader/doc.md +82 -0
  189. package/metaData/components/uploader/example/index.tsx +208 -0
  190. package/metaData/components-index.json +242 -0
  191. package/package.json +56 -0
@@ -0,0 +1,297 @@
1
+ import React, {
2
+ useRef,
3
+ forwardRef,
4
+ Ref,
5
+ useImperativeHandle,
6
+ useState,
7
+ useMemo,
8
+ useCallback,
9
+ useEffect,
10
+ } from 'react';
11
+ import { componentWrapper } from '@arco-design/mobile-utils';
12
+ import { ContextLayout } from '../context-provider';
13
+ import MultiPicker from '../picker-view/components/multi-picker';
14
+ import PickerCell, { PickerCellRef } from '../picker-view/components/picker-cell';
15
+ import Cascader, { CascaderRef } from '../picker-view/components/cascader';
16
+ import { PickerViewProps, ValueType, PickerData, PickerCellMovingStatus } from './type';
17
+ import { useMountedState } from '../_helpers';
18
+
19
+ export * from './type';
20
+ export { MultiPicker, PickerCell, Cascader };
21
+
22
+ export interface PickerViewRef {
23
+ /**
24
+ * 最外层元素 DOM
25
+ * @en The outermost element DOM
26
+ */
27
+ dom: HTMLDivElement | null;
28
+ /**
29
+ * 每一列的滑动状态
30
+ * @en Sliding state of each column
31
+ */
32
+ getCellMovingStatus: () => PickerCellMovingStatus[];
33
+ /**
34
+ * 获取所有列的值
35
+ * @en Get all column values
36
+ */
37
+ getAllColumnValues: () => ValueType[];
38
+ /**
39
+ * 获取第 n 列的值
40
+ * @en Get the value of the nth column
41
+ */
42
+ getColumnValue: (index: number) => ValueType | undefined;
43
+ /**
44
+ * 手动更新元素布局
45
+ * @en Manually update the element layout
46
+ */
47
+ updateLayout: () => void;
48
+ /**
49
+ * 重置选择器的值为传入的`value`值
50
+ * @en Reset the selector's value to the input value `value`
51
+ */
52
+ resetValue: () => void;
53
+ /**
54
+ * 直接跳到当前最近一行(调用时将中断滚动)
55
+ * @en Jump directly to the current most recent line (will break scrolling when called)
56
+ */
57
+ scrollToCurrentIndex: () => void;
58
+ /**
59
+ * 获取所有列的 data
60
+ * @en Get all column data
61
+ */
62
+ getAllColumnData: () => PickerData[];
63
+ }
64
+
65
+ const isArray = (
66
+ dt: PickerData[] | PickerData[][] | ValueType[][],
67
+ ): dt is ValueType[][] | PickerData[][] => (dt ? Array.isArray(dt[0]) : false);
68
+
69
+ const isStrOrNum = (dt: ValueType[][] | PickerData[][]): dt is ValueType[][] =>
70
+ typeof dt[0][0] === 'string' || typeof dt[0][0] === 'number';
71
+
72
+ const PickerView = forwardRef((props: PickerViewProps, ref: Ref<PickerViewRef>) => {
73
+ const {
74
+ className = '',
75
+ itemStyle,
76
+ cascade = true,
77
+ cols = 3,
78
+ rows = 5,
79
+ data,
80
+ disabled = false,
81
+ clickable = true,
82
+ value,
83
+ hideEmptyCols = false,
84
+ onPickerChange,
85
+ touchToStop = false,
86
+ } = props;
87
+
88
+ const [itemHeight, setItemHeight] = useState(0);
89
+ const [wrapperHeight, setWrapperHeight] = useState(0);
90
+ const [scrollValue, setScrollValue] = useMountedState(value);
91
+ const wrapperRef = useRef<HTMLDivElement>(null);
92
+ const domRef = useRef<HTMLDivElement | null>(null);
93
+ const barRef = useRef<HTMLDivElement | null>(null);
94
+ const pickerCellsRef = useRef<PickerCellRef[]>([]);
95
+ const cascaderRef = useRef<CascaderRef>(null);
96
+
97
+ // itemStyle height 同时对 selection-bar 生效,这里不单独抛出 selection-bar 的高度设置属性
98
+ // @en The height of itemStyle applies to the selection-bar as well, without separately exposing the height setting property for the selection-bar.
99
+ const selectionBarHeight = useMemo(
100
+ () =>
101
+ itemStyle?.height
102
+ ? {
103
+ height: itemStyle.height,
104
+ }
105
+ : {},
106
+ [itemStyle],
107
+ );
108
+
109
+ const innerData = useMemo(() => {
110
+ let newData: PickerData[][];
111
+ if (isArray(data)) {
112
+ if (isStrOrNum(data)) {
113
+ newData = data.map(item =>
114
+ item.map(cell => ({
115
+ label: cell,
116
+ value: cell,
117
+ })),
118
+ );
119
+ } else {
120
+ newData = data;
121
+ }
122
+ } else {
123
+ newData = [data];
124
+ }
125
+ return newData;
126
+ }, [data]);
127
+
128
+ const getAllColumnValues = () => {
129
+ const curValues = cascade
130
+ ? cascaderRef.current?.getAllCellsValue() || []
131
+ : pickerCellsRef.current.map(cell => cell.getCurrentCellValue());
132
+ // 移除级联带来的空列值,理论上非首尾列不会有空值
133
+ // @en Remove empty values from cascader
134
+ return curValues.filter(v => v !== undefined);
135
+ };
136
+
137
+ const getAllColumnData = () => {
138
+ const curValues = cascade
139
+ ? cascaderRef.current?.getAllCellsData() || []
140
+ : pickerCellsRef.current.map(cell => cell.getCurrentCellData());
141
+ return curValues.filter(v => v !== undefined);
142
+ };
143
+
144
+ function getColumnValue(index = 0) {
145
+ return getAllColumnValues()[index];
146
+ }
147
+
148
+ function getCellMovingStatus() {
149
+ return cascade
150
+ ? cascaderRef.current?.getCellMovingStatus() || []
151
+ : pickerCellsRef.current.map(cell => cell.movingStatus);
152
+ }
153
+
154
+ function scrollToCurrentIndex() {
155
+ if (cascade) {
156
+ cascaderRef.current?.scrollToCurrentIndex();
157
+ return;
158
+ }
159
+ pickerCellsRef.current.forEach(cell => cell.scrollToCurrentIndex());
160
+ }
161
+
162
+ useImperativeHandle(ref, () => ({
163
+ dom: domRef.current,
164
+ getCellMovingStatus,
165
+ getAllColumnValues,
166
+ getColumnValue,
167
+ updateLayout,
168
+ resetValue,
169
+ scrollToCurrentIndex,
170
+ getAllColumnData,
171
+ }));
172
+
173
+ function _onValueChange(val: ValueType[], index: number, newData: PickerData[]) {
174
+ setScrollValue(val);
175
+
176
+ if (onPickerChange) {
177
+ onPickerChange(val, index, newData);
178
+ }
179
+ }
180
+
181
+ useEffect(() => {
182
+ setScrollValue(value);
183
+ }, [value]);
184
+
185
+ const updateWrapperHeight = useCallback(() => {
186
+ if (wrapperRef && wrapperRef.current) {
187
+ setWrapperHeight(wrapperRef.current.offsetHeight);
188
+ }
189
+ }, [wrapperRef, setWrapperHeight]);
190
+
191
+ const updateItemHeight = () => {
192
+ if (barRef.current) {
193
+ setItemHeight(barRef.current.getBoundingClientRect().height);
194
+ }
195
+ };
196
+
197
+ useEffect(() => {
198
+ updateLayout();
199
+ }, []);
200
+
201
+ function updateLayout() {
202
+ updateWrapperHeight();
203
+ updateItemHeight();
204
+ }
205
+
206
+ function resetValue() {
207
+ setScrollValue(value);
208
+ }
209
+
210
+ const newItemStyle = {
211
+ height: `${itemHeight}px`,
212
+ ...itemStyle,
213
+ };
214
+
215
+ return (
216
+ <ContextLayout>
217
+ {({ prefixCls }) => (
218
+ <div
219
+ className={`${prefixCls}-picker-view all-border-box ${className}`}
220
+ style={{ height: `${itemHeight * rows}px` }}
221
+ ref={wrapperRef}
222
+ >
223
+ {cascade ? (
224
+ <Cascader
225
+ prefixCls={prefixCls || ''}
226
+ cols={cols}
227
+ itemStyle={newItemStyle}
228
+ data={data as PickerData[]}
229
+ selectedValue={scrollValue}
230
+ onValueChange={_onValueChange}
231
+ clickable={clickable}
232
+ itemHeight={itemHeight}
233
+ wrapperHeight={wrapperHeight}
234
+ disabled={disabled}
235
+ rows={rows}
236
+ hideEmptyCols={hideEmptyCols}
237
+ ref={cascaderRef}
238
+ touchToStop={touchToStop}
239
+ />
240
+ ) : (
241
+ <MultiPicker
242
+ prefixCls={`${prefixCls}-picker`}
243
+ data={innerData}
244
+ itemHeight={itemHeight}
245
+ selectedValue={scrollValue}
246
+ onValueChange={_onValueChange}
247
+ >
248
+ {innerData.map((item, index) => (
249
+ <PickerCell
250
+ key={`${index}_picker_cell_normal`}
251
+ data={item}
252
+ style={newItemStyle}
253
+ prefixCls={`${prefixCls}-picker`}
254
+ clickable={clickable}
255
+ itemHeight={itemHeight}
256
+ wrapperHeight={wrapperHeight}
257
+ disabled={disabled}
258
+ rows={rows}
259
+ hideEmptyCols={hideEmptyCols}
260
+ ref={cellRef => {
261
+ if (cellRef) {
262
+ pickerCellsRef.current[index] = cellRef;
263
+ }
264
+ }}
265
+ touchToStop={touchToStop}
266
+ />
267
+ ))}
268
+ </MultiPicker>
269
+ )}
270
+ <div className={`${prefixCls}-picker-selection`}>
271
+ <div
272
+ className={`${prefixCls}-picker-selection-mask ${prefixCls}-picker-selection-mask-top`}
273
+ />
274
+ <div
275
+ ref={barRef}
276
+ className={`${prefixCls}-picker-selection-bar`}
277
+ style={selectionBarHeight}
278
+ />
279
+ <div
280
+ className={`${prefixCls}-picker-selection-mask ${prefixCls}-picker-selection-mask-bottom`}
281
+ />
282
+ </div>
283
+ </div>
284
+ )}
285
+ </ContextLayout>
286
+ );
287
+ });
288
+ /**
289
+ * 选择器视图组件,不含弹窗,方便使用方灵活定制选择器。
290
+ * @en The picker view component, not has contain popup, which is convenient for the user to flexibly customize the picker.
291
+ * @type 数据录入
292
+ * @type_en Data Entry
293
+ * @name 选择器视图
294
+ * @name_en PickerView
295
+ * @displayName PickerView
296
+ */
297
+ export default componentWrapper(PickerView, 'PickerView');
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import { PickerData, ValueType } from '../type';
3
+
4
+ export interface MultiPickerProps {
5
+ prefixCls: string;
6
+ data: PickerData[][];
7
+ selectedValue?: ValueType[];
8
+ children: any;
9
+ itemHeight: number;
10
+ onValueChange: (value: ValueType[], index: number, data: PickerData[]) => void;
11
+ }
12
+
13
+ export default function MultiPicker(props: MultiPickerProps) {
14
+ const { prefixCls, onValueChange, children, itemHeight, selectedValue, data } = props;
15
+
16
+ function getCurrentData() {
17
+ return (data || []).map((item, itemIndex) => {
18
+ const curSelected = selectedValue?.[itemIndex];
19
+ const cur = curSelected ? (item || []).find(i => i.value === curSelected) : undefined;
20
+ return cur || item?.[0];
21
+ });
22
+ }
23
+
24
+ function onChange({
25
+ index,
26
+ value,
27
+ changedData,
28
+ callback,
29
+ }: {
30
+ index: number;
31
+ value: ValueType;
32
+ changedData: PickerData;
33
+ callback?: (value: ValueType[], index: number, data: PickerData[]) => void;
34
+ }) {
35
+ const newData = getCurrentData().concat();
36
+ newData[index] = changedData;
37
+ const newValue = newData.map(d => d?.value);
38
+ newValue[index] = value;
39
+ if (callback) {
40
+ callback(newValue, index, newData);
41
+ }
42
+ }
43
+
44
+ function _onValueChange(value: ValueType, index: number, changedData: PickerData) {
45
+ onChange({ index, value, callback: onValueChange, changedData });
46
+ }
47
+
48
+ function renderChild() {
49
+ const curData = getCurrentData();
50
+ const value = curData.map(d => d?.value);
51
+
52
+ return React.Children.map(children, (col: any, index) =>
53
+ React.cloneElement(col, {
54
+ onValueChange: (val: ValueType, changedData: PickerData) =>
55
+ _onValueChange(val, index, changedData),
56
+ selectedValue: value[index],
57
+ }),
58
+ );
59
+ }
60
+
61
+ return (
62
+ <div className={`${prefixCls}-multi`} style={{ lineHeight: `${itemHeight}px` }}>
63
+ {renderChild()}
64
+ </div>
65
+ );
66
+ }