rsuite 5.59.0 → 5.59.2

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.
Files changed (181) hide show
  1. package/AvatarGroup/styles/index.css +2 -0
  2. package/AvatarGroup/styles/index.less +2 -0
  3. package/CHANGELOG.md +26 -0
  4. package/CheckPicker/styles/index.css +2 -0
  5. package/CheckTree/styles/index.css +2 -0
  6. package/CheckTreePicker/styles/index.css +2 -0
  7. package/Checkbox/styles/index.css +2 -0
  8. package/Checkbox/styles/index.less +2 -0
  9. package/DateRangePicker/styles/index.css +27 -0
  10. package/DateRangePicker/styles/index.less +27 -0
  11. package/MultiCascadeTree/styles/index.css +2 -0
  12. package/MultiCascader/styles/index.css +2 -0
  13. package/Placeholder/styles/index.css +42 -6
  14. package/Placeholder/styles/index.less +18 -9
  15. package/Placeholder/styles/mixin.less +7 -0
  16. package/Sidenav/styles/index.css +3 -0
  17. package/Sidenav/styles/index.less +4 -0
  18. package/TagInput/styles/index.css +2 -0
  19. package/TagPicker/styles/index.css +2 -0
  20. package/cjs/@types/common.d.ts +1 -1
  21. package/cjs/Avatar/Avatar.js +16 -8
  22. package/cjs/Avatar/useImage.js +0 -1
  23. package/cjs/AvatarGroup/AvatarGroup.d.ts +1 -0
  24. package/cjs/AvatarGroup/AvatarGroup.js +12 -12
  25. package/cjs/Calendar/CalendarContainer.js +4 -4
  26. package/cjs/Checkbox/Checkbox.js +1 -1
  27. package/cjs/DatePicker/DatePicker.d.ts +3 -38
  28. package/cjs/DatePicker/DatePicker.js +86 -137
  29. package/cjs/DatePicker/PredefinedRanges.d.ts +1 -1
  30. package/cjs/DatePicker/PredefinedRanges.js +3 -3
  31. package/cjs/DatePicker/Toolbar.d.ts +1 -1
  32. package/cjs/DatePicker/Toolbar.js +13 -12
  33. package/cjs/DatePicker/hooks/useFocus.d.ts +13 -0
  34. package/cjs/DatePicker/hooks/useFocus.js +96 -0
  35. package/cjs/DatePicker/hooks/useMonthView.d.ts +10 -0
  36. package/cjs/DatePicker/hooks/useMonthView.js +28 -0
  37. package/cjs/DatePicker/index.d.ts +2 -1
  38. package/cjs/DatePicker/types.d.ts +37 -0
  39. package/cjs/DatePicker/utils.d.ts +9 -0
  40. package/cjs/DatePicker/utils.js +20 -2
  41. package/cjs/DateRangePicker/DateRangePicker.d.ts +15 -3
  42. package/cjs/DateRangePicker/DateRangePicker.js +58 -68
  43. package/cjs/DateRangePicker/DateRangePickerContext.d.ts +4 -1
  44. package/cjs/DateRangePicker/DateRangePickerContext.js +4 -4
  45. package/cjs/DateRangePicker/Header.d.ts +11 -0
  46. package/cjs/DateRangePicker/Header.js +65 -0
  47. package/cjs/DateRangePicker/disabledDateUtils.d.ts +1 -1
  48. package/cjs/DateRangePicker/disabledDateUtils.js +1 -1
  49. package/cjs/DateRangePicker/index.js +5 -0
  50. package/cjs/Form/Form.d.ts +56 -39
  51. package/cjs/Form/Form.js +70 -208
  52. package/cjs/Form/FormContext.d.ts +13 -10
  53. package/cjs/Form/FormContext.js +11 -5
  54. package/cjs/Form/{useFormClassNames.d.ts → hooks/useFormClassNames.d.ts} +2 -2
  55. package/cjs/Form/{useFormClassNames.js → hooks/useFormClassNames.js} +2 -2
  56. package/cjs/Form/hooks/useFormRef.d.ts +55 -0
  57. package/cjs/Form/hooks/useFormRef.js +45 -0
  58. package/cjs/Form/hooks/useFormValidate.d.ts +19 -0
  59. package/cjs/Form/hooks/useFormValidate.js +157 -0
  60. package/cjs/Form/hooks/useFormValue.d.ts +7 -0
  61. package/cjs/Form/hooks/useFormValue.js +42 -0
  62. package/cjs/Form/{useSchemaModel.js → hooks/useSchemaModel.js} +5 -0
  63. package/cjs/Form/index.d.ts +3 -2
  64. package/cjs/Form/index.js +3 -9
  65. package/cjs/FormControl/FormControl.d.ts +1 -1
  66. package/cjs/FormControl/FormControl.js +51 -69
  67. package/cjs/FormControl/hooks/useField.d.ts +18 -0
  68. package/cjs/FormControl/hooks/useField.js +54 -0
  69. package/cjs/FormControl/hooks/useRegisterModel.d.ts +3 -0
  70. package/cjs/FormControl/hooks/useRegisterModel.js +22 -0
  71. package/cjs/FormControl/utils.d.ts +1 -0
  72. package/cjs/FormControl/utils.js +8 -0
  73. package/cjs/FormControlLabel/FormControlLabel.js +12 -9
  74. package/cjs/FormErrorMessage/FormErrorMessage.js +2 -5
  75. package/cjs/FormGroup/FormGroup.d.ts +18 -4
  76. package/cjs/FormGroup/FormGroup.js +28 -2
  77. package/cjs/FormGroup/index.d.ts +1 -0
  78. package/cjs/FormGroup/index.js +4 -3
  79. package/cjs/FormHelpText/FormHelpText.d.ts +2 -1
  80. package/cjs/FormHelpText/FormHelpText.js +16 -9
  81. package/cjs/Input/Input.js +4 -5
  82. package/cjs/Placeholder/PlaceholderGraph.d.ts +13 -1
  83. package/cjs/Placeholder/PlaceholderGrid.d.ts +27 -1
  84. package/cjs/Placeholder/PlaceholderGrid.js +10 -13
  85. package/cjs/Placeholder/PlaceholderParagraph.d.ts +24 -1
  86. package/cjs/Placeholder/PlaceholderParagraph.js +13 -9
  87. package/cjs/utils/dateUtils.d.ts +72 -10
  88. package/cjs/utils/dateUtils.js +88 -29
  89. package/dist/rsuite-no-reset-rtl.css +76 -6
  90. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  91. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  92. package/dist/rsuite-no-reset.css +76 -6
  93. package/dist/rsuite-no-reset.min.css +1 -1
  94. package/dist/rsuite-no-reset.min.css.map +1 -1
  95. package/dist/rsuite-rtl.css +76 -6
  96. package/dist/rsuite-rtl.min.css +1 -1
  97. package/dist/rsuite-rtl.min.css.map +1 -1
  98. package/dist/rsuite.css +76 -6
  99. package/dist/rsuite.js +221 -57
  100. package/dist/rsuite.js.map +1 -1
  101. package/dist/rsuite.min.css +1 -1
  102. package/dist/rsuite.min.css.map +1 -1
  103. package/dist/rsuite.min.js +1 -1
  104. package/dist/rsuite.min.js.LICENSE.txt +35 -0
  105. package/dist/rsuite.min.js.map +1 -1
  106. package/esm/@types/common.d.ts +1 -1
  107. package/esm/Avatar/Avatar.js +12 -4
  108. package/esm/Avatar/useImage.js +0 -1
  109. package/esm/AvatarGroup/AvatarGroup.d.ts +1 -0
  110. package/esm/AvatarGroup/AvatarGroup.js +12 -12
  111. package/esm/Calendar/CalendarContainer.js +5 -5
  112. package/esm/Checkbox/Checkbox.js +1 -1
  113. package/esm/DatePicker/DatePicker.d.ts +3 -38
  114. package/esm/DatePicker/DatePicker.js +88 -139
  115. package/esm/DatePicker/PredefinedRanges.d.ts +1 -1
  116. package/esm/DatePicker/PredefinedRanges.js +3 -3
  117. package/esm/DatePicker/Toolbar.d.ts +1 -1
  118. package/esm/DatePicker/Toolbar.js +13 -12
  119. package/esm/DatePicker/hooks/useFocus.d.ts +13 -0
  120. package/esm/DatePicker/hooks/useFocus.js +90 -0
  121. package/esm/DatePicker/hooks/useMonthView.d.ts +10 -0
  122. package/esm/DatePicker/hooks/useMonthView.js +22 -0
  123. package/esm/DatePicker/index.d.ts +2 -1
  124. package/esm/DatePicker/types.d.ts +37 -0
  125. package/esm/DatePicker/utils.d.ts +9 -0
  126. package/esm/DatePicker/utils.js +18 -2
  127. package/esm/DateRangePicker/DateRangePicker.d.ts +15 -3
  128. package/esm/DateRangePicker/DateRangePicker.js +61 -71
  129. package/esm/DateRangePicker/DateRangePickerContext.d.ts +4 -1
  130. package/esm/DateRangePicker/DateRangePickerContext.js +2 -2
  131. package/esm/DateRangePicker/Header.d.ts +11 -0
  132. package/esm/DateRangePicker/Header.js +59 -0
  133. package/esm/DateRangePicker/disabledDateUtils.d.ts +1 -1
  134. package/esm/DateRangePicker/disabledDateUtils.js +1 -1
  135. package/esm/DateRangePicker/index.js +4 -0
  136. package/esm/Form/Form.d.ts +56 -39
  137. package/esm/Form/Form.js +68 -205
  138. package/esm/Form/FormContext.d.ts +13 -10
  139. package/esm/Form/FormContext.js +6 -2
  140. package/esm/Form/{useFormClassNames.d.ts → hooks/useFormClassNames.d.ts} +2 -2
  141. package/esm/Form/{useFormClassNames.js → hooks/useFormClassNames.js} +2 -2
  142. package/esm/Form/hooks/useFormRef.d.ts +55 -0
  143. package/esm/Form/hooks/useFormRef.js +40 -0
  144. package/esm/Form/hooks/useFormValidate.d.ts +19 -0
  145. package/esm/Form/hooks/useFormValidate.js +152 -0
  146. package/esm/Form/hooks/useFormValue.d.ts +7 -0
  147. package/esm/Form/hooks/useFormValue.js +37 -0
  148. package/esm/Form/{useSchemaModel.js → hooks/useSchemaModel.js} +5 -0
  149. package/esm/Form/index.d.ts +3 -2
  150. package/esm/Form/index.js +1 -1
  151. package/esm/FormControl/FormControl.d.ts +1 -1
  152. package/esm/FormControl/FormControl.js +49 -67
  153. package/esm/FormControl/hooks/useField.d.ts +18 -0
  154. package/esm/FormControl/hooks/useField.js +48 -0
  155. package/esm/FormControl/hooks/useRegisterModel.d.ts +3 -0
  156. package/esm/FormControl/hooks/useRegisterModel.js +17 -0
  157. package/esm/FormControl/utils.d.ts +1 -0
  158. package/esm/FormControl/utils.js +4 -0
  159. package/esm/FormControlLabel/FormControlLabel.js +12 -8
  160. package/esm/FormErrorMessage/FormErrorMessage.js +2 -5
  161. package/esm/FormGroup/FormGroup.d.ts +18 -4
  162. package/esm/FormGroup/FormGroup.js +27 -1
  163. package/esm/FormGroup/index.d.ts +1 -0
  164. package/esm/FormGroup/index.js +1 -0
  165. package/esm/FormHelpText/FormHelpText.d.ts +2 -1
  166. package/esm/FormHelpText/FormHelpText.js +17 -9
  167. package/esm/Input/Input.js +4 -5
  168. package/esm/Placeholder/PlaceholderGraph.d.ts +13 -1
  169. package/esm/Placeholder/PlaceholderGrid.d.ts +27 -1
  170. package/esm/Placeholder/PlaceholderGrid.js +10 -13
  171. package/esm/Placeholder/PlaceholderParagraph.d.ts +24 -1
  172. package/esm/Placeholder/PlaceholderParagraph.js +12 -8
  173. package/esm/utils/dateUtils.d.ts +72 -10
  174. package/esm/utils/dateUtils.js +86 -28
  175. package/package.json +2 -2
  176. package/cjs/FormControl/useRegisterModel.d.ts +0 -4
  177. package/cjs/FormControl/useRegisterModel.js +0 -18
  178. package/esm/FormControl/useRegisterModel.d.ts +0 -4
  179. package/esm/FormControl/useRegisterModel.js +0 -13
  180. /package/cjs/Form/{useSchemaModel.d.ts → hooks/useSchemaModel.d.ts} +0 -0
  181. /package/esm/Form/{useSchemaModel.d.ts → hooks/useSchemaModel.d.ts} +0 -0
