@kne/react-form-antd 4.1.4 → 4.1.5

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.
package/README.md CHANGED
@@ -539,6 +539,23 @@ const DatePickerExample = () => {
539
539
  </Form>
540
540
  </Card>
541
541
 
542
+ <Card title="字符串初始值(兼容 antd 6)" size="small">
543
+ <Form
544
+ data={{
545
+ stringDate: '2024-06-15',
546
+ stringRange: ['2024-01-01', '2024-12-31'],
547
+ stringTime: '14:30:00'
548
+ }}
549
+ onSubmit={setFormData}
550
+ >
551
+ <Flex vertical gap={16}>
552
+ <DatePicker name="stringDate" label="日期字符串" placeholder="请选择日期" />
553
+ <DatePicker.RangePicker name="stringRange" label="范围字符串" placeholder={['开始日期', '结束日期']} />
554
+ <TimePicker name="stringTime" label="时间字符串" format="HH:mm:ss" placeholder="请选择时间" />
555
+ </Flex>
556
+ </Form>
557
+ </Card>
558
+
542
559
  <Card title="TimePicker 时间选择" size="small">
543
560
  <Form onSubmit={setFormData}>
544
561
  <Flex vertical gap={16}>
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ var merge = require('lodash/merge');
6
6
  var antd = require('antd');
7
7
  var reactIntl = require('@kne/react-intl');
8
8
  var dayjs = require('dayjs');
9
+ var customParseFormat = require('dayjs/plugin/customParseFormat');
9
10
  var useControlValue = require('@kne/use-control-value');
10
11
 
11
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -34,6 +35,7 @@ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
34
35
  var ReactForm__default = /*#__PURE__*/_interopDefaultLegacy(ReactForm);
35
36
  var merge__default = /*#__PURE__*/_interopDefaultLegacy(merge);
36
37
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
38
+ var customParseFormat__default = /*#__PURE__*/_interopDefaultLegacy(customParseFormat);
37
39
  var useControlValue__default = /*#__PURE__*/_interopDefaultLegacy(useControlValue);
38
40
 
39
41
  function _extends$3() {
@@ -77,7 +79,7 @@ var preset = (function (props) {
77
79
  ReactForm.preset(globalParams.rules);
78
80
  });
79
81
 
80
- var _excluded$4 = ["className", "cache", "enterSubmit", "scrollToError", "scrollProps", "type", "size", "children"];
82
+ var _excluded$5 = ["className", "cache", "enterSubmit", "scrollToError", "scrollProps", "type", "size", "children"];
81
83
  var ScrollToError = reactFormHelper.widget.ScrollToError,
82
84
  EnterSubmit = reactFormHelper.widget.EnterSubmit,
83
85
  FormStore = reactFormHelper.widget.FormStore,
@@ -95,7 +97,7 @@ var Form = React.forwardRef(function (originProps, ref) {
95
97
  block: 'center'
96
98
  } : _originProps$scrollPr,
97
99
  children = originProps.children,
98
- props = _objectWithoutPropertiesLoose(originProps, _excluded$4);
100
+ props = _objectWithoutPropertiesLoose(originProps, _excluded$5);
99
101
  var baseClass = 'react-form';
100
102
  var computedClass = baseClass;
101
103
  var _Object$assign = Object.assign({
@@ -179,8 +181,138 @@ TreeSelectInner.Field = antd.TreeSelect;
179
181
  TreeSelectInner.TreeNode = antd.TreeSelect.TreeNode;
180
182
  var _TreeSelect = withLocale(TreeSelectInner);
181
183
 
184
+ dayjs__default["default"].extend(customParseFormat__default["default"]);
185
+
186
+ /**
187
+ * Convert form/API date values to dayjs for antd DatePicker/TimePicker.
188
+ * Newer @rc-component/picker getUDayjs returns non-dayjs values as-is,
189
+ * then calls .isValid() and throws on plain strings.
190
+ */
191
+ var toDayjs = function toDayjs(value, format) {
192
+ if (value == null || value === '') {
193
+ return null;
194
+ }
195
+ if (dayjs__default["default"].isDayjs(value)) {
196
+ return value;
197
+ }
198
+ if (typeof value === 'string' && typeof format === 'string' && format) {
199
+ var _parsed = dayjs__default["default"](value, format, true);
200
+ if (_parsed.isValid()) {
201
+ return _parsed;
202
+ }
203
+ }
204
+ var parsed = dayjs__default["default"](value);
205
+ return parsed.isValid() ? parsed : null;
206
+ };
207
+ var toDayjsValue = function toDayjsValue(value, format) {
208
+ if (Array.isArray(value)) {
209
+ return value.map(function (item) {
210
+ return toDayjs(item, format);
211
+ });
212
+ }
213
+ return toDayjs(value, format);
214
+ };
215
+
216
+ /**
217
+ * Date-only pickers should emit start of the selected unit (e.g. day at 00:00:00),
218
+ * not "selected date + current clock time".
219
+ */
220
+ var startOfByPicker = function startOfByPicker(value, picker) {
221
+ if (picker === void 0) {
222
+ picker = 'date';
223
+ }
224
+ if (!value || !dayjs__default["default"].isDayjs(value) || !value.isValid()) {
225
+ return value;
226
+ }
227
+ var unit = picker === 'week' ? 'week' : picker === 'month' ? 'month' : picker === 'quarter' ? 'quarter' : picker === 'year' ? 'year' : 'day';
228
+ return value.startOf(unit);
229
+ };
230
+ var normalizeDateValue = function normalizeDateValue(value, picker) {
231
+ if (picker === void 0) {
232
+ picker = 'date';
233
+ }
234
+ if (Array.isArray(value)) {
235
+ return value.map(function (item) {
236
+ return startOfByPicker(item, picker);
237
+ });
238
+ }
239
+ return startOfByPicker(value, picker);
240
+ };
241
+
242
+ var _excluded$4 = ["value", "defaultValue", "format", "showTime", "picker", "onChange"];
243
+
244
+ /**
245
+ * Wrap antd picker so string/number initial values from form/API become dayjs.
246
+ * When options.stripTime is true and showTime is off, onChange values are
247
+ * normalized to start of the picker unit (date → 00:00:00).
248
+ */
249
+ var withDayjsValue = function withDayjsValue(WrappedComponent, options) {
250
+ if (options === void 0) {
251
+ options = {};
252
+ }
253
+ var _options = options,
254
+ _options$stripTime = _options.stripTime,
255
+ stripTime = _options$stripTime === void 0 ? false : _options$stripTime,
256
+ _options$defaultPicke = _options.defaultPicker,
257
+ defaultPicker = _options$defaultPicke === void 0 ? 'date' : _options$defaultPicke;
258
+ var Component = React.forwardRef(function (_ref, ref) {
259
+ var value = _ref.value,
260
+ defaultValue = _ref.defaultValue,
261
+ format = _ref.format,
262
+ showTime = _ref.showTime,
263
+ picker = _ref.picker,
264
+ onChange = _ref.onChange,
265
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$4);
266
+ var mergedPicker = picker || defaultPicker;
267
+ var shouldStripTime = stripTime && !showTime;
268
+ var mergedValue = React.useMemo(function () {
269
+ if (value === undefined) {
270
+ return undefined;
271
+ }
272
+ var next = toDayjsValue(value, format);
273
+ return shouldStripTime ? normalizeDateValue(next, mergedPicker) : next;
274
+ }, [value, format, shouldStripTime, mergedPicker]);
275
+ var mergedDefaultValue = React.useMemo(function () {
276
+ if (defaultValue === undefined) {
277
+ return undefined;
278
+ }
279
+ var next = toDayjsValue(defaultValue, format);
280
+ return shouldStripTime ? normalizeDateValue(next, mergedPicker) : next;
281
+ }, [defaultValue, format, shouldStripTime, mergedPicker]);
282
+ var handleChange = React.useCallback(function (next) {
283
+ var rest = [].slice.call(arguments, 1);
284
+ if (!onChange) {
285
+ return;
286
+ }
287
+ if (shouldStripTime && next != null) {
288
+ onChange.apply(void 0, [normalizeDateValue(next, mergedPicker)].concat(rest));
289
+ return;
290
+ }
291
+ onChange.apply(void 0, [next].concat(rest));
292
+ }, [onChange, shouldStripTime, mergedPicker]);
293
+ return /*#__PURE__*/React__default["default"].createElement(WrappedComponent, _extends$3({}, props, {
294
+ ref: ref,
295
+ format: format,
296
+ showTime: showTime,
297
+ picker: picker,
298
+ value: mergedValue,
299
+ defaultValue: mergedDefaultValue,
300
+ onChange: handleChange
301
+ }));
302
+ });
303
+ Component.displayName = "withDayjsValue(" + (WrappedComponent.displayName || WrappedComponent.name || 'Component') + ")";
304
+ Object.keys(WrappedComponent).filter(function (key) {
305
+ return ['$$typeof', 'render', 'field'].indexOf(key) === -1;
306
+ }).forEach(function (key) {
307
+ Component[key] = WrappedComponent[key];
308
+ });
309
+ return Component;
310
+ };
311
+
182
312
  var useOnChange$a = reactFormHelper.hooks.useOnChange;
183
313
  var RangePicker$1 = antd.TimePicker.RangePicker;
314
+ var DayjsTimePicker = withDayjsValue(antd.TimePicker);
315
+ var DayjsRangePicker$1 = withDayjsValue(RangePicker$1);
184
316
  var TimePickerInner = function TimePickerInner(props) {
185
317
  var _useIntl = reactIntl.useIntl(),
186
318
  formatMessage = _useIntl.formatMessage;
@@ -194,9 +326,9 @@ var TimePickerInner = function TimePickerInner(props) {
194
326
  label: mergedProps.label || ''
195
327
  })
196
328
  }, mergedProps));
197
- return render(antd.TimePicker);
329
+ return render(DayjsTimePicker);
198
330
  };
