@kne/react-form-antd 4.0.3 → 4.1.1

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.
@@ -1,13 +1,14 @@
1
- import React, { forwardRef, useCallback, useRef, useMemo } from 'react';
1
+ import React, { forwardRef, useCallback, useState, useRef, useMemo } from 'react';
2
2
  import classnames from 'classnames';
3
3
  import ReactForm__default, { preset as preset$2, useReset, useSubmit } from '@kne/react-form';
4
4
  export * from '@kne/react-form';
5
5
  import { preset as preset$1, widget, hooks, hoc } from '@kne/react-form-helper';
6
6
  export { hoc, hooks, utils, widget } from '@kne/react-form-helper';
7
7
  import merge from 'lodash/merge';
8
- import { TreeSelect, TimePicker, Input, Switch as Switch$1, Select, Radio, InputNumber, DatePicker, Button, Checkbox as Checkbox$1, Cascader as Cascader$1, Rate as Rate$1, Slider as Slider$1 } from 'antd';
8
+ import { TreeSelect, TimePicker, Input, Switch as Switch$1, Select, Radio, InputNumber, Button, DatePicker, Checkbox as Checkbox$1, Cascader as Cascader$1, Rate as Rate$1, Slider as Slider$1 } from 'antd';
9
+ import { IntlProvider, useIntl } from '@kne/react-intl';
10
+ import { CloseCircleFilled, CalendarOutlined } from '@ant-design/icons';
9
11
  import dayjs from 'dayjs';
10
- import { get } from 'lodash';
11
12
  import useControlValue from '@kne/use-control-value';
12
13
 
13
14
  function _extends() {
@@ -51,7 +52,7 @@ var preset = props => {
51
52
  preset$2(globalParams.rules);
52
53
  };
53
54
 
54
- const _excluded$4 = ["className", "cache", "enterSubmit", "scrollToError", "scrollProps", "type", "size", "children"];
55
+ const _excluded$5 = ["className", "cache", "enterSubmit", "scrollToError", "scrollProps", "type", "size", "children"];
55
56
  const {
56
57
  ScrollToError,
57
58
  EnterSubmit,
@@ -70,7 +71,7 @@ const Form = forwardRef((originProps, ref) => {
70
71
  },
71
72
  children
72
73
  } = originProps,
73
- props = _objectWithoutPropertiesLoose(originProps, _excluded$4);
74
+ props = _objectWithoutPropertiesLoose(originProps, _excluded$5);
74
75
  const baseClass = 'react-form';
75
76
  let computedClass = baseClass;
76
77
  const {
@@ -106,20 +107,69 @@ const Form = forwardRef((originProps, ref) => {
106
107
  }) : null, enterSubmit ? /*#__PURE__*/React.createElement(EnterSubmit, null, maxLabel) : maxLabel)));
107
108
  });
108
109
 
