@hi-ui/form 4.0.0-beta.30 → 4.0.0-beta.33

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/lib/cjs/Form.js CHANGED
@@ -60,9 +60,11 @@ var Form = /*#__PURE__*/React.forwardRef(function (_a, ref) {
60
60
  placement = _a$placement === void 0 ? 'vertical' : _a$placement,
61
61
  _a$contentPosition = _a.contentPosition,
62
62
  contentPosition = _a$contentPosition === void 0 ? 'center' : _a$contentPosition,
63
+ _a$showRequiredOnVali = _a.showRequiredOnValidateRequired,
64
+ showRequiredOnValidateRequired = _a$showRequiredOnVali === void 0 ? false : _a$showRequiredOnVali,
63
65
  _a$showColon = _a.showColon,
64
66
  showColon = _a$showColon === void 0 ? true : _a$showColon,
65
- rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "innerRef", "labelWidth", "labelPlacement", "placement", "contentPosition", "showColon"]);
67
+ rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "innerRef", "labelWidth", "labelPlacement", "placement", "contentPosition", "showRequiredOnValidateRequired", "showColon"]);
66
68
 
67
69
  var formContext = useForm.useForm(rest);
68
70
  var getRootProps = formContext.getRootProps; // @ts-ignore
@@ -87,11 +89,12 @@ var Form = /*#__PURE__*/React.forwardRef(function (_a, ref) {
87
89
  labelWidth: labelWidth,
88
90
  labelPlacement: labelPlacement,
89
91
  showColon: showColon,
90
- contentPosition: contentPosition
92
+ contentPosition: contentPosition,
93
+ showRequiredOnValidateRequired: showRequiredOnValidateRequired
91
94
  }, formContext), {
92
95
  prefixCls: prefixCls
93
96
  });
94
- }, [labelWidth, formContext, labelPlacement, showColon, prefixCls, contentPosition]);
97
+ }, [labelWidth, formContext, labelPlacement, showColon, prefixCls, contentPosition, showRequiredOnValidateRequired]);
95
98
  var cls = classname.cx(prefixCls, className, placement && prefixCls + "--placement-" + placement);