199
- TimePickerInner.Field = antd.TimePicker;
331
+ TimePickerInner.Field = DayjsTimePicker;
200
332
  var RangePickerInner$1 = function RangePickerInner(props) {
201
333
  var _useIntl2 = reactIntl.useIntl(),
202
334
  formatMessage = _useIntl2.formatMessage;
@@ -210,9 +342,9 @@ var RangePickerInner$1 = function RangePickerInner(props) {
210
342
  label: mergedProps.label || ''
211
343
  })
212
344
  }, mergedProps));
213
- return render(RangePicker$1);
345
+ return render(DayjsRangePicker$1);
214
346
  };
215
- RangePickerInner$1.Field = RangePicker$1;
347
+ RangePickerInner$1.Field = DayjsRangePicker$1;
216
348
  var _TimePicker = withLocale(TimePickerInner);
217
349
  _TimePicker.RangePicker = withLocale(RangePickerInner$1);
218
350
 
@@ -1045,6 +1177,22 @@ var useOnChange$5 = reactFormHelper.hooks.useOnChange;
1045
1177
  var MonthPicker = antd.DatePicker.MonthPicker,
1046
1178
  RangePicker = antd.DatePicker.RangePicker,
1047
1179
  WeekPicker = antd.DatePicker.WeekPicker;