110
+ const locale$1 = {
111
+ PleaseSelect: '请选择{label}',
112
+ PleaseInput: '请输入{label}',
113
+ StartTime: '开始时间',
114
+ EndTime: '结束时间',
115
+ StartDate: '开始日期',
116
+ EndDate: '结束日期',
117
+ SoFar: '至今'
118
+ };
119
+
120
+ const locale = {
121
+ PleaseSelect: 'Please select {label}',
122
+ PleaseInput: 'Please enter {label}',
123
+ StartTime: 'Start Time',
124
+ EndTime: 'End Time',
125
+ StartDate: 'Start Date',
126
+ EndDate: 'End Date',
127
+ SoFar: 'Present'
128
+ };
129
+
130
+ const _excluded$4 = ["locale"];
131
+ const localeMap = {
132
+ 'zh-CN': locale$1,
133
+ 'en-US': locale
134
+ };
135
+ const withLocale = WrappedComponent => {
136
+ const WithLocaleComponent = _ref => {
137
+ let {
138
+ locale = 'zh-CN'
139
+ } = _ref,
140
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$4);
141
+ const messages = localeMap[locale] || locale$1;
142
+ return /*#__PURE__*/React.createElement(IntlProvider, {
143
+ locale: locale,
144
+ messages: messages
145
+ }, /*#__PURE__*/React.createElement(WrappedComponent, props));
146
+ };
147
+ WithLocaleComponent.displayName = `withLocale(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
148
+ return WithLocaleComponent;
149
+ };
150
+
109
151
  const {
110
152
  useOnChange: useOnChange$b
111
153
  } = hooks;
112
- const _TreeSelect = props => {
113
- props = Object.assign({}, {
154
+ const TreeSelectInner = props => {
155
+ const {
156
+ formatMessage
157
+ } = useIntl();
158
+ const mergedProps = Object.assign({}, {
114
159
  fieldName: 'treeSelect'
115
160
  }, props);
116
161
  const render = useOnChange$b(Object.assign({
117
- placeholder: `请选择${props.label || ''}`
118
- }, props));
162
+ placeholder: formatMessage({
163
+ id: 'PleaseSelect'
164
+ }, {
165
+ label: mergedProps.label || ''
166
+ })
167
+ }, mergedProps));
119
168
  return render(TreeSelect);
120
169
  };
121
- _TreeSelect.Field = TreeSelect;
122
- _TreeSelect.TreeNode = TreeSelect.TreeNode;
170
+ TreeSelectInner.Field = TreeSelect;
171
+ TreeSelectInner.TreeNode = TreeSelect.TreeNode;
172
+ const _TreeSelect = withLocale(TreeSelectInner);
123
173
 
124
174
  const {
125
175
  useOnChange: useOnChange$a
@@ -127,41 +177,64 @@ const {
127
177
  const {
128
178
  RangePicker: RangePicker$1
129
179
  } = TimePicker;
130
- const _TimePicker = props => {
131
- props = Object.assign({}, {
180
+ const TimePickerInner = props => {
181
+ const {
182
+ formatMessage
183
+ } = useIntl();
184
+ const mergedProps = Object.assign({}, {
132
185
  fieldName: 'timePicker'
133
186
  }, props);
134
187
  const render = useOnChange$a(Object.assign({
135
- placeholder: `请选择${props.label || ''}`
136
- }, props));
188
+ placeholder: formatMessage({
189
+ id: 'PleaseSelect'
190
+ }, {
191
+ label: mergedProps.label || ''
192
+ })
193
+ }, mergedProps));
137
194
  return render(TimePicker);
138
195
  };
139
- _TimePicker.Field = TimePicker;
140
- const _RangePicker$1 = props => {
141
- props = Object.assign({}, {
196
+ TimePickerInner.Field = TimePicker;
197
+ const RangePickerInner$1 = props => {
198
+ const {
199
+ formatMessage
200
+ } = useIntl();
201
+ const mergedProps = Object.assign({}, {
142
202
  fieldName: 'rangeTimePicker'
143
203
  }, props);
144
204
  const render = useOnChange$a(Object.assign({
145
- placeholder: `请选择${props.label || ''}`
146
- }, props));
205
+ placeholder: formatMessage({
206
+ id: 'PleaseSelect'
207
+ }, {
208
+ label: mergedProps.label || ''
209
+ })
210
+ }, mergedProps));
147
211
  return render(RangePicker$1);
148
212
  };
149
- _RangePicker$1.Field = RangePicker$1;
150
- _TimePicker.RangePicker = _RangePicker$1;
213
+ RangePickerInner$1.Field = RangePicker$1;
214
+ const _TimePicker = withLocale(TimePickerInner);
215
+ _TimePicker.RangePicker = withLocale(RangePickerInner$1);
151
216
 
152
217
  const {
153
218
  useDecorator: useDecorator$2
154
219
  } = hooks;
155
- const TextArea = props => {
156
- props = Object.assign({}, {
220
+ const TextAreaInner = props => {
221
+ const {
222
+ formatMessage
223
+ } = useIntl();
224
+ const mergedProps = Object.assign({}, {
157
225
  fieldName: 'textArea'
158
226
  }, props);
159
227
  const render = useDecorator$2(Object.assign({
160
- placeholder: `请输入${props.label}`
161
- }, props));
228
+ placeholder: formatMessage({
229
+ id: 'PleaseInput'
230
+ }, {
231
+ label: mergedProps.label
232
+ })
233
+ }, mergedProps));
162
234
  return render(Input.TextArea);
163
235
  };
164
- TextArea.Field = Input.TextArea;
236
+ TextAreaInner.Field = Input.TextArea;
237
+ const TextArea = withLocale(TextAreaInner);
165
238
 
166
239
  const {
167
240
  useOnChange: useOnChange$9,
@@ -184,18 +257,26 @@ Switch.Field = Switch$1;
184
257
  const {
185
258
  useOnChange: useOnChange$8
186
259
  } = hooks;
187
- const _Select = props => {
188
- props = Object.assign({}, {
260
+ const SelectInner = props => {
261
+ const {
262
+ formatMessage
263
+ } = useIntl();
264
+ const mergedProps = Object.assign({}, {
189
265
  fieldName: 'select'
190
266
  }, props);
191
267
  const render = useOnChange$8(Object.assign({
192
- placeholder: `请选择${props.label || ''}`
193
- }, props));
268
+ placeholder: formatMessage({
269
+ id: 'PleaseSelect'
270
+ }, {
271
+ label: mergedProps.label || ''
272
+ })
273
+ }, mergedProps));
194
274
  return render(Select);
195
275
  };
196
- _Select.Field = Select;
197
- _Select.Option = Select.Option;
198
- _Select.OptGroup = Select.OptGroup;
276
+ SelectInner.Field = Select;
277
+ SelectInner.Option = Select.Option;
278
+ SelectInner.OptGroup = Select.OptGroup;
279
+ const _Select = withLocale(SelectInner);
199
280
 
200
281
  const _excluded$3 = ["onChange"];
201
282
  const {
@@ -226,133 +307,303 @@ _RadioGroup.Radio = Radio;
226
307
  const {
227
308
  useDecorator: useDecorator$1
228
309
  } = hooks;
229
- const InputNumberField = props => {
230
- props = Object.assign({}, {
310
+ const InputNumberFieldInner = props => {
311
+ const {
312
+ formatMessage
313
+ } = useIntl();
314
+ const mergedProps = Object.assign({}, {
231
315
  fieldName: 'inputNumber',
232
316
  autoComplete: 'off'
233
317
  }, props);
234
318
  const render = useDecorator$1(Object.assign({
235
- placeholder: `请输入${props.label}`
236
- }, props));
319
+ placeholder: formatMessage({
320
+ id: 'PleaseInput'
321
+ }, {
322
+ label: mergedProps.label
323
+ })
324
+ }, mergedProps));
237
325
  return render(InputNumber);
238
326
  };
239
- InputNumberField.Field = InputNumber;
327
+ InputNumberFieldInner.Field = InputNumber;
328
+ const InputNumberField = withLocale(InputNumberFieldInner);
240
329
 
241
330
  const {
242
331
  useDecorator
243
332
  } = hooks;
244
- const InputField = props => {
245
- props = Object.assign({}, {
333
+ const InputFieldInner = props => {
334
+ const {
335
+ formatMessage
336
+ } = useIntl();
337
+ const mergedProps = Object.assign({}, {
246
338
  fieldName: 'input',
247
339
  autoComplete: 'off'
248
340
  }, props);
249
341
  const render = useDecorator(Object.assign({
250
- placeholder: `请输入${props.label}`
251
- }, props));
342
+ placeholder: formatMessage({
343
+ id: 'PleaseInput'
344
+ }, {
345
+ label: mergedProps.label
346
+ })
347
+ }, mergedProps));
252
348
  return render(Input);
253
349
  };
254
- InputField.Field = Input;
255
- InputField.Password = props => {
256
- props = Object.assign({}, {
350
+ InputFieldInner.Field = Input;
351
+ const PasswordInner = props => {
352
+ const {
353
+ formatMessage
354
+ } = useIntl();
355
+ const mergedProps = Object.assign({}, {
257
356
  fieldName: 'password',
258
357
  autoComplete: 'off'
259
358
  }, props);
260
359
  const render = useDecorator(Object.assign({
261
- placeholder: `请输入${props.label}`
262
- }, props));
360
+ placeholder: formatMessage({
361
+ id: 'PleaseInput'
362
+ }, {
363
+ label: mergedProps.label
364
+ })
365
+ }, mergedProps));
263
366
  return render(Input.Password);
264
367
  };
265
- InputField.Password.Field = Input.Password;
368
+ PasswordInner.Field = Input.Password;
369
+ const InputField = withLocale(InputFieldInner);
370
+ InputField.Password = withLocale(PasswordInner);
266
371
 
267
- const _excluded$2 = ["soFarText", "startProps", "endProps"];
372
+ const _excluded$2 = ["soFarText", "soFarValue", "picker"];
268
373
  const {
269
374
  useOnChange: useOnChange$6
270
375
  } = hooks;
271
- const PickerToday = _ref => {
376
+ const PickerTodayInner = _ref => {
272
377
  let {
273
378
  soFarText,
274
- startProps,
275
- endProps
379
+ soFarValue = 'soFar',
380
+ picker = 'date'
276
381
  } = _ref,
277
382
  props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
383
+ const {
384
+ formatMessage
385
+ } = useIntl();
278
386
  const [data, onChange] = useControlValue(props);
279
- const ref_d = useRef();
280
- const newData = useMemo(() => {
281
- // console.log('......', data);
282
- const s = get(data, 0, '');
283
- const d = get(data, 1, '');
284
- const p = get(props, ['placeholder'], ['开始日期', '结束日期']);
387
+ const [openStart, setOpenStart] = useState(false);
388
+ const [openEnd, setOpenEnd] = useState(false);
389
+ const [tempStart, setTempStart] = useState(null); // 临时存储开始时间
390
+ const [tempEnd, setTempEnd] = useState(null); // 临时存储结束时间
391
+ const [hovering, setHovering] = useState(false); // hover 状态
392
+ const containerRef = useRef(null);
393
+ const isSwitchingRef = useRef(false); // 标记是否正在切换到结束时间选择
394
+
395
+ const soFarLabel = soFarText || formatMessage({
396
+ id: 'SoFar'
397
+ });
398
+
399
+ // 判断是否有值
400
+ const hasValue = useMemo(() => {
401
+ const [start, end] = data || [];
402
+ return !!(start || end);
403
+ }, [data]);
404
+
405
+ // 判断是否为"至今"
406
+ const isSoFar = useMemo(() => {
407
+ const [, end] = data || [];
408
+ return end === soFarValue;
409
+ }, [data, soFarValue]);
410
+
411
+ // 解析数据
412
+ const parsedValue = useMemo(() => {
413
+ const [start, end] = data || [];
285
414
  return {
286
- start: s ? dayjs(s) : '',
287
- end: d === '至今' ? null : d ? dayjs(d) : '',
288
- showZj: d === '至今',
289
- placeholder: p
415
+ start: start ? dayjs(start) : null,
416
+ end: isSoFar ? null : end ? dayjs(end) : null
290
417
  };
418
+ }, [data, isSoFar]);
419
+
420
+ // 显示文本 - 弹窗打开时显示临时值,关闭后显示实际值
421
+ const displayText = useMemo(() => {
422
+ // 开始时间:有临时值时显示临时值
423
+ const startText = tempStart ? tempStart.format('YYYY-MM-DD') : parsedValue.start ? parsedValue.start.format('YYYY-MM-DD') : '';
424
+
425
+ // 结束时间:有临时值时显示临时值
426
+ const endText = tempEnd ? tempEnd.format('YYYY-MM-DD') : isSoFar ? soFarLabel : parsedValue.end ? parsedValue.end.format('YYYY-MM-DD') : '';
427
+ return {
428
+ start: startText,
429
+ end: endText
430
+ };
431
+ }, [parsedValue, isSoFar, soFarLabel, tempStart, tempEnd]);
432
+
433
+ // 点击整个Input框时,先弹出开始时间选择
434
+ const handleInputClick = useCallback(() => {
435
+ const [start] = data || [];
436
+ setTempStart(start ? dayjs(start) : null);
437
+ setOpenStart(true);
438
+ setOpenEnd(false);
291
439
  }, [data]);
292
- const startChange = v => {
293
- // 比较日期大小
294
- if (!newData.showZj && newData.end && v && newData.end.isBefore(v)) {
295
- onChange([newData.end, v]);
296
- return;
440
+
441
+ // 清除值
442
+ const handleClear = useCallback(e => {
443
+ e.stopPropagation();
444
+ onChange([]);
445
+ setTempStart(null);
446
+ setTempEnd(null);
447
+ setOpenStart(false);
448
+ setOpenEnd(false);
449
+ }, [onChange]);
450
+
451
+ // 处理开始时间变化
452
+ const handleStartChange = useCallback(date => {
453
+ setTempStart(date);
454
+ isSwitchingRef.current = true; // 标记正在切换
455
+ setOpenStart(false);
456
+ setTimeout(() => {
457
+ setOpenEnd(true);
458
+ isSwitchingRef.current = false;
459
+ }, 100);
460
+ }, []);
461
+
462
+ // 处理结束时间变化(选择日期时实时更新显示,选择后确认值)
463
+ const handleEndChange = useCallback(date => {
464
+ if (date) {
465
+ // 选择了有效日期,确认值
466
+ if (!tempStart) return;
467
+ onChange([tempStart.toISOString(), date.toISOString()]);
468
+ setOpenEnd(false);
469
+ setTempStart(null);
470
+ setTempEnd(null);
471
+ } else {
472
+ // 清空选择
473
+ setTempEnd(null);
297
474
  }
298
- onChange([v || '', newData.showZj ? '至今' : newData.end]);
299
- };
300
- const endChange = v => {
301
- if (newData.start && v && v.isBefore(newData.start)) {
302
- onChange([v, newData.start]);
303
- return;
475
+ }, [tempStart, onChange]);
476
+
477
+ // 点击"至今"按钮
478
+ const handleSoFarClick = useCallback(() => {
479
+ if (!tempStart) return;
480
+ onChange([tempStart.toISOString(), soFarValue]);
481
+ setOpenEnd(false);
482
+ setTempStart(null);
483
+ setTempEnd(null);
484
+ }, [tempStart, onChange, soFarValue]);
485
+
486
+ // 处理开始时间弹窗关闭(未完成选择)
487
+ const handleStartOpenChange = useCallback(open => {
488
+ if (!open) {
489
+ setOpenStart(false);
490
+ // 如果不是正在切换到结束时间,则清空临时状态
491
+ if (!isSwitchingRef.current) {
492
+ setTempStart(null);
493
+ }
304
494
  }
305
- onChange([newData.start, v || '']);
306
- };
307
- const foot = () => {
308
- return /*#__PURE__*/React.createElement(Button, {
309
- type: newData.showZj ? 'primary' : 'default',
310
- onClick: v => {
311
- ref_d.current.blur();
312
- onChange([newData.start || '', '至今']);
495
+ }, []);
496
+
497
+ // 处理结束时间弹窗关闭(未完成选择)
498
+ const handleEndOpenChange = useCallback(open => {
499
+ if (!open) {
500
+ setOpenEnd(false);
501
+ // 关闭结束时间弹窗时,不修改field值
502
+ setTempStart(null);
503
+ setTempEnd(null);
504
+ }
505
+ }, []);
506
+
507
+ // 结束时间面板变化时更新临时值(用于实时显示)
508
+ const handleEndPanelChange = useCallback(date => {
509
+ setTempEnd(date);
510
+ }, []);
511
+
512
+ // 空的 footer(用于开始时间,保持高度一致)
513
+ const renderEmptyFooter = useCallback(() => /*#__PURE__*/React.createElement("div", {
514
+ style: {
515
+ height: 40
516
+ }
517
+ }), []);
518
+
519
+ // 带至今按钮的 footer
520
+ const renderExtraFooter = useCallback(() => {
521
+ const isCurrentSoFar = !tempStart && isSoFar;
522
+ return /*#__PURE__*/React.createElement("div", {
523
+ style: {
524
+ textAlign: 'right'
313
525
  }
314
- }, soFarText || '至今');
315
- };
526
+ }, /*#__PURE__*/React.createElement(Button, {
527
+ type: isCurrentSoFar ? 'primary' : 'default',
528
+ onClick: handleSoFarClick
529
+ }, soFarLabel));
530
+ }, [isSoFar, tempStart, handleSoFarClick, soFarLabel]);
531
+
532
+ // 结束时间的可选日期(不能早于开始时间)
533
+ const endDisabledDate = useCallback(current => {
534
+ if (!tempStart) return false;
535
+ return current && current < tempStart.startOf('day');
536
+ }, [tempStart]);
316
537
  return /*#__PURE__*/React.createElement("div", {
538
+ className: "date-picker-today-container",
539
+ ref: containerRef
540
+ }, /*#__PURE__*/React.createElement("div", {
541
+ className: "date-picker-today-inputs",
542
+ onClick: handleInputClick,
543
+ onMouseEnter: () => setHovering(true),
544
+ onMouseLeave: () => setHovering(false)
545
+ }, /*#__PURE__*/React.createElement("div", {
546
+ className: "date-picker-today-start"
547
+ }, /*#__PURE__*/React.createElement("input", {
548
+ readOnly: true,
549
+ placeholder: formatMessage({
550
+ id: 'StartDate'
551
+ }),
552
+ value: displayText.start,
553
+ className: "ant-input"
554
+ })), /*#__PURE__*/React.createElement("span", {
555
+ className: "date-picker-today-separator"
556
+ }, "~"), /*#__PURE__*/React.createElement("div", {
557
+ className: "date-picker-today-end"
558
+ }, /*#__PURE__*/React.createElement("input", {
559
+ readOnly: true,
560
+ placeholder: formatMessage({
561
+ id: 'EndDate'
562
+ }),
563
+ value: displayText.end,
564
+ className: `ant-input ${isSoFar ? 'so-far-active' : ''}`
565
+ })), /*#__PURE__*/React.createElement("span", {
566
+ className: "date-picker-today-suffix"
567
+ }, hasValue && hovering ? /*#__PURE__*/React.createElement(CloseCircleFilled, {
568
+ className: "date-picker-today-clear",
569
+ onClick: handleClear
570
+ }) : /*#__PURE__*/React.createElement(CalendarOutlined, null))), /*#__PURE__*/React.createElement(DatePicker, {
571
+ picker: picker,
572
+ open: openStart,
573
+ onOpenChange: handleStartOpenChange,
574
+ value: tempStart || parsedValue.start,
575
+ onChange: handleStartChange,
576
+ renderExtraFooter: renderEmptyFooter,
577
+ showNow: false,
578
+ getPopupContainer: () => containerRef.current || document.body,
317
579
  style: {
318
- display: 'flex'
319
- }
320
- }, /*#__PURE__*/React.createElement(DatePicker, _extends({}, _extends({
321
- showToday: false
322
- }, props, {
323
- placeholder: newData.placeholder[0]
324
- }, startProps, {
325
- value: newData.start
326
- }), {
327
- onChange: startChange
328
- })), /*#__PURE__*/React.createElement("div", {
329
- className: 'svg_box'
330
- }, /*#__PURE__*/React.createElement("svg", {
331
- viewBox: "0 0 1024 1024",
332
- focusable: "false",
333
- "data-icon": "swap-right",
334
- width: "1em",
335
- height: "1em",
336
- fill: "currentColor",
337
- "aria-hidden": "true"
338
- }, /*#__PURE__*/React.createElement("path", {
339
- d: "M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"
340
- }))), /*#__PURE__*/React.createElement("div", {
341
- className: newData.showZj ? 'data_range_picker data_range_picker_dis' : 'data_range_picker'
342
- }, /*#__PURE__*/React.createElement("span", {
343
- className: newData.showZj ? 'zhijin zhijin_show' : 'zhijin'
344
- }, soFarText || '至今'), /*#__PURE__*/React.createElement(DatePicker, _extends({}, _extends({
345
- showToday: false
346
- }, props, {
347
- placeholder: newData.showZj ? '' : newData.placeholder[1]
348
- }, endProps, {
349
- value: newData.end
350
- }), {
351
- ref: ref_d,
352
- onChange: endChange,
353
- renderExtraFooter: foot
354
- }))));
580
+ width: 0,
581
+ height: 0,
582
+ visibility: 'hidden',
583
+ position: 'absolute'
584
+ },
585
+ placement: "bottomLeft"
586
+ }), /*#__PURE__*/React.createElement(DatePicker, {
587
+ picker: picker,
588
+ open: openEnd,
589
+ onOpenChange: handleEndOpenChange,
590
+ value: tempEnd || parsedValue.end,
591
+ onChange: handleEndChange,
592
+ onPanelChange: handleEndPanelChange,
593
+ disabledDate: endDisabledDate,
594
+ renderExtraFooter: renderExtraFooter,
595
+ showNow: false,
596
+ getPopupContainer: () => containerRef.current || document.body,
597
+ style: {
598
+ width: 0,
599
+ height: 0,
600
+ visibility: 'hidden',
601
+ position: 'absolute'
602
+ },
603
+ placement: "bottomLeft"
604
+ }));
355
605
  };
606
+ const PickerToday = withLocale(PickerTodayInner);
356
607
  const RangePickerToday = props => {
357
608
  props = Object.assign({}, {
358
609
  fieldName: 'rangePickerToday'
@@ -370,49 +621,78 @@ const {
370
621
  RangePicker,
371
622
  WeekPicker
372
623
  } = DatePicker;
373
- const _DatePicker = props => {
374
- props = Object.assign({}, {
624
+ const DatePickerInner = props => {
625
+ const {
626
+ formatMessage
627
+ } = useIntl();
628
+ const mergedProps = Object.assign({}, {
375
629
  fieldName: 'datePicker'
376
630
  }, props);
377
631
  const render = useOnChange$5(Object.assign({
378
- placeholder: `请选择${props.label || ''}`
379
- }, props));
632
+ placeholder: formatMessage({
633
+ id: 'PleaseSelect'
634
+ }, {
635
+ label: mergedProps.label || ''
636
+ })
637
+ }, mergedProps));
380
638
  return render(DatePicker);
381
639
  };
382
- _DatePicker.Field = DatePicker;
383
- const _MonthPicker = props => {
384
- props = Object.assign({}, {
640
+ DatePickerInner.Field = DatePicker;
641
+ const MonthPickerInner = props => {
642
+ const {
643
+ formatMessage
644
+ } = useIntl();
645
+ const mergedProps = Object.assign({}, {
385
646
  fieldName: 'monthDatePicker'
386
647
  }, props);
387
648
  const render = useOnChange$5(Object.assign({
388
- placeholder: ['开始时间', '结束时间']
389
- }, props));
649
+ placeholder: [formatMessage({
650
+ id: 'StartTime'
651
+ }), formatMessage({
652
+ id: 'EndTime'
653
+ })]
654
+ }, mergedProps));
390
655
  return render(MonthPicker);
391
656
  };
392
- _MonthPicker.Field = MonthPicker;
393
- const _RangePicker = props => {
394
- props = Object.assign({}, {
657
+ MonthPickerInner.Field = MonthPicker;
658
+ const RangePickerInner = props => {
659
+ const {
660
+ formatMessage
661
+ } = useIntl();
662
+ const mergedProps = Object.assign({}, {
395
663
  fieldName: 'rangeDatePicker'
396
664
  }, props);
397
665
  const render = useOnChange$5(Object.assign({
398
- placeholder: ['开始时间', '结束时间']
399
- }, props));
666
+ placeholder: [formatMessage({
667
+ id: 'StartTime'
668
+ }), formatMessage({
669
+ id: 'EndTime'
670
+ })]
671
+ }, mergedProps));
400
672
  return render(RangePicker);
401
673
  };
402
- _RangePicker.Field = RangePicker;
403
- const _WeekPicker = props => {
404
- props = Object.assign({}, {
674
+ RangePickerInner.Field = RangePicker;
675
+ const WeekPickerInner = props => {
676
+ const {
677
+ formatMessage
678
+ } = useIntl();
679
+ const mergedProps = Object.assign({}, {
405
680
  fieldName: 'weekDatePicker'
406
681
  }, props);
407
682
  const render = useOnChange$5(Object.assign({
408
- placeholder: ['开始时间', '结束时间']
409
- }, props));
683
+ placeholder: [formatMessage({
684
+ id: 'StartTime'
685
+ }), formatMessage({
686
+ id: 'EndTime'
687
+ })]
688
+ }, mergedProps));
410
689
  return render(WeekPicker);
411
690
  };
412
- _WeekPicker.Field = WeekPicker;
413
- _DatePicker.MonthPicker = _MonthPicker;
414
- _DatePicker.RangePicker = _RangePicker;
415
- _DatePicker.WeekPicker = _WeekPicker;
691
+ WeekPickerInner.Field = WeekPicker;
692
+ const _DatePicker = withLocale(DatePickerInner);
693
+ _DatePicker.MonthPicker = withLocale(MonthPickerInner);
694
+ _DatePicker.RangePicker = withLocale(RangePickerInner);
695
+ _DatePicker.WeekPicker = withLocale(WeekPickerInner);
416
696
 
417
697
  const {
418
698
  useOnChange: useOnChange$4