iglooform 2.5.43 → 2.5.44

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", "dependField", "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,9 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
157
157
  absoluteRangeStart = config.absoluteRangeStart,
158
158
  relativeRangeStart = config.relativeRangeStart,
159
159
  relativeRangeEnd = config.relativeRangeEnd,
160
+ dependField = config.dependField,
161
+ _config$validationCod = config.validationCode,
162
+ validationCode = _config$validationCod === void 0 ? [] : _config$validationCod,
160
163
  rest = _objectWithoutProperties(config, _excluded);
161
164
 
162
165
  invariant(nameProp !== undefined || type === 'Divider' || type === 'Section' || type === 'Typography' || !type, "name property is required for form item config (type: ".concat(type, ")"));
@@ -217,71 +220,84 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
217
220
  elementProps.disabled = calcDisabled(disabled, form) || copiedValue.disabled || selectedValue.disabled;
218
221
 
219
222
  if (dateLimitationType) {
220
- if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
221
- var rangeStart = Number.MIN_SAFE_INTEGER;
222
- var rangeEnd = Number.MAX_SAFE_INTEGER;
223
+ var rangeStart;
224
+ var rangeEnd;
223
225
 
224
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
225
- rangeStart = +moment(absoluteRangeStart).startOf('day');
226
- }
226
+ if (dateLimitationType === 'absolute' && absoluteRangeStart) {
227
+ rangeStart = moment(absoluteRangeStart).startOf('day');
228
+ }
227
229
 
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
- }
230
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
231
+ var dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
232
+ rangeStart = moment(dependFieldValue).add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
233
+ }
231
234
 
232
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
233
- rangeEnd = +moment(absoluteRangeEnd).endOf('day');
234
- }
235
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.pattern)) {
236
+ 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));
237
+
238
+ if (result.length) {
239
+ var year = result[0][2] || 0;
240
+ var month = result[0][4] || 0;
241
+ var day = result[0][6] || 0;
242
+
243
+ var _dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
235
244
 
236
- if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
237
- rangeEnd = +moment().add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
245
+ rangeStart = moment(_dependFieldValue).add(year, 'year').add(month, 'month').add(day, 'day').startOf('day');
238
246
  }
247
+ }
239
248
 
240
- elementProps.disabledDate = function (current) {
241
- return +current < rangeStart || +current > (rangeEnd || Number.MAX_SAFE_INTEGER);
242
- };
249
+ if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
250
+ rangeEnd = moment(absoluteRangeEnd).endOf('day');
243
251
  }
244
252
 
245
- if (type === 'InputDate') {
246
- var _rangeStart;
253
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
254
+ var _dependFieldValue2 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
247
255
 
248
- var _rangeEnd;
256
+ rangeEnd = moment(_dependFieldValue2).add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
257
+ }
249
258
 
250
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
251
- _rangeStart = moment(absoluteRangeStart).startOf('day');
252
- }
259
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.pattern)) {
260
+ 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
261
 
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
- }
262
+ if (_result.length) {
263
+ var _year = _result[0][2] || 0;
257
264
 
258
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
259
- _rangeEnd = moment(absoluteRangeEnd).endOf('day');
260
- }
265
+ var _month = _result[0][4] || 0;
266
+
267
+ var _day = _result[0][6] || 0;
261
268
 
262
- if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
263
- _rangeEnd = moment().add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
269
+ var _dependFieldValue3 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
270
+
271
+ rangeEnd = moment(_dependFieldValue3).add(_year, 'year').add(_month, 'month').add(_day, 'day').endOf('day');
264
272
  }
273
+ }
265
274
 