96
99
  return (
97
100
  /*#__PURE__*/
@@ -21,6 +21,8 @@ var React = require('react');
21
21
 
22
22
  var env = require('@hi-ui/env');
23
23
 
24
+ var useFormField = require('./use-form-field.js');
25
+
24
26
  var FormLabel = require('./FormLabel.js');
25
27
 
26
28
  var FormMessage = require('./FormMessage.js');
@@ -55,13 +57,29 @@ var FormItem = function FormItem(_a) {
55
57
  valueConnectTransform = _a.valueConnectTransform,
56
58
  validateTrigger = _a.validateTrigger,
57
59
  render = _a.render,
58
- rest = tslib.__rest(_a, ["className", "children", "field", "valueType", "rules", "valuePropName", "valueChangeFuncPropName", "valueDispatchTransform", "valueConnectTransform", "validateTrigger", "render"]); // @ts-ignore
59
-
60
+ rest = tslib.__rest(_a, ["className", "children", "field", "valueType", "rules", "valuePropName", "valueChangeFuncPropName", "valueDispatchTransform", "valueConnectTransform", "validateTrigger", "render"]);
60
61
 
61
62
  var _useFormContext = context.useFormContext(),
62
- prefixCls = _useFormContext.prefixCls;
63
+ prefixCls = _useFormContext.prefixCls,
64
+ showRequiredOnValidateRequired = _useFormContext.showRequiredOnValidateRequired;
63
65
 
66
+ var fieldRules = useFormField.useFiledRules({
67
+ field: field,
68
+ rules: rules,
69
+ valueType: valueType
70
+ });
71
+ var required = rest.required;
72
+ var showRequired = React.useMemo(function () {
73
+ if (required === undefined) {
74
+ return showRequiredOnValidateRequired && fieldRules.some(function (item) {
75
+ return item.required;
76
+ });
77
+ }
78
+
79
+ return required;
80
+ }, [required, showRequiredOnValidateRequired, fieldRules]);
64
81
  return /*#__PURE__*/React__default["default"].createElement(FormLabel.FormLabel, Object.assign({}, rest, {
82
+ required: showRequired,
65
83
  className: classname.cx(prefixCls + "-item", className)
66
84
  }), /*#__PURE__*/React__default["default"].createElement(FormField.FormField, {
67
85
  field: field,
@@ -12,7 +12,7 @@
12
12
  Object.defineProperty(exports, '__esModule', {
13
13
  value: true
14
14
  });
15
- var css_248z = ".hi-v4-form {max-width: 100%;position: relative; }.hi-v4-form fieldset {margin: 0;padding: 0;border: 0; }.hi-v4-form fieldset + fieldset {margin-top: 16px; }.hi-v4-form legend {margin: 0 0 16px;color: var(--hi-v4-color-gray-800, #1f2937); }.hi-v4-form--placement-horizontal {display: -webkit-box;display: -ms-flexbox;display: flex;-ms-flex-wrap: wrap;flex-wrap: wrap; }.hi-v4-form--placement-horizontal .hi-v4-form-label__indent {min-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label {display: -webkit-box;display: -ms-flexbox;display: flex;font-size: var(--hi-v4-text-size-md, 0.875rem);-webkit-box-sizing: border-box;box-sizing: border-box;margin-right: 0;margin-bottom: var(--hi-v4-spacing-12, 24px); }.hi-v4-form-label__text, .hi-v4-form-label__indent {-ms-flex-negative: 0;flex-shrink: 0;-webkit-box-sizing: border-box;box-sizing: border-box;vertical-align: top;color: var(--hi-v4-color-gray-800, #1f2937);overflow-wrap: break-word; }.hi-v4-form-label__text {padding-right: var(--hi-v4-spacing-6, 12px);min-height: var(--hi-v4-height-8, 32px);line-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label--placement-left .hi-v4-form-label__text {text-align: left; }.hi-v4-form-label--placement-right .hi-v4-form-label__text {text-align: right; }.hi-v4-form-label--placement-top .hi-v4-form-label__text {height: 22px;min-height: 22px;line-height: 22px;padding-right: 0;margin-bottom: var(--hi-v4-spacing-4, 8px); }.hi-v4-form-label--required .hi-v4-form-label__text::before {margin-right: var(--hi-v4-spacing-2, 4px);content: '*';color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959)); }.hi-v4-form-label--placement-top {text-align: left;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;margin-bottom: var(--hi-v4-spacing-12, 24px);padding-right: 0; }.hi-v4-form-label__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;position: relative;vertical-align: top;min-height: var(--hi-v4-height-8, 32px);-ms-flex-negative: 0;flex-shrink: 0; }.hi-v4-form-label__control {min-width: 1px; }.hi-v4-form-message {display: block;font-size: var(--hi-v4-text-size-md, 0.875rem);min-height: 24px;padding: 2px 0;-webkit-box-sizing: border-box;box-sizing: border-box;line-height: 20px;-webkit-transform: translateY(-10%);transform: translateY(-10%);opacity: 0;color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959));-webkit-transition: all 0.3s;transition: all 0.3s; }.hi-v4-form-message--show {opacity: 1;-webkit-transform: translateY(0);transform: translateY(0); }.hi-v4-form-item {position: relative; }.hi-v4-form-item__message {position: absolute; }";
15
+ var css_248z = ".hi-v4-form {max-width: 100%;position: relative; }.hi-v4-form fieldset {margin: 0;padding: 0;border: 0; }.hi-v4-form fieldset + fieldset {margin-top: 16px; }.hi-v4-form legend {margin: 0 0 16px;color: var(--hi-v4-color-gray-800, #1f2937); }.hi-v4-form--placement-horizontal {display: -webkit-box;display: -ms-flexbox;display: flex;-ms-flex-wrap: wrap;flex-wrap: wrap;-webkit-column-gap: var(--hi-v4-spacing-10, 20px);-moz-column-gap: var(--hi-v4-spacing-10, 20px);column-gap: var(--hi-v4-spacing-10, 20px); }.hi-v4-form--placement-horizontal .hi-v4-form-label__indent {min-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label {display: -webkit-box;display: -ms-flexbox;display: flex;font-size: var(--hi-v4-text-size-md, 0.875rem);-webkit-box-sizing: border-box;box-sizing: border-box;margin-right: 0;margin-bottom: var(--hi-v4-spacing-12, 24px); }.hi-v4-form-label__text, .hi-v4-form-label__indent {-ms-flex-negative: 0;flex-shrink: 0;-webkit-box-sizing: border-box;box-sizing: border-box;vertical-align: top;color: var(--hi-v4-color-gray-800, #1f2937);overflow-wrap: break-word; }.hi-v4-form-label__text {padding-right: var(--hi-v4-spacing-6, 12px);min-height: var(--hi-v4-height-8, 32px);line-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label--placement-left .hi-v4-form-label__text {text-align: left; }.hi-v4-form-label--placement-right .hi-v4-form-label__text {text-align: right; }.hi-v4-form-label--placement-top .hi-v4-form-label__text {height: 22px;min-height: 22px;line-height: 22px;padding-right: 0;margin-bottom: var(--hi-v4-spacing-4, 8px); }.hi-v4-form-label--required .hi-v4-form-label__text::before {margin-right: var(--hi-v4-spacing-2, 4px);content: '*';color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959)); }.hi-v4-form-label--placement-top {text-align: left;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;margin-bottom: var(--hi-v4-spacing-12, 24px);padding-right: 0; }.hi-v4-form-label__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;position: relative;vertical-align: top;min-height: var(--hi-v4-height-8, 32px);-ms-flex-negative: 0;flex-shrink: 0; }.hi-v4-form-label__control {min-width: 1px; }.hi-v4-form-message {display: block;font-size: var(--hi-v4-text-size-md, 0.875rem);min-height: 24px;padding: 2px 0;-webkit-box-sizing: border-box;box-sizing: border-box;line-height: 20px;-webkit-transform: translateY(-10%);transform: translateY(-10%);opacity: 0;color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959));-webkit-transition: all 0.3s;transition: all 0.3s; }.hi-v4-form-message--show {opacity: 1;-webkit-transform: translateY(0);transform: translateY(0); }.hi-v4-form-item {position: relative; }.hi-v4-form-item__message {position: absolute; }";
16
16
 
17
17
  var __styleInject__ = require('inject-head-style')["default"];
18
18
 
@@ -35,17 +35,14 @@ function _interopDefaultLegacy(e) {
35
35
 
36
36
  var Validater__default = /*#__PURE__*/_interopDefaultLegacy(Validater);
37
37
 
38
- var useFormField = function useFormField(props) {
38
+ var useFiledRules = function useFiledRules(props) {
39
39
  var field = props.field,
40
40
  rulesProp = props.rules,
41
41
  _props$valueType = props.valueType,
42
42
  valueType = _props$valueType === void 0 ? 'any' : _props$valueType;
43
43
 
44
44
  var _useFormContext = context.useFormContext(),
45
- getFieldRules = _useFormContext.getFieldRules,
46
- getFieldProps = _useFormContext.getFieldProps,
47
- registerField = _useFormContext.registerField,
48
- unregisterField = _useFormContext.unregisterField;
45
+ getFieldRules = _useFormContext.getFieldRules;
49
46
  /**
50
47
  * 处理校验规则,item 优先级大于 form
51
48
  */
@@ -59,7 +56,19 @@ var useFormField = function useFormField(props) {
59
56
  type: valueType
60
57
  }, rule);
61
58
  });
62
- }, [rulesProp, field, getFieldRules, valueType]); // 当前 field 的唯一校验器
59
+ }, [rulesProp, field, getFieldRules, valueType]);
60
+ return fieldRules;
61
+ };
62
+
63
+ var useFormField = function useFormField(props) {
64
+ var field = props.field;
65
+
66
+ var _useFormContext2 = context.useFormContext(),
67
+ getFieldProps = _useFormContext2.getFieldProps,
68
+ registerField = _useFormContext2.registerField,
69
+ unregisterField = _useFormContext2.unregisterField;
70
+
71
+ var fieldRules = useFiledRules(props); // 当前 field 的唯一校验器
63
72
 
64
73
  var fieldValidate = React.useCallback(function (value) {
65
74
  var _Validater, _validater$validate;
@@ -89,4 +98,5 @@ var useFormField = function useFormField(props) {
89
98
  return getFieldProps(props);
90
99
  };
91
100
 
101
+ exports.useFiledRules = useFiledRules;
92
102
  exports.useFormField = useFormField;
@@ -48,6 +48,8 @@ var EMPTY_ERRORS = {};
48
48
  var EMPTY_TOUCHED = {};
49
49
  var DEFAULT_VALIDATE_TRIGGER = ['onChange', 'onBlur'];
50
50
 
51
+ var EMPTY_FUNC = function EMPTY_FUNC() {};
52
+
51
53
  var useForm = function useForm(_a) {
52
54
  var initialValues = _a.initialValues,
53
55
  _a$initialErrors = _a.initialErrors,
@@ -181,11 +183,8 @@ var useForm = function useForm(_a) {
181
183
  type: 'SET_VALIDATING',
182
184
  payload: false
183
185
  }); // @ts-ignore
184
- // @ts-ignore
185
-
186
- setFieldError(field, (_c = (_b = (_a = errorMsg.fields[index.stringify(field)]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : ''); // TODO: 回调和promise支持
187
- // TODO: 回调和promise支持
188
186
 
187
+ setFieldError(field, (_c = (_b = (_a = errorMsg.fields[index.stringify(field)]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : '');
189
188
  throw errorMsg;
190
189
  }));
191
190
 
@@ -320,7 +319,7 @@ var useForm = function useForm(_a) {
320
319
  var shouldValidateField = validateAfterTouched ? objectUtils.getNested(formState.touched, field) && shouldValidate : shouldValidate;
321
320
 
322
321
  if (shouldValidateField) {
323
- validateField(field, value);
322
+ validateField(field, value)["catch"](EMPTY_FUNC);
324
323
  }
325
324
  }, [validateField, validateAfterTouched, formState]);
326
325
  var setFieldsValue = React.useCallback(function (fieldsState) {
@@ -375,7 +374,7 @@ var useForm = function useForm(_a) {
375
374
  var handleFieldBlur = React.useCallback(function (fieldName, shouldValidate) {
376
375
  return function (evt) {
377
376
  if (shouldValidate) {
378
- validateFieldState(fieldName);
377
+ validateFieldState(fieldName)["catch"](EMPTY_FUNC);
379
378
  }
380
379
 
381
380
  setFieldTouched(fieldName, true);
@@ -383,7 +382,7 @@ var useForm = function useForm(_a) {
383
382
  }, [setFieldTouched, validateFieldState]);
384
383
  var handleFieldTrigger = React.useCallback(function (fieldName) {
385
384
  return function (evt) {
386
- validateFieldState(fieldName);
385
+ validateFieldState(fieldName)["catch"](EMPTY_FUNC);
387
386
  };
388
387
  }, [validateFieldState]);
389
388
  /**
@@ -482,7 +481,6 @@ var useForm = function useForm(_a) {
482
481
  formDispatch({
483
482
  type: 'SUBMIT_DONE'
484
483
  }); // return combinedErrors
485
- // return combinedErrors
486
484
 
487
485
  return formState.values;
488
486
  }
@@ -492,8 +490,6 @@ var useForm = function useForm(_a) {
492
490
  type: 'SUBMIT_DONE'
493
491
  }); // return result
494
492
  // TODO: 满足promise 如果既给到values 又给到 errors
495
- // return result
496
- // TODO: 满足promise 如果既给到values 又给到 errors
497
493
 
498
494
  return formState.values;
499
495
  })["catch"](function (_errors) {
package/lib/esm/Form.js CHANGED
@@ -38,9 +38,11 @@ var Form = /*#__PURE__*/forwardRef(function (_a, ref) {
38
38
  placement = _a$placement === void 0 ? 'vertical' : _a$placement,
39
39
  _a$contentPosition = _a.contentPosition,
40
40
  contentPosition = _a$contentPosition === void 0 ? 'center' : _a$contentPosition,
41
+ _a$showRequiredOnVali = _a.showRequiredOnValidateRequired,
42
+ showRequiredOnValidateRequired = _a$showRequiredOnVali === void 0 ? false : _a$showRequiredOnVali,
41
43
  _a$showColon = _a.showColon,
42
44
  showColon = _a$showColon === void 0 ? true : _a$showColon,
43
- rest = __rest(_a, ["prefixCls", "role", "className", "children", "innerRef", "labelWidth", "labelPlacement", "placement", "contentPosition", "showColon"]);
45
+ rest = __rest(_a, ["prefixCls", "role", "className", "children", "innerRef", "labelWidth", "labelPlacement", "placement", "contentPosition", "showRequiredOnValidateRequired", "showColon"]);
44
46
 
45
47
  var formContext = useForm(rest);
46
48
  var getRootProps = formContext.getRootProps; // @ts-ignore
@@ -65,11 +67,12 @@ var Form = /*#__PURE__*/forwardRef(function (_a, ref) {
65
67
  labelWidth: labelWidth,
66
68
  labelPlacement: labelPlacement,
67
69
  showColon: showColon,
68
- contentPosition: contentPosition
70
+ contentPosition: contentPosition,
71
+ showRequiredOnValidateRequired: showRequiredOnValidateRequired
69
72
  }, formContext), {
70
73
  prefixCls: prefixCls
71
74
  });
72
- }, [labelWidth, formContext, labelPlacement, showColon, prefixCls, contentPosition]);
75
+ }, [labelWidth, formContext, labelPlacement, showColon, prefixCls, contentPosition, showRequiredOnValidateRequired]);
73
76
  var cls = cx(prefixCls, className, placement && prefixCls + "--placement-" + placement);
74
77
  return (
75
78
  /*#__PURE__*/
@@ -8,8 +8,9 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import { __rest } from 'tslib';
11
- import React from 'react';
11
+ import React, { useMemo } from 'react';
12
12
  import { __DEV__ } from '@hi-ui/env';
13
+ import { useFiledRules } from './use-form-field.js';
13
14
  import { FormLabel } from './FormLabel.js';
14
15
  import { FormMessage } from './FormMessage.js';
15
16
  import { FormField } from './FormField.js';
@@ -31,13 +32,29 @@ var FormItem = function FormItem(_a) {
31
32
  valueConnectTransform = _a.valueConnectTransform,
32
33
  validateTrigger = _a.validateTrigger,
33
34
  render = _a.render,
34
- rest = __rest(_a, ["className", "children", "field", "valueType", "rules", "valuePropName", "valueChangeFuncPropName", "valueDispatchTransform", "valueConnectTransform", "validateTrigger", "render"]); // @ts-ignore
35
-
35
+ rest = __rest(_a, ["className", "children", "field", "valueType", "rules", "valuePropName", "valueChangeFuncPropName", "valueDispatchTransform", "valueConnectTransform", "validateTrigger", "render"]);
36
36
 
37
37
  var _useFormContext = useFormContext(),
38
- prefixCls = _useFormContext.prefixCls;
38
+ prefixCls = _useFormContext.prefixCls,
39
+ showRequiredOnValidateRequired = _useFormContext.showRequiredOnValidateRequired;
40
+
41
+ var fieldRules = useFiledRules({
42
+ field: field,
43
+ rules: rules,
44
+ valueType: valueType
45
+ });
46
+ var required = rest.required;
47
+ var showRequired = useMemo(function () {
48
+ if (required === undefined) {
49
+ return showRequiredOnValidateRequired && fieldRules.some(function (item) {
50
+ return item.required;
51
+ });
52
+ }
39
53
 
54
+ return required;
55
+ }, [required, showRequiredOnValidateRequired, fieldRules]);
40
56
  return /*#__PURE__*/React.createElement(FormLabel, Object.assign({}, rest, {
57
+ required: showRequired,
41
58
  className: cx(prefixCls + "-item", className)
42
59
  }), /*#__PURE__*/React.createElement(FormField, {
43
60
  field: field,
@@ -8,7 +8,7 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import __styleInject__ from 'inject-head-style';
11
- var css_248z = ".hi-v4-form {max-width: 100%;position: relative; }.hi-v4-form fieldset {margin: 0;padding: 0;border: 0; }.hi-v4-form fieldset + fieldset {margin-top: 16px; }.hi-v4-form legend {margin: 0 0 16px;color: var(--hi-v4-color-gray-800, #1f2937); }.hi-v4-form--placement-horizontal {display: -webkit-box;display: -ms-flexbox;display: flex;-ms-flex-wrap: wrap;flex-wrap: wrap; }.hi-v4-form--placement-horizontal .hi-v4-form-label__indent {min-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label {display: -webkit-box;display: -ms-flexbox;display: flex;font-size: var(--hi-v4-text-size-md, 0.875rem);-webkit-box-sizing: border-box;box-sizing: border-box;margin-right: 0;margin-bottom: var(--hi-v4-spacing-12, 24px); }.hi-v4-form-label__text, .hi-v4-form-label__indent {-ms-flex-negative: 0;flex-shrink: 0;-webkit-box-sizing: border-box;box-sizing: border-box;vertical-align: top;color: var(--hi-v4-color-gray-800, #1f2937);overflow-wrap: break-word; }.hi-v4-form-label__text {padding-right: var(--hi-v4-spacing-6, 12px);min-height: var(--hi-v4-height-8, 32px);line-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label--placement-left .hi-v4-form-label__text {text-align: left; }.hi-v4-form-label--placement-right .hi-v4-form-label__text {text-align: right; }.hi-v4-form-label--placement-top .hi-v4-form-label__text {height: 22px;min-height: 22px;line-height: 22px;padding-right: 0;margin-bottom: var(--hi-v4-spacing-4, 8px); }.hi-v4-form-label--required .hi-v4-form-label__text::before {margin-right: var(--hi-v4-spacing-2, 4px);content: '*';color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959)); }.hi-v4-form-label--placement-top {text-align: left;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;margin-bottom: var(--hi-v4-spacing-12, 24px);padding-right: 0; }.hi-v4-form-label__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;position: relative;vertical-align: top;min-height: var(--hi-v4-height-8, 32px);-ms-flex-negative: 0;flex-shrink: 0; }.hi-v4-form-label__control {min-width: 1px; }.hi-v4-form-message {display: block;font-size: var(--hi-v4-text-size-md, 0.875rem);min-height: 24px;padding: 2px 0;-webkit-box-sizing: border-box;box-sizing: border-box;line-height: 20px;-webkit-transform: translateY(-10%);transform: translateY(-10%);opacity: 0;color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959));-webkit-transition: all 0.3s;transition: all 0.3s; }.hi-v4-form-message--show {opacity: 1;-webkit-transform: translateY(0);transform: translateY(0); }.hi-v4-form-item {position: relative; }.hi-v4-form-item__message {position: absolute; }";
11
+ var css_248z = ".hi-v4-form {max-width: 100%;position: relative; }.hi-v4-form fieldset {margin: 0;padding: 0;border: 0; }.hi-v4-form fieldset + fieldset {margin-top: 16px; }.hi-v4-form legend {margin: 0 0 16px;color: var(--hi-v4-color-gray-800, #1f2937); }.hi-v4-form--placement-horizontal {display: -webkit-box;display: -ms-flexbox;display: flex;-ms-flex-wrap: wrap;flex-wrap: wrap;-webkit-column-gap: var(--hi-v4-spacing-10, 20px);-moz-column-gap: var(--hi-v4-spacing-10, 20px);column-gap: var(--hi-v4-spacing-10, 20px); }.hi-v4-form--placement-horizontal .hi-v4-form-label__indent {min-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label {display: -webkit-box;display: -ms-flexbox;display: flex;font-size: var(--hi-v4-text-size-md, 0.875rem);-webkit-box-sizing: border-box;box-sizing: border-box;margin-right: 0;margin-bottom: var(--hi-v4-spacing-12, 24px); }.hi-v4-form-label__text, .hi-v4-form-label__indent {-ms-flex-negative: 0;flex-shrink: 0;-webkit-box-sizing: border-box;box-sizing: border-box;vertical-align: top;color: var(--hi-v4-color-gray-800, #1f2937);overflow-wrap: break-word; }.hi-v4-form-label__text {padding-right: var(--hi-v4-spacing-6, 12px);min-height: var(--hi-v4-height-8, 32px);line-height: var(--hi-v4-height-8, 32px); }.hi-v4-form-label--placement-left .hi-v4-form-label__text {text-align: left; }.hi-v4-form-label--placement-right .hi-v4-form-label__text {text-align: right; }.hi-v4-form-label--placement-top .hi-v4-form-label__text {height: 22px;min-height: 22px;line-height: 22px;padding-right: 0;margin-bottom: var(--hi-v4-spacing-4, 8px); }.hi-v4-form-label--required .hi-v4-form-label__text::before {margin-right: var(--hi-v4-spacing-2, 4px);content: '*';color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959)); }.hi-v4-form-label--placement-top {text-align: left;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;margin-bottom: var(--hi-v4-spacing-12, 24px);padding-right: 0; }.hi-v4-form-label__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;position: relative;vertical-align: top;min-height: var(--hi-v4-height-8, 32px);-ms-flex-negative: 0;flex-shrink: 0; }.hi-v4-form-label__control {min-width: 1px; }.hi-v4-form-message {display: block;font-size: var(--hi-v4-text-size-md, 0.875rem);min-height: 24px;padding: 2px 0;-webkit-box-sizing: border-box;box-sizing: border-box;line-height: 20px;-webkit-transform: translateY(-10%);transform: translateY(-10%);opacity: 0;color: var(--hi-v4-color-danger-500, var(--hi-v4-color-red-500, #ff5959));-webkit-transition: all 0.3s;transition: all 0.3s; }.hi-v4-form-message--show {opacity: 1;-webkit-transform: translateY(0);transform: translateY(0); }.hi-v4-form-item {position: relative; }.hi-v4-form-item__message {position: absolute; }";
12
12
 
13
13
  __styleInject__(css_248z);
14
14
 
@@ -14,17 +14,14 @@ import Validater from 'async-validator';
14
14
  import { normalizeArray } from '@hi-ui/array-utils';
15
15
  import { stringify, isValidField } from './utils/index.js';
16
16
 
17
- var useFormField = function useFormField(props) {
17
+ var useFiledRules = function useFiledRules(props) {
18
18
  var field = props.field,
19
19
  rulesProp = props.rules,
20
20
  _props$valueType = props.valueType,
21
21
  valueType = _props$valueType === void 0 ? 'any' : _props$valueType;
22
22
 
23
23
  var _useFormContext = useFormContext(),
24
- getFieldRules = _useFormContext.getFieldRules,
25
- getFieldProps = _useFormContext.getFieldProps,
26
- registerField = _useFormContext.registerField,
27
- unregisterField = _useFormContext.unregisterField;
24
+ getFieldRules = _useFormContext.getFieldRules;
28
25
  /**
29
26
  * 处理校验规则,item 优先级大于 form
30
27
  */
@@ -38,7 +35,19 @@ var useFormField = function useFormField(props) {
38
35
  type: valueType
39
36
  }, rule);
40
37
  });
41
- }, [rulesProp, field, getFieldRules, valueType]); // 当前 field 的唯一校验器
38
+ }, [rulesProp, field, getFieldRules, valueType]);
39
+ return fieldRules;
40
+ };
41
+
42
+ var useFormField = function useFormField(props) {
43
+ var field = props.field;
44
+
45
+ var _useFormContext2 = useFormContext(),
46
+ getFieldProps = _useFormContext2.getFieldProps,
47
+ registerField = _useFormContext2.registerField,
48
+ unregisterField = _useFormContext2.unregisterField;
49
+
50
+ var fieldRules = useFiledRules(props); // 当前 field 的唯一校验器
42
51
 
43
52
  var fieldValidate = useCallback(function (value) {
44
53
  var _Validater, _validater$validate;
@@ -68,4 +77,4 @@ var useFormField = function useFormField(props) {
68
77
  return getFieldProps(props);
69
78
  };
70
79
 
71
- export { useFormField };
80
+ export { useFiledRules, useFormField };
@@ -21,6 +21,8 @@ var EMPTY_ERRORS = {};
21
21
  var EMPTY_TOUCHED = {};
22
22
  var DEFAULT_VALIDATE_TRIGGER = ['onChange', 'onBlur'];
23
23
 
24
+ var EMPTY_FUNC = function EMPTY_FUNC() {};
25
+
24
26
  var useForm = function useForm(_a) {
25
27
  var initialValues = _a.initialValues,
26
28
  _a$initialErrors = _a.initialErrors,
@@ -154,11 +156,8 @@ var useForm = function useForm(_a) {
154
156
  type: 'SET_VALIDATING',
155
157
  payload: false
156
158
  }); // @ts-ignore
157
- // @ts-ignore
158
-
159
- setFieldError(field, (_c = (_b = (_a = errorMsg.fields[stringify(field)]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : ''); // TODO: 回调和promise支持
160
- // TODO: 回调和promise支持
161
159
 
160
+ setFieldError(field, (_c = (_b = (_a = errorMsg.fields[stringify(field)]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : '');
162
161
  throw errorMsg;
163
162
  }));
164
163
 
@@ -293,7 +292,7 @@ var useForm = function useForm(_a) {
293
292
  var shouldValidateField = validateAfterTouched ? getNested(formState.touched, field) && shouldValidate : shouldValidate;
294
293
 
295
294
  if (shouldValidateField) {
296
- validateField(field, value);
295
+ validateField(field, value)["catch"](EMPTY_FUNC);
297
296
  }
298
297
  }, [validateField, validateAfterTouched, formState]);
299
298
  var setFieldsValue = useCallback(function (fieldsState) {
@@ -348,7 +347,7 @@ var useForm = function useForm(_a) {
348
347
  var handleFieldBlur = useCallback(function (fieldName, shouldValidate) {
349
348
  return function (evt) {
350
349
  if (shouldValidate) {
351
- validateFieldState(fieldName);
350
+ validateFieldState(fieldName)["catch"](EMPTY_FUNC);
352
351
  }
353
352
 
354
353
  setFieldTouched(fieldName, true);
@@ -356,7 +355,7 @@ var useForm = function useForm(_a) {
356
355
  }, [setFieldTouched, validateFieldState]);
357
356
  var handleFieldTrigger = useCallback(function (fieldName) {
358
357
  return function (evt) {
359
- validateFieldState(fieldName);
358
+ validateFieldState(fieldName)["catch"](EMPTY_FUNC);
360
359
  };
361
360
  }, [validateFieldState]);
362
361
  /**
@@ -455,7 +454,6 @@ var useForm = function useForm(_a) {
455
454
  formDispatch({
456
455
  type: 'SUBMIT_DONE'
457
456
  }); // return combinedErrors
458
- // return combinedErrors
459
457
 
460
458
  return formState.values;
461
459
  }
@@ -465,8 +463,6 @@ var useForm = function useForm(_a) {
465
463
  type: 'SUBMIT_DONE'
466
464
  }); // return result
467
465
  // TODO: 满足promise 如果既给到values 又给到 errors
468
- // return result
469
- // TODO: 满足promise 如果既给到values 又给到 errors
470
466
 
471
467
  return formState.values;
472
468
  })["catch"](function (_errors) {
@@ -32,4 +32,8 @@ export interface FormProps<Values = Record<string, any>> extends Omit<HiBaseHTML
32
32
  * 配置是否展示冒号
33
33
  */
34
34
  showColon?: boolean;
35
+ /**
36
+ * FormItem 开启 filed 的 required 校验时,展示红色星号
37
+ */
38
+ showRequiredOnValidateRequired?: boolean;
35
39
  }
@@ -8,5 +8,5 @@ export interface FormSubmitProps extends Omit<ButtonProps, 'onClick'> {
8
8
  /**
9
9
  * 点击提交后触发
10
10
  */
11
- onClick?: () => void;
11
+ onClick?: (result: any, error: any) => void;
12
12
  }
@@ -5,6 +5,8 @@ export interface FormContextProps extends UseFormReturn {
5
5
  labelPlacement: 'left' | 'right' | 'top';
6
6
  contentPosition: 'top' | 'center' | 'bottom';
7
7
  showColon: boolean;
8
+ showRequiredOnValidateRequired: boolean;
9
+ prefixCls: string;
8
10
  }
9
11
  export declare const FormProvider: React.Provider<Omit<FormContextProps, "rootProps"> | null>;
10
12
  export declare const useFormContext: () => Omit<FormContextProps, "rootProps">;
@@ -1,4 +1,6 @@
1
1
  import { FormFieldPath, FormRuleModel, FormRuleType } from './types';
2
+ import { Rules } from 'async-validator';
3
+ export declare const useFiledRules: <Values = any>(props: UseFormFieldProps<Values>) => Rules[];
2
4
  export declare const useFormField: <Values = any>(props: UseFormFieldProps<Values>) => any;
3
5
  export interface UseFormFieldProps<T = any> {
4
6
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/form",
3
- "version": "4.0.0-beta.30",
3
+ "version": "4.0.0-beta.33",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HIUI <mi-hiui@xiaomi.com>",
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@hi-ui/array-utils": "^4.0.0-beta.8",
47
- "@hi-ui/button": "^4.0.0-beta.14",
47
+ "@hi-ui/button": "^4.0.0-beta.15",
48
48
  "@hi-ui/classname": "^4.0.0-beta.0",
49
49
  "@hi-ui/core-css": "^4.0.0-beta.5",
50
50
  "@hi-ui/dom-utils": "^4.0.0-beta.6",
@@ -65,5 +65,5 @@
65
65
  "react": "^17.0.1",
66
66
  "react-dom": "^17.0.1"
67
67
  },
68
- "gitHead": "a2d7267f383300bb5b96f8c156f54da4924b79dc"
68
+ "gitHead": "c88fb2f2e288ed4eda0edaa405db38e55d55bcd6"
69
69
  }