package/cjs/Form/Form.js CHANGED
@@ -1,27 +1,28 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
5
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
5
  exports.__esModule = true;
7
6
  exports.default = void 0;
8
- var _extends6 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
- var _react = _interopRequireWildcard(require("react"));
9
+ var _react = _interopRequireDefault(require("react"));
11
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _omit = _interopRequireDefault(require("lodash/omit"));
13
- var _set = _interopRequireDefault(require("lodash/set"));
14
11
  var _schemaTyped = require("schema-typed");
15
- var _FormContext = _interopRequireWildcard(require("./FormContext"));
12
+ var _FormContext = require("./FormContext");
16
13
  var _FormControl = _interopRequireDefault(require("../FormControl"));
17
14
  var _FormControlLabel = _interopRequireDefault(require("../FormControlLabel"));
18
15
  var _FormErrorMessage = _interopRequireDefault(require("../FormErrorMessage"));
19
16
  var _FormGroup = _interopRequireDefault(require("../FormGroup"));
20
17
  var _FormHelpText = _interopRequireDefault(require("../FormHelpText"));
21
- var _useFormClassNames = require("./useFormClassNames");
22
- var _useSchemaModel2 = _interopRequireDefault(require("./useSchemaModel"));
23
18
  var _utils = require("../utils");