275
+ if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
276
+ elementProps.disabledDate = function (current) {
277
+ return +current < (rangeStart ? +rangeStart : Number.MIN_SAFE_INTEGER) || +current > (rangeEnd ? +rangeEnd : Number.MAX_SAFE_INTEGER);
278
+ };
279
+ }
280
+
281
+ if (type === 'InputDate') {
266
282
  rules.push({
267
283
  validator: function validator(_, date) {
268
284
  var trimedDate = date.replaceAll(/\s/g, '');
269
285
  var format = elementProps.format ? elementProps.format.replaceAll(/\s/g, '') : 'DD/MM/YYYY';
270
286
 
271
- if (_rangeStart && moment(trimedDate, format) < _rangeStart) {
287
+ if (rangeStart && moment(trimedDate, format) < rangeStart) {
272
288
  return Promise.reject(_jsx(FormattedMessage, {
273
289
  id: "Please input a date after {date}",
274
290
  values: {
275
- date: _rangeStart.format(format)
291
+ date: rangeStart.format(format)
276
292
  }
277
293
  }));
278
294
  }
279
295
 
280
- if (_rangeEnd && moment(trimedDate, format) > _rangeEnd) {
296
+ if (rangeEnd && moment(trimedDate, format) > rangeEnd) {
281
297
  return Promise.reject(_jsx(FormattedMessage, {
282
298
  id: "Please input a date before {date}",
283
299
  values: {
284
- date: _rangeEnd.format(format)
300
+ date: rangeEnd.format(format)
285
301
  }
286
302
  }));
287
303
  }
@@ -292,6 +308,27 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
292
308
  }
293
309
  }
294
310
 
311
+ if (validationCode.length) {
312
+ rules.push.apply(rules, _toConsumableArray(validationCode.map(function (_ref2) {
313
+ var code = _ref2.code,
314
+ errorMessage = _ref2.errorMessage;
315
+ return {
316
+ validator: function validator(_, value) {
317
+ try {
318
+ var fn = eval(code);
319
+ var formValues = form === null || form === void 0 ? void 0 : form.getFieldsValue(true);
320
+
321
+ var _result2 = fn(value, formValues);
322
+
323
+ return _result2 ? Promise.resolve() : Promise.reject(errorMessage);
324
+ } catch (_unused) {
325
+ return Promise.reject(errorMessage);
326
+ }
327
+ }
328
+ };
329
+ })));
330
+ }
331
+
295
332
  return {
296
333
  colProps: {
297
334
  span: extraFullRow && fullRow === undefined || fullRow || extraHalfRow && halfRow === undefined || halfRow ? 24 : span || extraSpan || 12,
@@ -303,7 +340,7 @@ export var calcFormItemProps = function calcFormItemProps(config, extraProps, fo
303
340
  formItemProps: {
304
341
  name: name,
305
342
  className: className,
306
- initialValue: (valueFormater || extraValueFormater)(initialValue || extraInitialValue),
343
+ initialValue: (valueFormater || extraValueFormater)(initialValue !== null && initialValue !== void 0 ? initialValue : extraInitialValue),
307
344
  copiedValue: copiedValue,
308
345
  selectedValue: selectedValue,
309
346
  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", "dependField", "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,9 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
176
176
  absoluteRangeStart = config.absoluteRangeStart,
177
177
  relativeRangeStart = config.relativeRangeStart,
178
178
  relativeRangeEnd = config.relativeRangeEnd,
179
+ dependField = config.dependField,
180
+ _config$validationCod = config.validationCode,
181
+ validationCode = _config$validationCod === void 0 ? [] : _config$validationCod,
179
182
  rest = _objectWithoutProperties(config, _excluded);
180
183
 
181
184
  (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 +239,84 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
236
239
  elementProps.disabled = calcDisabled(disabled, form) || copiedValue.disabled || selectedValue.disabled;
237
240
 
238
241
  if (dateLimitationType) {
239
- if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
240
- var rangeStart = Number.MIN_SAFE_INTEGER;
241
- var rangeEnd = Number.MAX_SAFE_INTEGER;
242
+ var rangeStart;
243
+ var rangeEnd;
242
244
 
243
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
244
- rangeStart = +(0, _moment.default)(absoluteRangeStart).startOf('day');
245
- }
245
+ if (dateLimitationType === 'absolute' && absoluteRangeStart) {
246
+ rangeStart = (0, _moment.default)(absoluteRangeStart).startOf('day');
247
+ }
246
248
 
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
- }
249
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.quantity) !== undefined) {
250
+ var dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
251
+ rangeStart = (0, _moment.default)(dependFieldValue).add(relativeRangeStart.quantity, relativeRangeStart.type).startOf('day');
252
+ }
250
253
 
251
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
252
- rangeEnd = +(0, _moment.default)(absoluteRangeEnd).endOf('day');
253
- }
254
+ if (dateLimitationType === 'relative' && (relativeRangeStart === null || relativeRangeStart === void 0 ? void 0 : relativeRangeStart.pattern)) {
255
+ 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));
256
+
257
+ if (result.length) {
258
+ var year = result[0][2] || 0;
259
+ var month = result[0][4] || 0;
260
+ var day = result[0][6] || 0;
261
+
262
+ var _dependFieldValue = relativeRangeStart.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeStart.dependField) : undefined;
254
263
 
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');
264
+ rangeStart = (0, _moment.default)(_dependFieldValue).add(year, 'year').add(month, 'month').add(day, 'day').startOf('day');
257
265
  }
266
+ }
258
267
 
259
- elementProps.disabledDate = function (current) {
260
- return +current < rangeStart || +current > (rangeEnd || Number.MAX_SAFE_INTEGER);
261
- };
268
+ if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
269
+ rangeEnd = (0, _moment.default)(absoluteRangeEnd).endOf('day');
262
270
  }
263
271
 
264
- if (type === 'InputDate') {
265
- var _rangeStart;
272
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.quantity) !== undefined) {
273
+ var _dependFieldValue2 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
266
274
 
267
- var _rangeEnd;
275
+ rangeEnd = (0, _moment.default)(_dependFieldValue2).add(relativeRangeEnd.quantity, relativeRangeEnd.type).endOf('day');
276
+ }
268
277
 