1180
+ var DayjsDatePicker = withDayjsValue(antd.DatePicker, {
1181
+ stripTime: true,
1182
+ defaultPicker: 'date'
1183
+ });
1184
+ var DayjsMonthPicker = MonthPicker ? withDayjsValue(MonthPicker, {
1185
+ stripTime: true,
1186
+ defaultPicker: 'month'
1187
+ }) : DayjsDatePicker;
1188
+ var DayjsRangePicker = withDayjsValue(RangePicker, {
1189
+ stripTime: true,
1190
+ defaultPicker: 'date'
1191
+ });
1192
+ var DayjsWeekPicker = WeekPicker ? withDayjsValue(WeekPicker, {
1193
+ stripTime: true,
1194
+ defaultPicker: 'week'
1195
+ }) : DayjsDatePicker;
1048
1196
  var DatePickerInner = function DatePickerInner(props) {
1049
1197
  var _useIntl = reactIntl.useIntl(),
1050
1198
  formatMessage = _useIntl.formatMessage;
@@ -1058,9 +1206,9 @@ var DatePickerInner = function DatePickerInner(props) {
1058
1206
  label: mergedProps.label || ''
1059
1207
  })
1060
1208
  }, mergedProps));
1061
- return render(antd.DatePicker);
1209
+ return render(DayjsDatePicker);
1062
1210
  };
1063
- DatePickerInner.Field = antd.DatePicker;
1211
+ DatePickerInner.Field = DayjsDatePicker;
1064
1212
  var MonthPickerInner = function MonthPickerInner(props) {
1065
1213
  var _useIntl2 = reactIntl.useIntl(),
1066
1214
  formatMessage = _useIntl2.formatMessage;
@@ -1074,9 +1222,9 @@ var MonthPickerInner = function MonthPickerInner(props) {
1074
1222
  id: 'EndTime'
1075
1223
  })]
1076
1224
  }, mergedProps));
1077
- return render(MonthPicker);
1225
+ return render(DayjsMonthPicker);
1078
1226
  };
1079
- MonthPickerInner.Field = MonthPicker;
1227
+ MonthPickerInner.Field = DayjsMonthPicker;
1080
1228
  var RangePickerInner = function RangePickerInner(props) {
1081
1229
  var _useIntl3 = reactIntl.useIntl(),
1082
1230
  formatMessage = _useIntl3.formatMessage;
@@ -1090,9 +1238,9 @@ var RangePickerInner = function RangePickerInner(props) {
1090
1238
  id: 'EndTime'
1091
1239
  })]
1092
1240
  }, mergedProps));
1093
- return render(RangePicker);
1241
+ return render(DayjsRangePicker);
1094
1242
  };
1095
- RangePickerInner.Field = RangePicker;
1243
+ RangePickerInner.Field = DayjsRangePicker;
1096
1244
  var WeekPickerInner = function WeekPickerInner(props) {
1097
1245
  var _useIntl4 = reactIntl.useIntl(),
1098
1246
  formatMessage = _useIntl4.formatMessage;
@@ -1106,9 +1254,9 @@ var WeekPickerInner = function WeekPickerInner(props) {
1106
1254
  id: 'EndTime'
1107
1255
  })]
1108
1256
  }, mergedProps));
1109
- return render(WeekPicker);
1257
+ return render(DayjsWeekPicker);
1110
1258
  };
1111
- WeekPickerInner.Field = WeekPicker;
1259
+ WeekPickerInner.Field = DayjsWeekPicker;
1112
1260
  var _DatePicker = withLocale(DatePickerInner);
1113
1261
  _DatePicker.MonthPicker = withLocale(MonthPickerInner);
1114
1262
  _DatePicker.RangePicker = withLocale(RangePickerInner);