24
19
  var _propTypes2 = require("../internals/propTypes");
20
+ var _useSchemaModel2 = _interopRequireDefault(require("./hooks/useSchemaModel"));
21
+ var _useFormValidate2 = _interopRequireDefault(require("./hooks/useFormValidate"));
22
+ var _useFormValue2 = _interopRequireDefault(require("./hooks/useFormValue"));
23
+ var _useFormClassNames = _interopRequireDefault(require("./hooks/useFormClassNames"));
24
+ var defaultSchema = (0, _schemaTyped.SchemaModel)({});
25
+
25
26
  /**
26
27
  * The `Form` component is a form interface for collecting and validating user input.
27
28
  * @see https://rsuitejs.com/components/form
@@ -35,15 +36,15 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
35
36
  errorFromContext = _props$errorFromConte === void 0 ? true : _props$errorFromConte,
36
37
  _props$formDefaultVal = props.formDefaultValue,
37
38
  formDefaultValue = _props$formDefaultVal === void 0 ? {} : _props$formDefaultVal,
38
- formValue = props.formValue,
39
- formError = props.formError,
39
+ controlledFormValue = props.formValue,
40
+ controlledFormError = props.formError,
40
41
  fluid = props.fluid,
41
42
  _props$nestedField = props.nestedField,
42
43
  nestedField = _props$nestedField === void 0 ? false : _props$nestedField,
43
44
  _props$layout = props.layout,
44
45
  layout = _props$layout === void 0 ? 'vertical' : _props$layout,
45
46
  _props$model = props.model,
46
- formModel = _props$model === void 0 ? (0, _schemaTyped.SchemaModel)({}) : _props$model,
47
+ formModel = _props$model === void 0 ? defaultSchema : _props$model,
47
48
  readOnly = props.readOnly,
48
49
  plaintext = props.plaintext,
49
50
  className = props.className,
@@ -58,7 +59,28 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
58
59
  getCombinedModel = _useSchemaModel.getCombinedModel,
59
60
  pushFieldRule = _useSchemaModel.pushFieldRule,
60
61
  removeFieldRule = _useSchemaModel.removeFieldRule;
61
- var classes = (0, _useFormClassNames.useFormClassNames)({
62
+ var _useFormValue = (0, _useFormValue2.default)(controlledFormValue, {
63
+ formDefaultValue: formDefaultValue,
64
+ nestedField: nestedField
65
+ }),
66
+ formValue = _useFormValue.formValue,
67
+ onRemoveValue = _useFormValue.onRemoveValue,
68
+ setFieldValue = _useFormValue.setFieldValue;
69
+ var formValidateProps = {
70
+ ref: ref,
71
+ formValue: formValue,
72
+ getCombinedModel: getCombinedModel,
73
+ onCheck: onCheck,
74
+ onError: onError,
75
+ nestedField: nestedField
76
+ };
77
+ var _useFormValidate = (0, _useFormValidate2.default)(controlledFormError, formValidateProps),
78
+ formError = _useFormValidate.formError,
79
+ setFieldError = _useFormValidate.setFieldError,
80
+ onRemoveError = _useFormValidate.onRemoveError,
81
+ check = _useFormValidate.check,
82
+ formRef = _useFormValidate.formRef;
83
+ var classes = (0, _useFormClassNames.default)({
62
84
  classPrefix: classPrefix,
63
85
  className: className,
64
86
  fluid: fluid,
@@ -67,218 +89,58 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
67
89
  plaintext: plaintext,
68
90
  disabled: disabled
69
91
  });
70
- var _useControlled = (0, _utils.useControlled)(formValue, formDefaultValue),
71
- realFormValue = _useControlled[0],
72
- setFormValue = _useControlled[1];
73
- var _useControlled2 = (0, _utils.useControlled)(formError, {}),
74
- realFormError = _useControlled2[0],
75
- setFormError = _useControlled2[1];
76
- var realFormValueRef = (0, _react.useRef)(realFormValue);
77
- realFormValueRef.current = realFormValue;
78
- var realFormErrorRef = (0, _react.useRef)(realFormError);
79
- realFormErrorRef.current = realFormError;
80
-
81
- /**
82
- * Validate the form data and return a boolean.
83
- * The error message after verification is returned in the callback.
84
- * @param callback
85
- */
86
- var check = (0, _utils.useEventCallback)(function (callback) {
87
- var formValue = realFormValue || {};
88
- var formError = {};
89
- var errorCount = 0;
90
- var model = getCombinedModel();
91
- Object.keys(model.spec).forEach(function (key) {
92
- var checkResult = model.checkForField(key, formValue);
93
- if (checkResult.hasError === true) {
94
- errorCount += 1;
95
- formError[key] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult;
96
- }
97
- });
98
- setFormError(formError);
99
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
100
- callback === null || callback === void 0 ? void 0 : callback(formError);
101
- if (errorCount > 0) {
102
- onError === null || onError === void 0 ? void 0 : onError(formError);
103
- return false;
104
- }
105
- return true;
106
- });
107
-
108
- /**
109
- * Check the data field
110
- * @param fieldName
111
- * @param callback
112
- */
113
- var checkForField = (0, _utils.useEventCallback)(function (fieldName, callback) {
114
- var _extends2;
115
- var formValue = realFormValue || {};
116
- var model = getCombinedModel();
117
- var checkResult = model.checkForField(fieldName, formValue);
118
- var formError = (0, _extends6.default)({}, realFormError, (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
119
- setFormError(formError);
120
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
121
- callback === null || callback === void 0 ? void 0 : callback(checkResult);
122
- if (checkResult.hasError) {
123
- onError === null || onError === void 0 ? void 0 : onError(formError);
124
- }
125
- return !checkResult.hasError;
126
- });
127
-
128
- /**
129
- * Check form data asynchronously and return a Promise
130
- */
131
- var checkAsync = (0, _utils.useEventCallback)(function () {
132
- var formValue = realFormValue || {};
133
- var promises = [];
134
- var keys = [];
135
- var model = getCombinedModel();
136
- Object.keys(model.spec).forEach(function (key) {
137
- keys.push(key);
138
- promises.push(model.checkForFieldAsync(key, formValue));
139
- });
140
- return Promise.all(promises).then(function (values) {
141
- var formError = {};
142
- var errorCount = 0;
143
- for (var i = 0; i < values.length; i++) {
144
- if (values[i].hasError) {
145
- errorCount += 1;
146
- formError[keys[i]] = values[i].errorMessage;
147
- }
148
- }
149
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
150
- setFormError(formError);
151
- if (errorCount > 0) {
152
- onError === null || onError === void 0 ? void 0 : onError(formError);
153
- }
154
- return {
155
- hasError: errorCount > 0,
156
- formError: formError
157
- };
158
- });
159
- });
160
-
161
- /**
162
- * Asynchronously check form fields and return Promise
163
- * @param fieldName
164
- */
165
- var checkForFieldAsync = (0, _utils.useEventCallback)(function (fieldName) {
166
- var formValue = realFormValue || {};
167
- var model = getCombinedModel();
168
- return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
169
- var _extends3;
170
- var formError = (0, _extends6.default)({}, realFormError, (_extends3 = {}, _extends3[fieldName] = checkResult.errorMessage, _extends3));
171
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
172
- setFormError(formError);
173
- if (checkResult.hasError) {
174
- onError === null || onError === void 0 ? void 0 : onError(formError);
175
- }
176
- return checkResult;
177
- });
178
- });
179
- var cleanErrors = (0, _utils.useEventCallback)(function () {
180
- setFormError({});
181
- });
182
- var cleanErrorForField = (0, _utils.useEventCallback)(function (fieldName) {
183
- setFormError((0, _omit.default)(realFormError, [fieldName]));
184
- });
185
- var resetErrors = (0, _utils.useEventCallback)(function (formError) {
186
- if (formError === void 0) {
187
- formError = {};
188
- }
189
- setFormError(formError);
190
- });
191
- (0, _react.useImperativeHandle)(ref, function () {
192
- return {
193
- root: rootRef.current,
194
- check: check,
195
- checkForField: checkForField,
196
- checkAsync: checkAsync,
197
- checkForFieldAsync: checkForFieldAsync,
198
- cleanErrors: cleanErrors,
199
- cleanErrorForField: cleanErrorForField,
200
- resetErrors: resetErrors
201
- };
202
- });
203
- var removeFieldError = (0, _utils.useEventCallback)(function (name) {
204
- /**
205
- * when this function is called when the children component is unmount, it's an old render frame
206
- * so use Ref to get future error
207
- */
208
- var formError = (0, _omit.default)(realFormErrorRef.current, [name]);
209
- realFormErrorRef.current = formError;
210
- setFormError(formError);
211
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
212
- });
213
92
  var removeFieldValue = (0, _utils.useEventCallback)(function (name) {
214
- /**
215
- * when this function is called when the children component is unmount, it's an old render frame
216
- * so use Ref to get future value
217
- */
218
- var formValue = (0, _omit.default)(realFormValueRef.current, [name]);
219
- realFormValueRef.current = formValue;
220
- setFormValue(formValue);
93
+ var formValue = onRemoveValue(name);
221
94
  onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
222
95
  });
