iglooform 2.5.43 → 2.5.45

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.
@@ -62,7 +62,7 @@ var IglooDatePicker = function IglooDatePicker(_ref) {
62
62
  setFocus = _useState2[1];
63
63
 
64
64
  return _jsx(_DatePicker, _objectSpread(_objectSpread({}, omit(props, formMethods)), {}, {
65
- value: value ? moment(value) : value,
65
+ value: moment(value),
66
66
  placeholder: placeholder || dateFormater,
67
67
  format: format || dateFormater,
68
68
  inputReadOnly: true,
@@ -89,7 +89,7 @@ IglooDatePicker.formItemPropsHandler = function (_ref2) {
89
89
  return moment(value).format(format || dateFormater);
90
90
  },
91
91
  valueFormater: function valueFormater(value) {
92
- return value ? +moment(value) : value;
92
+ return +moment(value);
93
93
  },
94
94
  'element-allowClear': false
95
95
  };
package/es/form/index.js CHANGED
@@ -95,22 +95,24 @@ var IglooForm = function IglooForm(props, ref) {
95
95
 
96
96
  var handleSubmit = /*#__PURE__*/function () {
97
97
  var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(values) {
98
- var errors;
98
+ var allValues, errors;
99
99
  return regeneratorRuntime.wrap(function _callee$(_context) {
100
100
  while (1) {
101
101
  switch (_context.prev = _context.next) {
102
102
  case 0:
103
+ allValues = form.getFieldsValue(true);
104
+
103
105
  if (!(typeof onSubmit === 'function')) {
104
- _context.next = 10;
106
+ _context.next = 11;
105
107
  break;
106
108
  }
107
109
 
108
110
  setSubmitting(true);
109
- _context.prev = 2;
110
- _context.next = 5;
111
- return onSubmit(values);
111
+ _context.prev = 3;
112
+ _context.next = 6;
113
+ return onSubmit(values, allValues);
112
114
 
113
- case 5:
115
+ case 6:
114
116
  errors = _context.sent;
115
117
 
116
118
  if (Array.isArray(errors)) {
@@ -118,17 +120,17 @@ var IglooForm = function IglooForm(props, ref) {
118
120
  form.scrollToField(errors[0].name);
119
121
  }
120
122
 
121
- case 7:
122
- _context.prev = 7;
123
+ case 8:
124
+ _context.prev = 8;
123
125
  setSubmitting(false);
124
- return _context.finish(7);
126
+ return _context.finish(8);
125
127
 
126
- case 10:
128
+ case 11:
127
129
  case "end":
128
130
  return _context.stop();
129
131
  }
130
132
  }
131
- }, _callee, null, [[2,, 7, 10]]);
133
+ }, _callee, null, [[3,, 8, 11]]);
132
134
  }));
133
135
 
134
136
  return function handleSubmit(_x) {
@@ -139,7 +141,7 @@ var IglooForm = function IglooForm(props, ref) {
139
141
  useImperativeHandle(ref, function () {
140
142
  return {
141
143
  getValues: function () {
142
- var _getValues = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
144
+ var _getValues = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(getAll) {
143
145
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
144
146
  while (1) {
145
147
  switch (_context2.prev = _context2.next) {
@@ -148,7 +150,7 @@ var IglooForm = function IglooForm(props, ref) {
148
150
  return form.validateFields();
149
151
 
150
152
  case 2:
151
- return _context2.abrupt("return", form.getFieldsValue());
153
+ return _context2.abrupt("return", getAll ? form.getFieldsValue(true) : form.getFieldsValue());
152
154
 
153
155
  case 3:
154
156
  case "end":
@@ -158,7 +160,7 @@ var IglooForm = function IglooForm(props, ref) {
158
160
  }, _callee2);
159
161
  }));
160
162
 
161
- function getValues() {
163
+ function getValues(_x2) {
162
164
  return _getValues.apply(this, arguments);
163
165
  }
164
166
 
@@ -241,6 +243,7 @@ var IglooForm = function IglooForm(props, ref) {
241
243
  validateMessages: validateMessages || messages,
242
244
  initialValues: initialValues,
243
245
  scrollToFirstError: true,
246
+ preserve: true,
244
247
  children: [type === 'Pages' && _jsx(Pages, {
245
248
  config: config
246
249
  }), type === 'Page' && _jsx(Page, {
package/es/types.d.ts CHANGED
@@ -21,7 +21,7 @@ export interface FormBasicConfig {
21
21
  initialValues?: any;
22
22
  form?: FormInstance;
23
23
  onCancel?(): void;
24
- onSubmit?(values: Object): any;
24
+ onSubmit?(values: Object, allValues?: Object): any;
25
25
  requiredMark?: boolean;
26
26
  showSubmitButton?: boolean;
27
27
  getScrollContainer?: () => HTMLElement | null;
@@ -103,11 +103,19 @@ export interface FormItemExtraConfig extends FormItemProps {
103
103
  relativeRangeStart?: {
104
104
  type: 'day' | 'month' | 'year';
105
105
  quantity: number;
106
+ pattern?: string;
107
+ dependField?: NamePath;
106
108
  };
107
109
  relativeRangeEnd?: {
108
110
  type: 'day' | 'month' | 'year';
109
111
  quantity: number;
112
+ pattern?: string;
113
+ dependField?: NamePath;
110
114
  };
115
+ validationCode?: {
116
+ code: string;
117
+ errorMessage: string;
118
+ }[];
111
119
  length?: number;
112
120
  minLength?: number;
113
121
  maxLength?: number;
@@ -1,4 +1,4 @@
1
- var _excluded = ["type", "name", "required", "requiredAsserts", "showOptional", "rules", "initialValue", "normalize", "mergeRules", "getValueFromEvent", "getValueProps", "extra", "help", "label", "previewLabel", "extraLabel", "copyValue", "selectValue", "span", "halfRow", "fullRow", "valuePropName", "dependencies", "asserts", "messageVariables", "requiredMessage", "previewFormater", "disabled", "ignore", "shouldRender", "valueFormater", "antdDependencies", "dateLimitationType", "absoluteRangeEnd", "absoluteRangeStart", "relativeRangeStart", "relativeRangeEnd"],
1
+ var _excluded = ["type", "name", "required", "requiredAsserts", "showOptional", "rules", "initialValue", "normalize", "mergeRules", "getValueFromEvent", "getValueProps", "extra", "help", "label", "previewLabel", "extraLabel", "copyValue", "selectValue", "span", "halfRow", "fullRow", "valuePropName", "dependencies", "asserts", "messageVariables", "requiredMessage", "previewFormater", "disabled", "ignore", "shouldRender", "valueFormater", "antdDependencies", "dateLimitationType", "absoluteRangeEnd", "absoluteRangeStart", "relativeRangeStart", "relativeRangeEnd", "validationCode"],
2
2
  _excluded2 = ["initialValue", "normalize", "rules", "extra", "help", "getValueFromEvent", "span", "valuePropName", "fullRow", "halfRow", "messageVariables", "requiredMessage", "previewFormater", "valueFormater", "required", "requiredMark", "className"];
3
3
 
4
4
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
@@ -157,6 +157,8 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
157
157
  absoluteRangeStart = config.absoluteRangeStart,
158
158
  relativeRangeStart = config.relativeRangeStart,
159
159
  relativeRangeEnd = config.relativeRangeEnd,
160
+ _config$validationCod = config.validationCode,
161
+ validationCode = _config$validationCod === void 0 ? [] : _config$validationCod,
160
162
  rest = _objectWithoutProperties(config, _excluded);
161
163
 
162
164
  invariant(nameProp !== undefined || type === 'Divider' || type === 'Section' || type === 'Typography' || !type, "name property is required for form item config (type: ".concat(type, ")"));
@@ -217,71 +219,84 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
217
219
  elementProps.disabled = calcDisabled(disabled, form) || copiedValue.disabled || selectedValue.disabled;
218
220
 
219
221
  if (dateLimitationType) {
220
- if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
221
- var rangeStart = Number.MIN_SAFE_INTEGER;
222
- var rangeEnd = Number.MAX_SAFE_INTEGER;
222
+ var rangeStart;
223
+ var rangeEnd;
223
224
 
224
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
225
- rangeStart = +moment(absoluteRangeStart).startOf('day');
226
- }
225
+ if (dateLimitationType === 'absolute' && absoluteRangeStart) {
226
+ rangeStart = moment(absoluteRangeStart).startOf('day');
227
+ }
227
228
 
228
- if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
229
- rangeStart = +moment().add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
230
- }
229
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
230
+ var dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
231
+ rangeStart = moment(dependFieldValue).add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
232
+ }
231
233
 
232
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
233
- rangeEnd = +moment(absoluteRangeEnd).endOf('day');
234
- }
234
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.pattern)) {
235
+ var result = Array.from(relativeRangeStart.pattern.matchAll(/^(([-|+]{0,1}\d+)y){0,1}(([-|+]{0,1}\d+)m){0,1}(([-|+]{0,1}\d+)d){0,1}$/g));
236
+
237
+ if (result.length) {
238
+ var year = result[0][2] || 0;
239
+ var month = result[0][4] || 0;
240
+ var day = result[0][6] || 0;
241
+
242
+ var _dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
235
243
 
236
- if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
237
- rangeEnd = +moment().add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
244
+ rangeStart = moment(_dependFieldValue).add(year, 'year').add(month, 'month').add(day, 'day').startOf('day');
238
245
  }
246
+ }
239
247
 
240
- elementProps.disabledDate = function (current) {
241
- return +current < rangeStart || +current > (rangeEnd || Number.MAX_SAFE_INTEGER);
242
- };
248
+ if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
249
+ rangeEnd = moment(absoluteRangeEnd).endOf('day');
243
250
  }
244
251
 
245
- if (type === 'InputDate') {
246
- var _rangeStart;
252
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
253
+ var _dependFieldValue2 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
247
254
 
248
- var _rangeEnd;
255
+ rangeEnd = moment(_dependFieldValue2).add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
256
+ }
249
257
 
250
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
251
- _rangeStart = moment(absoluteRangeStart).startOf('day');
252
- }
258
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.pattern)) {
259
+ var _result = Array.from(relativeRangeEnd.pattern.matchAll(/^(([-|+]{0,1}\d+)y){0,1}(([-|+]{0,1}\d+)m){0,1}(([-|+]{0,1}\d+)d){0,1}$/g));
253
260
 
254
- if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
255
- _rangeStart = moment().add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
256
- }
261
+ if (_result.length) {
262
+ var _year = _result[0][2] || 0;
257
263
 
258
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
259
- _rangeEnd = moment(absoluteRangeEnd).endOf('day');
260
- }
264
+ var _month = _result[0][4] || 0;
265
+
266
+ var _day = _result[0][6] || 0;
261
267
 
262
- if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
263
- _rangeEnd = moment().add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
268
+ var _dependFieldValue3 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
269
+
270
+ rangeEnd = moment(_dependFieldValue3).add(_year, 'year').add(_month, 'month').add(_day, 'day').endOf('day');
264
271
  }
272
+ }
265
273
 
274
+ if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
275
+ elementProps.disabledDate = function (current) {
276
+ return +current < (rangeStart ? +rangeStart : Number.MIN_SAFE_INTEGER) || +current > (rangeEnd ? +rangeEnd : Number.MAX_SAFE_INTEGER);
277
+ };
278
+ }
279
+
280
+ if (type === 'InputDate') {
266
281
  rules.push({
267
282
  validator: function validator(_, date) {
268
283
  var trimedDate = date.replaceAll(/\s/g, '');
269
284
  var format = elementProps.format ? elementProps.format.replaceAll(/\s/g, '') : 'DD/MM/YYYY';
270
285
 
271
- if (_rangeStart && moment(trimedDate, format) < _rangeStart) {
286
+ if (rangeStart && moment(trimedDate, format) < rangeStart) {
272
287
  return Promise.reject(_jsx(FormattedMessage, {
273
288
  id: "Please input a date after {date}",
274
289
  values: {
275
- date: _rangeStart.format(format)
290
+ date: rangeStart.format(format)
276
291
  }
277
292
  }));
278
293
  }
279
294
 
280
- if (_rangeEnd && moment(trimedDate, format) > _rangeEnd) {
295
+ if (rangeEnd && moment(trimedDate, format) > rangeEnd) {
281
296
  return Promise.reject(_jsx(FormattedMessage, {
282
297
  id: "Please input a date before {date}",
283
298
  values: {
284
- date: _rangeEnd.format(format)
299
+ date: rangeEnd.format(format)
285
300
  }
286
301
  }));
287
302
  }
@@ -292,6 +307,27 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
292
307
  }
293
308
  }
294
309
 
310
+ if (validationCode.length) {
311
+ rules.push.apply(rules, _toConsumableArray(validationCode.map(function (_ref2) {
312
+ var code = _ref2.code,
313
+ errorMessage = _ref2.errorMessage;
314
+ return {
315
+ validator: function validator(_, value) {
316
+ try {
317
+ var fn = eval(code);
318
+ var formValues = form === null || form === void 0 ? void 0 : form.getFieldsValue(true);
319
+
320
+ var _result2 = fn(value, formValues);
321
+
322
+ return _result2 ? Promise.resolve() : Promise.reject(errorMessage);
323
+ } catch (_unused) {
324
+ return Promise.reject(errorMessage);
325
+ }
326
+ }
327
+ };
328
+ })));
329
+ }
330
+
295
331
  return {
296
332
  colProps: {
297
333
  span: extraFullRow && fullRow === undefined || fullRow || extraHalfRow && halfRow === undefined || halfRow ? 24 : span || extraSpan || 12,
@@ -303,7 +339,7 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
303
339
  formItemProps: {
304
340
  name: name,
305
341
  className: className,
306
- initialValue: (valueFormater || extraValueFormater)(initialValue || extraInitialValue),
342
+ initialValue: (valueFormater || extraValueFormater)(initialValue !== null && initialValue !== void 0 ? initialValue : extraInitialValue),
307
343
  copiedValue: copiedValue,
308
344
  selectedValue: selectedValue,
309
345
  normalize: normalize || extraNormalize,
@@ -89,7 +89,7 @@ var IglooDatePicker = function IglooDatePicker(_ref) {
89
89
  setFocus = _useState2[1];
90
90
 
91
91
  return (0, _jsxRuntime.jsx)(_datePicker.default, _objectSpread(_objectSpread({}, (0, _omit.default)(props, _formMethods.default)), {}, {
92
- value: value ? (0, _moment.default)(value) : value,
92
+ value: (0, _moment.default)(value),
93
93
  placeholder: placeholder || dateFormater,
94
94
  format: format || dateFormater,
95
95
  inputReadOnly: true,
@@ -116,7 +116,7 @@ IglooDatePicker.formItemPropsHandler = function (_ref2) {
116
116
  return (0, _moment.default)(value).format(format || dateFormater);
117
117
  },
118
118
  valueFormater: function valueFormater(value) {
119
- return value ? +(0, _moment.default)(value) : value;
119
+ return +(0, _moment.default)(value);
120
120
  },
121
121
  'element-allowClear': false
122
122
  };
package/lib/form/index.js CHANGED
@@ -117,22 +117,24 @@ var IglooForm = function IglooForm(props, ref) {
117
117
 
118
118
  var handleSubmit = /*#__PURE__*/function () {
119
119
  var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(values) {
120
- var errors;
120
+ var allValues, errors;
121
121
  return regeneratorRuntime.wrap(function _callee$(_context) {
122
122
  while (1) {
123
123
  switch (_context.prev = _context.next) {
124
124
  case 0:
125
+ allValues = form.getFieldsValue(true);
126
+
125
127
  if (!(typeof onSubmit === 'function')) {
126
- _context.next = 10;
128
+ _context.next = 11;
127
129
  break;
128
130
  }
129
131
 
130
132
  setSubmitting(true);
131
- _context.prev = 2;
132
- _context.next = 5;
133
- return onSubmit(values);
133
+ _context.prev = 3;
134
+ _context.next = 6;
135
+ return onSubmit(values, allValues);
134
136
 
135
- case 5:
137
+ case 6:
136
138
  errors = _context.sent;
137
139
 
138
140
  if (Array.isArray(errors)) {
@@ -140,17 +142,17 @@ var IglooForm = function IglooForm(props, ref) {
140
142
  form.scrollToField(errors[0].name);
141
143
  }
142
144
 
143
- case 7:
144
- _context.prev = 7;
145
+ case 8:
146
+ _context.prev = 8;
145
147
  setSubmitting(false);
146
- return _context.finish(7);
148
+ return _context.finish(8);
147
149
 
148
- case 10:
150
+ case 11:
149
151
  case "end":
150
152
  return _context.stop();
151
153
  }
152
154
  }
153
- }, _callee, null, [[2,, 7, 10]]);
155
+ }, _callee, null, [[3,, 8, 11]]);
154
156
  }));
155
157
 
156
158
  return function handleSubmit(_x) {
@@ -161,7 +163,7 @@ var IglooForm = function IglooForm(props, ref) {
161
163
  (0, _react.useImperativeHandle)(ref, function () {
162
164
  return {
163
165
  getValues: function () {
164
- var _getValues = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
166
+ var _getValues = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(getAll) {
165
167
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
166
168
  while (1) {
167
169
  switch (_context2.prev = _context2.next) {
@@ -170,7 +172,7 @@ var IglooForm = function IglooForm(props, ref) {
170
172
  return form.validateFields();
171
173
 
172
174
  case 2:
173
- return _context2.abrupt("return", form.getFieldsValue());
175
+ return _context2.abrupt("return", getAll ? form.getFieldsValue(true) : form.getFieldsValue());
174
176
 
175
177
  case 3:
176
178
  case "end":
@@ -180,7 +182,7 @@ var IglooForm = function IglooForm(props, ref) {
180
182
  }, _callee2);
181
183
  }));
182
184
 
183
- function getValues() {
185
+ function getValues(_x2) {
184
186
  return _getValues.apply(this, arguments);
185
187
  }
186
188
 
@@ -263,6 +265,7 @@ var IglooForm = function IglooForm(props, ref) {
263
265
  validateMessages: validateMessages || _messages.default,
264
266
  initialValues: initialValues,
265
267
  scrollToFirstError: true,
268
+ preserve: true,
266
269
  children: [type === 'Pages' && (0, _jsxRuntime.jsx)(_pages.default, {
267
270
  config: config
268
271
  }), type === 'Page' && (0, _jsxRuntime.jsx)(_page.default, {
package/lib/types.d.ts CHANGED
@@ -21,7 +21,7 @@ export interface FormBasicConfig {
21
21
  initialValues?: any;
22
22
  form?: FormInstance;
23
23
  onCancel?(): void;
24
- onSubmit?(values: Object): any;
24
+ onSubmit?(values: Object, allValues?: Object): any;
25
25
  requiredMark?: boolean;
26
26
  showSubmitButton?: boolean;
27
27
  getScrollContainer?: () => HTMLElement | null;
@@ -103,11 +103,19 @@ export interface FormItemExtraConfig extends FormItemProps {
103
103
  relativeRangeStart?: {
104
104
  type: 'day' | 'month' | 'year';
105
105
  quantity: number;
106
+ pattern?: string;
107
+ dependField?: NamePath;
106
108
  };
107
109
  relativeRangeEnd?: {
108
110
  type: 'day' | 'month' | 'year';
109
111
  quantity: number;
112
+ pattern?: string;
113
+ dependField?: NamePath;
110
114
  };
115
+ validationCode?: {
116
+ code: string;
117
+ errorMessage: string;
118
+ }[];
111
119
  length?: number;
112
120
  minLength?: number;
113
121
  maxLength?: number;
@@ -15,7 +15,7 @@ var _formattedMessage = _interopRequireDefault(require("../locale/formatted-mess
15
15
 
16
16
  var _moment = _interopRequireDefault(require("moment"));
17
17
 
18
- var _excluded = ["type", "name", "required", "requiredAsserts", "showOptional", "rules", "initialValue", "normalize", "mergeRules", "getValueFromEvent", "getValueProps", "extra", "help", "label", "previewLabel", "extraLabel", "copyValue", "selectValue", "span", "halfRow", "fullRow", "valuePropName", "dependencies", "asserts", "messageVariables", "requiredMessage", "previewFormater", "disabled", "ignore", "shouldRender", "valueFormater", "antdDependencies", "dateLimitationType", "absoluteRangeEnd", "absoluteRangeStart", "relativeRangeStart", "relativeRangeEnd"],
18
+ var _excluded = ["type", "name", "required", "requiredAsserts", "showOptional", "rules", "initialValue", "normalize", "mergeRules", "getValueFromEvent", "getValueProps", "extra", "help", "label", "previewLabel", "extraLabel", "copyValue", "selectValue", "span", "halfRow", "fullRow", "valuePropName", "dependencies", "asserts", "messageVariables", "requiredMessage", "previewFormater", "disabled", "ignore", "shouldRender", "valueFormater", "antdDependencies", "dateLimitationType", "absoluteRangeEnd", "absoluteRangeStart", "relativeRangeStart", "relativeRangeEnd", "validationCode"],
19
19
  _excluded2 = ["initialValue", "normalize", "rules", "extra", "help", "getValueFromEvent", "span", "valuePropName", "fullRow", "halfRow", "messageVariables", "requiredMessage", "previewFormater", "valueFormater", "required", "requiredMark", "className"];
20
20
 
21
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -176,6 +176,8 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
176
176
  absoluteRangeStart = config.absoluteRangeStart,
177
177
  relativeRangeStart = config.relativeRangeStart,
178
178
  relativeRangeEnd = config.relativeRangeEnd,
179
+ _config$validationCod = config.validationCode,
180
+ validationCode = _config$validationCod === void 0 ? [] : _config$validationCod,
179
181
  rest = _objectWithoutProperties(config, _excluded);
180
182
 
181
183
  (0, _invariant.default)(nameProp !== undefined || type === 'Divider' || type === 'Section' || type === 'Typography' || !type, "name property is required for form item config (type: ".concat(type, ")"));
@@ -236,71 +238,84 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
236
238
  elementProps.disabled = calcDisabled(disabled, form) || copiedValue.disabled || selectedValue.disabled;
237
239
 
238
240
  if (dateLimitationType) {
239
- if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
240
- var rangeStart = Number.MIN_SAFE_INTEGER;
241
- var rangeEnd = Number.MAX_SAFE_INTEGER;
241
+ var rangeStart;
242
+ var rangeEnd;
242
243
 
243
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
244
- rangeStart = +(0, _moment.default)(absoluteRangeStart).startOf('day');
245
- }
244
+ if (dateLimitationType === 'absolute' && absoluteRangeStart) {
245
+ rangeStart = (0, _moment.default)(absoluteRangeStart).startOf('day');
246
+ }
246
247
 
247
- if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
248
- rangeStart = +(0, _moment.default)().add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
249
- }
248
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
249
+ var dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
250
+ rangeStart = (0, _moment.default)(dependFieldValue).add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
251
+ }
250
252
 
251
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
252
- rangeEnd = +(0, _moment.default)(absoluteRangeEnd).endOf('day');
253
- }
253
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.pattern)) {
254
+ var result = Array.from(relativeRangeStart.pattern.matchAll(/^(([-|+]{0,1}\d+)y){0,1}(([-|+]{0,1}\d+)m){0,1}(([-|+]{0,1}\d+)d){0,1}$/g));
255
+
256
+ if (result.length) {
257
+ var year = result[0][2] || 0;
258
+ var month = result[0][4] || 0;
259
+ var day = result[0][6] || 0;
260
+
261
+ var _dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
254
262
 
255
- if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
256
- rangeEnd = +(0, _moment.default)().add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
263
+ rangeStart = (0, _moment.default)(_dependFieldValue).add(year, 'year').add(month, 'month').add(day, 'day').startOf('day');
257
264
  }
265
+ }
258
266
 
259
- elementProps.disabledDate = function (current) {
260
- return +current < rangeStart || +current > (rangeEnd || Number.MAX_SAFE_INTEGER);
261
- };
267
+ if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
268
+ rangeEnd = (0, _moment.default)(absoluteRangeEnd).endOf('day');
262
269
  }
263
270
 
264
- if (type === 'InputDate') {
265
- var _rangeStart;
271
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
272
+ var _dependFieldValue2 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
266
273
 
267
- var _rangeEnd;
274
+ rangeEnd = (0, _moment.default)(_dependFieldValue2).add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
275
+ }
268
276
 
269
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
270
- _rangeStart = (0, _moment.default)(absoluteRangeStart).startOf('day');
271
- }
277
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.pattern)) {
278
+ var _result = Array.from(relativeRangeEnd.pattern.matchAll(/^(([-|+]{0,1}\d+)y){0,1}(([-|+]{0,1}\d+)m){0,1}(([-|+]{0,1}\d+)d){0,1}$/g));
272
279
 
273
- if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
274
- _rangeStart = (0, _moment.default)().add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
275
- }
280
+ if (_result.length) {
281
+ var _year = _result[0][2] || 0;
276
282
 
277
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
278
- _rangeEnd = (0, _moment.default)(absoluteRangeEnd).endOf('day');
279
- }
283
+ var _month = _result[0][4] || 0;
284
+
285
+ var _day = _result[0][6] || 0;
280
286
 
281
- if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
282
- _rangeEnd = (0, _moment.default)().add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
287
+ var _dependFieldValue3 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
288
+
289
+ rangeEnd = (0, _moment.default)(_dependFieldValue3).add(_year, 'year').add(_month, 'month').add(_day, 'day').endOf('day');
283
290
  }
291
+ }
284
292
 
293
+ if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
294
+ elementProps.disabledDate = function (current) {
295
+ return +current < (rangeStart ? +rangeStart : Number.MIN_SAFE_INTEGER) || +current > (rangeEnd ? +rangeEnd : Number.MAX_SAFE_INTEGER);
296
+ };
297
+ }
298
+
299
+ if (type === 'InputDate') {
285
300
  rules.push({
286
301
  validator: function validator(_, date) {
287
302
  var trimedDate = date.replaceAll(/\s/g, '');
288
303
  var format = elementProps.format ? elementProps.format.replaceAll(/\s/g, '') : 'DD/MM/YYYY';
289
304
 
290
- if (_rangeStart && (0, _moment.default)(trimedDate, format) < _rangeStart) {
305
+ if (rangeStart && (0, _moment.default)(trimedDate, format) < rangeStart) {
291
306
  return Promise.reject((0, _jsxRuntime.jsx)(_formattedMessage.default, {
292
307
  id: "Please input a date after {date}",
293
308
  values: {
294
- date: _rangeStart.format(format)
309
+ date: rangeStart.format(format)
295
310
  }
296
311
  }));
297
312
  }
298
313
 
299
- if (_rangeEnd && (0, _moment.default)(trimedDate, format) > _rangeEnd) {
314
+ if (rangeEnd && (0, _moment.default)(trimedDate, format) > rangeEnd) {
300
315
  return Promise.reject((0, _jsxRuntime.jsx)(_formattedMessage.default, {
301
316
  id: "Please input a date before {date}",
302
317
  values: {
303
- date: _rangeEnd.format(format)
318
+ date: rangeEnd.format(format)
304
319
  }
305
320
  }));
306
321
  }
@@ -311,6 +326,27 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
311
326
  }
312
327
  }
313
328
 
329
+ if (validationCode.length) {
330
+ rules.push.apply(rules, _toConsumableArray(validationCode.map(function (_ref2) {
331
+ var code = _ref2.code,
332
+ errorMessage = _ref2.errorMessage;
333
+ return {
334
+ validator: function validator(_, value) {
335
+ try {
336
+ var fn = eval(code);
337
+ var formValues = form === null || form === void 0 ? void 0 : form.getFieldsValue(true);
338
+
339
+ var _result2 = fn(value, formValues);
340
+
341
+ return _result2 ? Promise.resolve() : Promise.reject(errorMessage);
342
+ } catch (_unused) {
343
+ return Promise.reject(errorMessage);
344
+ }
345
+ }
346
+ };
347
+ })));
348
+ }
349
+
314
350
  return {
315
351
  colProps: {
316
352
  span: extraFullRow && fullRow === undefined || fullRow || extraHalfRow && halfRow === undefined || halfRow ? 24 : span || extraSpan || 12,
@@ -322,7 +358,7 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
322
358
  formItemProps: {
323
359
  name: name,
324
360
  className: className,
325
- initialValue: (valueFormater || extraValueFormater)(initialValue || extraInitialValue),
361
+ initialValue: (valueFormater || extraValueFormater)(initialValue !== null && initialValue !== void 0 ? initialValue : extraInitialValue),
326
362
  copiedValue: copiedValue,
327
363
  selectedValue: selectedValue,
328
364
  normalize: normalize || extraNormalize,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iglooform",
3
- "version": "2.5.43",
3
+ "version": "2.5.45",
4
4
  "scripts": {
5
5
  "start": "dumi dev",
6
6
  "build-dev": "dumi build",