269
- if (dateLimitationType === 'absolute' && absoluteRangeStart) {
270
- _rangeStart = (0, _moment.default)(absoluteRangeStart).startOf('day');
271
- }
278
+ if (dateLimitationType === 'relative' && (relativeRangeEnd === null || relativeRangeEnd === void 0 ? void 0 : relativeRangeEnd.pattern)) {
279
+ 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
280
 
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
- }
281
+ if (_result.length) {
282
+ var _year = _result[0][2] || 0;
276
283
 
277
- if (dateLimitationType === 'absolute' && absoluteRangeEnd) {
278
- _rangeEnd = (0, _moment.default)(absoluteRangeEnd).endOf('day');
279
- }
284
+ var _month = _result[0][4] || 0;
285
+
286
+ var _day = _result[0][6] || 0;
280
287
 
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');
288
+ var _dependFieldValue3 = relativeRangeEnd.dependField ? form === null || form === void 0 ? void 0 : form.getFieldValue(relativeRangeEnd.dependField) : undefined;
289
+
290
+ rangeEnd = (0, _moment.default)(_dependFieldValue3).add(_year, 'year').add(_month, 'month').add(_day, 'day').endOf('day');
283
291
  }
292
+ }
284
293
 
294
+ if (['DatePicker', 'BuddhistDatePicker'].includes(type)) {
295
+ elementProps.disabledDate = function (current) {
296
+ return +current < (rangeStart ? +rangeStart : Number.MIN_SAFE_INTEGER) || +current > (rangeEnd ? +rangeEnd : Number.MAX_SAFE_INTEGER);
297
+ };
298
+ }
299
+
300
+ if (type === 'InputDate') {
285
301
  rules.push({
286
302
  validator: function validator(_, date) {
287
303
  var trimedDate = date.replaceAll(/\s/g, '');
288
304
  var format = elementProps.format ? elementProps.format.replaceAll(/\s/g, '') : 'DD/MM/YYYY';
289
305
 
290
- if (_rangeStart && (0, _moment.default)(trimedDate, format) < _rangeStart) {
306
+ if (rangeStart && (0, _moment.default)(trimedDate, format) < rangeStart) {
291
307
  return Promise.reject((0, _jsxRuntime.jsx)(_formattedMessage.default, {
292
308
  id: "Please input a date after {date}",
293
309
  values: {
294
- date: _rangeStart.format(format)
310
+ date: rangeStart.format(format)
295
311
  }
296
312
  }));
297
313
  }
298
314
 
299
- if (_rangeEnd && (0, _moment.default)(trimedDate, format) > _rangeEnd) {
315
+ if (rangeEnd && (0, _moment.default)(trimedDate, format) > rangeEnd) {
300
316
  return Promise.reject((0, _jsxRuntime.jsx)(_formattedMessage.default, {
301
317
  id: "Please input a date before {date}",
302
318
  values: {
303
- date: _rangeEnd.format(format)
319
+ date: rangeEnd.format(format)
304
320
  }
305
321
  }));
306
322
  }
@@ -311,6 +327,27 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
311
327
  }
312
328
  }
313
329
 
330
+ if (validationCode.length) {
331
+ rules.push.apply(rules, _toConsumableArray(validationCode.map(function (_ref2) {
332
+ var code = _ref2.code,
333
+ errorMessage = _ref2.errorMessage;
334
+ return {
335
+ validator: function validator(_, value) {
336
+ try {
337
+ var fn = eval(code);
338
+ var formValues = form === null || form === void 0 ? void 0 : form.getFieldsValue(true);
339
+
340
+ var _result2 = fn(value, formValues);
341
+
342
+ return _result2 ? Promise.resolve() : Promise.reject(errorMessage);
343
+ } catch (_unused) {
344
+ return Promise.reject(errorMessage);
345
+ }
346
+ }
347
+ };
348
+ })));
349
+ }
350
+
314
351
  return {
315
352
  colProps: {
316
353
  span: extraFullRow && fullRow === undefined || fullRow || extraHalfRow && halfRow === undefined || halfRow ? 24 : span || extraSpan || 12,
@@ -322,7 +359,7 @@ var calcFormItemProps = function calcFormItemProps(config, extraProps, form, par
322
359
  formItemProps: {
323
360
  name: name,
324
361
  className: className,
325
- initialValue: (valueFormater || extraValueFormater)(initialValue || extraInitialValue),
362
+ initialValue: (valueFormater || extraValueFormater)(initialValue !== null && initialValue !== void 0 ? initialValue : extraInitialValue),
326
363
  copiedValue: copiedValue,
327
364
  selectedValue: selectedValue,
328
365
  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.44",
4
4
  "scripts": {
5
5
  "start": "dumi dev",
6
6
  "build-dev": "dumi build",