96
+ var removeFieldError = (0, _utils.useEventCallback)(function (name) {
97
+ onRemoveError(name);
98
+ });
223
99
  var handleSubmit = (0, _utils.useEventCallback)(function (event) {
100
+ var _event$preventDefault, _event$stopPropagatio;
101
+ event === null || event === void 0 ? void 0 : (_event$preventDefault = event.preventDefault) === null || _event$preventDefault === void 0 ? void 0 : _event$preventDefault.call(event);
102
+ event === null || event === void 0 ? void 0 : (_event$stopPropagatio = event.stopPropagation) === null || _event$stopPropagatio === void 0 ? void 0 : _event$stopPropagatio.call(event);
224
103
  if (disabled || readOnly || plaintext) {
225
104
  return;
226
105
  }
227
- event.preventDefault();
228
- event.stopPropagation();
229
- var checkStatus = check();
230
- onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(checkStatus, event);
106
+ var checkResult = check();
107
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(checkResult, event);
231
108
  });
232
- var handleFieldError = (0, _utils.useEventCallback)(function (name, errorMessage) {
233
- var _extends4;
234
- var formError = (0, _extends6.default)({}, realFormError, (_extends4 = {}, _extends4[name] = errorMessage, _extends4));
235
- setFormError(formError);
236
- onError === null || onError === void 0 ? void 0 : onError(formError);
237
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
109
+ var onFieldError = (0, _utils.useEventCallback)(function (name, checkResult) {
110
+ setFieldError(name, checkResult);
238
111
  });
239
- var handleFieldSuccess = (0, _utils.useEventCallback)(function (name) {
112
+ var onFieldSuccess = (0, _utils.useEventCallback)(function (name) {
240
113
  removeFieldError(name);
241
114
  });
242
- var setFieldValue = function setFieldValue(formValue, fieldName, fieldValue) {
243
- var _extends5;
244
- if (nestedField) {
245
- return (0, _set.default)((0, _extends6.default)({}, formValue), fieldName, fieldValue);
246
- }
247
- return (0, _extends6.default)({}, formValue, (_extends5 = {}, _extends5[fieldName] = fieldValue, _extends5));
248
- };
249
- var handleFieldChange = (0, _utils.useEventCallback)(function (name, value, event) {
250
- var nextFormValue = setFieldValue(realFormValue, name, value);
251
- setFormValue(nextFormValue);
115
+ var onFieldChange = (0, _utils.useEventCallback)(function (name, value, event) {
116
+ var nextFormValue = setFieldValue(name, value);
252
117
  onChange === null || onChange === void 0 ? void 0 : onChange(nextFormValue, event);
253
118
  });
254
- var rootRef = (0, _react.useRef)(null);
255
- var formContextValue = (0, _react.useMemo)(function () {
256
- return {
257
- getCombinedModel: getCombinedModel,
258
- checkTrigger: checkTrigger,
259
- errorFromContext: errorFromContext,
260
- readOnly: readOnly,
261
- plaintext: plaintext,
262
- disabled: disabled,
263
- formError: realFormError,
264
- nestedField: nestedField,
265
- removeFieldValue: removeFieldValue,
266
- removeFieldError: removeFieldError,
267
- pushFieldRule: pushFieldRule,
268
- removeFieldRule: removeFieldRule,
269
- onFieldChange: handleFieldChange,
270
- onFieldError: handleFieldError,
271
- onFieldSuccess: handleFieldSuccess
272
- };
273
- }, [getCombinedModel, checkTrigger, errorFromContext, readOnly, plaintext, disabled, realFormError, nestedField, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
274
- return /*#__PURE__*/_react.default.createElement("form", (0, _extends6.default)({}, rest, {
275
- ref: rootRef,
119
+ var formContextValue = {
120
+ errorFromContext: errorFromContext,
121
+ checkTrigger: checkTrigger,
122
+ plaintext: plaintext,
123
+ readOnly: readOnly,
124
+ disabled: disabled,
125
+ formError: formError,
126
+ nestedField: nestedField,
127
+ pushFieldRule: pushFieldRule,
128
+ getCombinedModel: getCombinedModel,
129
+ removeFieldValue: removeFieldValue,
130
+ removeFieldError: removeFieldError,
131
+ removeFieldRule: removeFieldRule,
132
+ onFieldSuccess: onFieldSuccess,
133
+ onFieldChange: onFieldChange,
134
+ onFieldError: onFieldError
135
+ };
136
+ return /*#__PURE__*/_react.default.createElement("form", (0, _extends2.default)({}, rest, {
137
+ ref: formRef,
276
138
  onSubmit: handleSubmit,
277
139
  className: classes
278
- }), /*#__PURE__*/_react.default.createElement(_FormContext.default.Provider, {
140
+ }), /*#__PURE__*/_react.default.createElement(_FormContext.FormProvider, {
279
141
  value: formContextValue
280
- }, /*#__PURE__*/_react.default.createElement(_FormContext.FormValueContext.Provider, {
281
- value: realFormValue
142
+ }, /*#__PURE__*/_react.default.createElement(_FormContext.FormValueProvider, {
143
+ value: formValue
282
144
  }, children)));
283
145
  });
284
146
  Form.Control = _FormControl.default;
@@ -1,19 +1,20 @@
1
1
  import React from 'react';
2
2
  import { TypeAttributes } from '../@types/common';
3
- import type { Schema } from 'schema-typed';
4
- import type { FieldRuleType } from './useSchemaModel';
5
- interface TrulyFormContextValue<T = Record<string, any>, errorMsgType = any, E = {
3
+ import type { Schema, CheckResult } from 'schema-typed';
4
+ import type { FieldRuleType } from './hooks/useSchemaModel';
5
+ declare type RecordAny = Record<string, any>;
6
+ interface TrulyFormContextValue<T = RecordAny, errorMsgType = any, E = {
6
7
  [P in keyof T]?: errorMsgType;
7
8
  }> {
8
- getCombinedModel: () => Schema;
9
9
  formError: E;
10
10
  nestedField: boolean;
11
+ getCombinedModel: () => Schema;
11
12
  removeFieldValue: (name: string) => void;
12
13
  removeFieldError: (name: string) => void;
13
- pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
14
14
  removeFieldRule: (name: string) => void;
15
+ pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
16
+ onFieldError: (name: string, fieldError: string | CheckResult) => void;
15
17
  onFieldChange: (name: string, value: any, event: React.SyntheticEvent) => void;
16
- onFieldError: (name: string, errorMessage: string) => void;
17
18
  onFieldSuccess: (name: string) => void;
18
19
  }
19
20
  declare type ExternalPropsContextValue = {
@@ -24,8 +25,10 @@ declare type ExternalPropsContextValue = {
24
25
  disabled?: boolean;
25
26
  };
26
27
  declare type InitialContextType = Partial<Record<keyof TrulyFormContextValue, undefined>>;
27
- export declare type FormContextValue<T = Record<string, any>, errorMsgType = any> = (TrulyFormContextValue<T, errorMsgType> | InitialContextType) & ExternalPropsContextValue;
28
- export declare const FormContext: React.Context<FormContextValue<Record<string, any>, any>>;
29
- export declare const FormValueContext: React.Context<Record<string, any> | undefined>;
30
- export declare const FormPlaintextContext: React.Context<boolean>;
28
+ export declare type FormContextValue<T = RecordAny, errorMsgType = any> = (TrulyFormContextValue<T, errorMsgType> | InitialContextType) & ExternalPropsContextValue;
29
+ export declare const FormContext: React.Context<FormContextValue<RecordAny, any>>;
30
+ export declare const FormValueContext: React.Context<RecordAny | undefined>;
31
+ export declare const FormProvider: React.Provider<FormContextValue<RecordAny, any>>;
32
+ export declare const FormValueProvider: React.Provider<RecordAny | undefined>;
33
+ export declare function useFormContext<T = RecordAny, E = any>(): FormContextValue<T, E>;
31
34
  export default FormContext;
@@ -1,15 +1,21 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
5
5
  exports.__esModule = true;
6
- exports.default = exports.FormPlaintextContext = exports.FormValueContext = exports.FormContext = void 0;
7
- var _react = _interopRequireDefault(require("react"));
6
+ exports.useFormContext = useFormContext;
7
+ exports.default = exports.FormValueProvider = exports.FormProvider = exports.FormValueContext = exports.FormContext = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
8
9
  var FormContext = /*#__PURE__*/_react.default.createContext({});
9
10
  exports.FormContext = FormContext;
10
11
  var FormValueContext = /*#__PURE__*/_react.default.createContext({});
11
12
  exports.FormValueContext = FormValueContext;
12
- var FormPlaintextContext = /*#__PURE__*/_react.default.createContext(false);
13
- exports.FormPlaintextContext = FormPlaintextContext;
13
+ var FormProvider = FormContext.Provider;
14
+ exports.FormProvider = FormProvider;
15
+ var FormValueProvider = FormValueContext.Provider;
16
+ exports.FormValueProvider = FormValueProvider;
17
+ function useFormContext() {
18
+ return (0, _react.useContext)(FormContext);
19
+ }
14
20
  var _default = FormContext;
15
21
  exports.default = _default;
@@ -1,5 +1,5 @@
1
- import type { FormProps } from './Form';
1
+ import type { FormProps } from '../Form';
2
2
  /**
3
3
  * Take <Form> props and return className for <Form> styles
4
4
  */
5
- export declare function useFormClassNames({ classPrefix, className, fluid, layout, readOnly, plaintext, disabled }: Pick<FormProps, 'classPrefix' | 'className' | 'fluid' | 'layout' | 'readOnly' | 'plaintext' | 'disabled'>): string;
5
+ export default function useFormClassNames({ classPrefix, className, fluid, layout, readOnly, plaintext, disabled }: Pick<FormProps, 'classPrefix' | 'className' | 'fluid' | 'layout' | 'readOnly' | 'plaintext' | 'disabled'>): string;
@@ -2,8 +2,8 @@
2
2
  "use strict";
3
3
 
4
4
  exports.__esModule = true;
5
- exports.useFormClassNames = useFormClassNames;
6
- var _utils = require("../utils");
5
+ exports.default = useFormClassNames;
6
+ var _utils = require("../../utils");
7
7
  /**
8
8
  * Take <Form> props and return className for <Form> styles
9
9
  */
@@ -0,0 +1,55 @@
1
+ /// <reference types="react" />
2
+ import type { CheckResult } from 'schema-typed';
3
+ export interface FormImperativeMethods<T = Record<string, any>, M = string, E = {
4
+ [P in keyof T]?: M;
5
+ }> {
6
+ /**
7
+ * Verify form data
8
+ */
9
+ check: (callback?: (formError: E) => void) => boolean;
10
+ /**
11
+ * Asynchronously check form data
12
+ */
13
+ checkAsync: () => Promise<any>;
14
+ /**
15
+ * Check the data field
16
+ */
17
+ checkForField: (fieldName: keyof T, callback?: (checkResult: CheckResult<M>) => void) => boolean;
18
+ /**
19
+ * Asynchronous verification as a data field
20
+ */
21
+ checkForFieldAsync: (fieldName: keyof T) => Promise<CheckResult>;
22
+ /**
23
+ * Clear all error messages
24
+ */
25
+ cleanErrors: (callback?: () => void) => void;
26
+ /**
27
+ * Clear the error message of the specified field
28
+ */
29
+ cleanErrorForField: (fieldName: keyof E, callback?: () => void) => void;
30
+ /**
31
+ * All error messages are reset, and an initial value can be set
32
+ */
33
+ resetErrors: (formError?: E) => void;
34
+ }
35
+ export interface FormInstance<T = Record<string, any>, M = string, E = {
36
+ [P in keyof T]?: M;
37
+ }> extends FormImperativeMethods<T, M, E> {
38
+ /**
39
+ * Form root element
40
+ */
41
+ root: HTMLFormElement | null;
42
+ }
43
+ interface FormRefProps<T = Record<string, any>, M = string, E = {
44
+ [P in keyof T]?: M;
45
+ }> {
46
+ formError: E;
47
+ nestedField?: boolean;
48
+ setFormError: (formError: E) => void;
49
+ check: (callback?: (formError: E) => void) => boolean;
50
+ checkForField: (fieldName: keyof T, callback?: (checkResult: CheckResult<M>) => void) => boolean;
51
+ checkAsync: () => Promise<any>;
52
+ checkForFieldAsync: (fieldName: keyof T) => Promise<CheckResult>;
53
+ }
54
+ export default function useFormRef(ref: React.Ref<FormInstance>, props: FormRefProps): import("react").RefObject<HTMLFormElement>;
55
+ export {};
@@ -0,0 +1,45 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = useFormRef;
7
+ var _react = require("react");
8
+ var _omit = _interopRequireDefault(require("lodash/omit"));
9
+ var _useEventCallback = _interopRequireDefault(require("../../utils/useEventCallback"));
10
+ var _utils = require("../../FormControl/utils");
11
+ function useFormRef(ref, props) {
12
+ var rootRef = (0, _react.useRef)(null);
13
+ var formError = props.formError,
14
+ setFormError = props.setFormError,
15
+ nestedField = props.nestedField,
16
+ check = props.check,
17
+ checkForField = props.checkForField,
18
+ checkAsync = props.checkAsync,
19
+ checkForFieldAsync = props.checkForFieldAsync;
20
+ var cleanErrors = (0, _useEventCallback.default)(function () {
21
+ setFormError({});
22
+ });
23
+ var resetErrors = (0, _useEventCallback.default)(function (formError) {
24
+ if (formError === void 0) {
25
+ formError = {};
26
+ }
27
+ setFormError(formError);
28
+ });
29
+ var cleanErrorForField = (0, _useEventCallback.default)(function (fieldName) {
30
+ setFormError((0, _omit.default)(formError, [nestedField ? (0, _utils.nameToPath)(fieldName) : fieldName]));
31
+ });
32
+ (0, _react.useImperativeHandle)(ref, function () {
33
+ return {
34
+ root: rootRef.current,
35
+ check: check,
36
+ checkForField: checkForField,
37
+ checkAsync: checkAsync,
38
+ checkForFieldAsync: checkForFieldAsync,
39
+ cleanErrors: cleanErrors,
40
+ cleanErrorForField: cleanErrorForField,
41
+ resetErrors: resetErrors
42
+ };
43
+ });
44
+ return rootRef;
45
+ }
@@ -0,0 +1,19 @@
1
+ /// <reference types="react" />
2
+ /// <reference types="lodash" />
3
+ import type { CheckResult } from 'schema-typed';
4
+ import { FormInstance } from './useFormRef';
5
+ export interface FormErrorProps {
6
+ ref: React.Ref<FormInstance>;
7
+ formValue: any;
8
+ getCombinedModel: () => any;
9
+ onCheck?: (formError: any) => void;
10
+ onError?: (formError: any) => void;
11
+ nestedField?: boolean;
12
+ }
13
+ export default function useFormValidate(formError: any, props: FormErrorProps): {
14
+ formRef: import("react").RefObject<HTMLFormElement>;
15
+ formError: any;
16
+ check: (...args: any[]) => any;
17
+ setFieldError: (fieldName: string, checkResult: string | CheckResult) => any;
18
+ onRemoveError: (name: string) => import("lodash").Omit<any, string>;
19
+ };