rsuite 5.59.1 → 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 (141) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/DateRangePicker/styles/index.css +27 -0
  3. package/DateRangePicker/styles/index.less +27 -0
  4. package/cjs/@types/common.d.ts +1 -1
  5. package/cjs/Calendar/CalendarContainer.js +4 -4
  6. package/cjs/DatePicker/DatePicker.d.ts +3 -38
  7. package/cjs/DatePicker/DatePicker.js +86 -137
  8. package/cjs/DatePicker/PredefinedRanges.d.ts +1 -1
  9. package/cjs/DatePicker/PredefinedRanges.js +3 -3
  10. package/cjs/DatePicker/Toolbar.d.ts +1 -1
  11. package/cjs/DatePicker/Toolbar.js +13 -12
  12. package/cjs/DatePicker/hooks/useFocus.d.ts +13 -0
  13. package/cjs/DatePicker/hooks/useFocus.js +96 -0
  14. package/cjs/DatePicker/hooks/useMonthView.d.ts +10 -0
  15. package/cjs/DatePicker/hooks/useMonthView.js +28 -0
  16. package/cjs/DatePicker/index.d.ts +2 -1
  17. package/cjs/DatePicker/types.d.ts +37 -0
  18. package/cjs/DatePicker/utils.d.ts +9 -0
  19. package/cjs/DatePicker/utils.js +20 -2
  20. package/cjs/DateRangePicker/DateRangePicker.d.ts +15 -3
  21. package/cjs/DateRangePicker/DateRangePicker.js +58 -68
  22. package/cjs/DateRangePicker/DateRangePickerContext.d.ts +4 -1
  23. package/cjs/DateRangePicker/DateRangePickerContext.js +4 -4
  24. package/cjs/DateRangePicker/Header.d.ts +11 -0
  25. package/cjs/DateRangePicker/Header.js +65 -0
  26. package/cjs/DateRangePicker/disabledDateUtils.d.ts +1 -1
  27. package/cjs/DateRangePicker/disabledDateUtils.js +1 -1
  28. package/cjs/DateRangePicker/index.js +5 -0
  29. package/cjs/Form/Form.d.ts +56 -39
  30. package/cjs/Form/Form.js +64 -186
  31. package/cjs/Form/FormContext.d.ts +12 -9
  32. package/cjs/Form/FormContext.js +11 -5
  33. package/cjs/Form/hooks/useFormRef.d.ts +55 -0
  34. package/cjs/Form/hooks/useFormRef.js +45 -0
  35. package/cjs/Form/hooks/useFormValidate.d.ts +19 -0
  36. package/cjs/Form/hooks/useFormValidate.js +157 -0
  37. package/cjs/Form/hooks/useFormValue.d.ts +2 -1
  38. package/cjs/Form/hooks/useFormValue.js +12 -1
  39. package/cjs/Form/hooks/useSchemaModel.js +5 -0
  40. package/cjs/Form/index.d.ts +2 -1
  41. package/cjs/FormControl/FormControl.d.ts +1 -1
  42. package/cjs/FormControl/FormControl.js +50 -68
  43. package/cjs/FormControl/hooks/useField.d.ts +18 -0
  44. package/cjs/FormControl/hooks/useField.js +54 -0
  45. package/cjs/FormControl/hooks/useRegisterModel.d.ts +3 -0
  46. package/cjs/FormControl/hooks/useRegisterModel.js +22 -0
  47. package/cjs/FormControl/utils.d.ts +1 -0
  48. package/cjs/FormControl/utils.js +8 -0
  49. package/cjs/FormControlLabel/FormControlLabel.js +12 -9
  50. package/cjs/FormErrorMessage/FormErrorMessage.js +2 -5
  51. package/cjs/FormGroup/FormGroup.d.ts +18 -4
  52. package/cjs/FormGroup/FormGroup.js +28 -2
  53. package/cjs/FormGroup/index.d.ts +1 -0
  54. package/cjs/FormGroup/index.js +4 -3
  55. package/cjs/FormHelpText/FormHelpText.d.ts +2 -1
  56. package/cjs/FormHelpText/FormHelpText.js +16 -9
  57. package/cjs/Input/Input.js +4 -5
  58. package/cjs/utils/dateUtils.d.ts +72 -10
  59. package/cjs/utils/dateUtils.js +88 -29
  60. package/dist/rsuite-no-reset-rtl.css +27 -0
  61. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  62. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  63. package/dist/rsuite-no-reset.css +27 -0
  64. package/dist/rsuite-no-reset.min.css +1 -1
  65. package/dist/rsuite-no-reset.min.css.map +1 -1
  66. package/dist/rsuite-rtl.css +27 -0
  67. package/dist/rsuite-rtl.min.css +1 -1
  68. package/dist/rsuite-rtl.min.css.map +1 -1
  69. package/dist/rsuite.css +27 -0
  70. package/dist/rsuite.js +144 -44
  71. package/dist/rsuite.js.map +1 -1
  72. package/dist/rsuite.min.css +1 -1
  73. package/dist/rsuite.min.css.map +1 -1
  74. package/dist/rsuite.min.js +1 -1
  75. package/dist/rsuite.min.js.LICENSE.txt +35 -0
  76. package/dist/rsuite.min.js.map +1 -1
  77. package/esm/@types/common.d.ts +1 -1
  78. package/esm/Calendar/CalendarContainer.js +5 -5
  79. package/esm/DatePicker/DatePicker.d.ts +3 -38
  80. package/esm/DatePicker/DatePicker.js +88 -139
  81. package/esm/DatePicker/PredefinedRanges.d.ts +1 -1
  82. package/esm/DatePicker/PredefinedRanges.js +3 -3
  83. package/esm/DatePicker/Toolbar.d.ts +1 -1
  84. package/esm/DatePicker/Toolbar.js +13 -12
  85. package/esm/DatePicker/hooks/useFocus.d.ts +13 -0
  86. package/esm/DatePicker/hooks/useFocus.js +90 -0
  87. package/esm/DatePicker/hooks/useMonthView.d.ts +10 -0
  88. package/esm/DatePicker/hooks/useMonthView.js +22 -0
  89. package/esm/DatePicker/index.d.ts +2 -1
  90. package/esm/DatePicker/types.d.ts +37 -0
  91. package/esm/DatePicker/utils.d.ts +9 -0
  92. package/esm/DatePicker/utils.js +18 -2
  93. package/esm/DateRangePicker/DateRangePicker.d.ts +15 -3
  94. package/esm/DateRangePicker/DateRangePicker.js +61 -71
  95. package/esm/DateRangePicker/DateRangePickerContext.d.ts +4 -1
  96. package/esm/DateRangePicker/DateRangePickerContext.js +2 -2
  97. package/esm/DateRangePicker/Header.d.ts +11 -0
  98. package/esm/DateRangePicker/Header.js +59 -0
  99. package/esm/DateRangePicker/disabledDateUtils.d.ts +1 -1
  100. package/esm/DateRangePicker/disabledDateUtils.js +1 -1
  101. package/esm/DateRangePicker/index.js +4 -0
  102. package/esm/Form/Form.d.ts +56 -39
  103. package/esm/Form/Form.js +62 -183
  104. package/esm/Form/FormContext.d.ts +12 -9
  105. package/esm/Form/FormContext.js +6 -2
  106. package/esm/Form/hooks/useFormRef.d.ts +55 -0
  107. package/esm/Form/hooks/useFormRef.js +40 -0
  108. package/esm/Form/hooks/useFormValidate.d.ts +19 -0
  109. package/esm/Form/hooks/useFormValidate.js +152 -0
  110. package/esm/Form/hooks/useFormValue.d.ts +2 -1
  111. package/esm/Form/hooks/useFormValue.js +12 -1
  112. package/esm/Form/hooks/useSchemaModel.js +5 -0
  113. package/esm/Form/index.d.ts +2 -1
  114. package/esm/FormControl/FormControl.d.ts +1 -1
  115. package/esm/FormControl/FormControl.js +48 -66
  116. package/esm/FormControl/hooks/useField.d.ts +18 -0
  117. package/esm/FormControl/hooks/useField.js +48 -0
  118. package/esm/FormControl/hooks/useRegisterModel.d.ts +3 -0
  119. package/esm/FormControl/hooks/useRegisterModel.js +17 -0
  120. package/esm/FormControl/utils.d.ts +1 -0
  121. package/esm/FormControl/utils.js +4 -0
  122. package/esm/FormControlLabel/FormControlLabel.js +12 -8
  123. package/esm/FormErrorMessage/FormErrorMessage.js +2 -5
  124. package/esm/FormGroup/FormGroup.d.ts +18 -4
  125. package/esm/FormGroup/FormGroup.js +27 -1
  126. package/esm/FormGroup/index.d.ts +1 -0
  127. package/esm/FormGroup/index.js +1 -0
  128. package/esm/FormHelpText/FormHelpText.d.ts +2 -1
  129. package/esm/FormHelpText/FormHelpText.js +17 -9
  130. package/esm/Input/Input.js +4 -5
  131. package/esm/utils/dateUtils.d.ts +72 -10
  132. package/esm/utils/dateUtils.js +86 -28
  133. package/package.json +2 -2
  134. package/cjs/Form/hooks/useFormError.d.ts +0 -6
  135. package/cjs/Form/hooks/useFormError.js +0 -31
  136. package/cjs/FormControl/useRegisterModel.d.ts +0 -4
  137. package/cjs/FormControl/useRegisterModel.js +0 -18
  138. package/esm/Form/hooks/useFormError.d.ts +0 -6
  139. package/esm/Form/hooks/useFormError.js +0 -26
  140. package/esm/FormControl/useRegisterModel.d.ts +0 -4
  141. package/esm/FormControl/useRegisterModel.js +0 -13
@@ -0,0 +1,65 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _utils = require("../utils");
9
+ var _dateUtils = require("../utils/dateUtils");
10
+ var _CustomProvider = require("../CustomProvider");
11
+ var _Button = _interopRequireDefault(require("../Button"));
12
+ function Header(props) {
13
+ var _prefix;
14
+ var _useClassNames = (0, _utils.useClassNames)('picker'),
15
+ prefix = _useClassNames.prefix;
16
+ var formatStr = props.formatStr,
17
+ character = props.character,
18
+ value = props.value,
19
+ _props$activeKey = props.activeKey,
20
+ activeKey = _props$activeKey === void 0 ? 'start' : _props$activeKey,
21
+ clickable = props.clickable,
22
+ onSelect = props.onSelect;
23
+ var _ref = value !== null && value !== void 0 ? value : [null, null],
24
+ startDate = _ref[0],
25
+ endDate = _ref[1];
26
+ var v = startDate && endDate ? [startDate, endDate].sort(_dateUtils.compareAsc) : [startDate, endDate];
27
+ var start = v[0] ? /*#__PURE__*/_react.default.createElement(_CustomProvider.FormattedDate, {
28
+ date: v[0],
29
+ formatStr: formatStr
30
+ }) : formatStr;
31
+ var end = v[1] ? /*#__PURE__*/_react.default.createElement(_CustomProvider.FormattedDate, {
32
+ date: v[1],
33
+ formatStr: formatStr
34
+ }) : formatStr;
35
+ return /*#__PURE__*/_react.default.createElement("div", {
36
+ className: prefix('daterange-header', (_prefix = {}, _prefix["tab-active-" + activeKey] = clickable, _prefix)),
37
+ "data-testid": "daterange-header"
38
+ }, clickable ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
39
+ size: "xs",
40
+ appearance: "subtle",
41
+ className: prefix('header-date'),
42
+ onClick: function onClick() {
43
+ return onSelect === null || onSelect === void 0 ? void 0 : onSelect('start');
44
+ },
45
+ "aria-label": "Select start date"
46
+ }, start), /*#__PURE__*/_react.default.createElement("span", {
47
+ className: prefix('header-character')
48
+ }, character), /*#__PURE__*/_react.default.createElement(_Button.default, {
49
+ size: "xs",
50
+ appearance: "subtle",
51
+ className: prefix('header-date'),
52
+ onClick: function onClick() {
53
+ return onSelect === null || onSelect === void 0 ? void 0 : onSelect('end');
54
+ },
55
+ "aria-label": "Select end date"
56
+ }, end)) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
57
+ className: prefix('header-date')
58
+ }, start), /*#__PURE__*/_react.default.createElement("span", {
59
+ className: prefix('header-character')
60
+ }, character), /*#__PURE__*/_react.default.createElement("span", {
61
+ className: prefix('header-date')
62
+ }, end)));
63
+ }
64
+ var _default = Header;
65
+ exports.default = _default;
@@ -4,7 +4,7 @@ import { DisabledDateFunction } from './types';
4
4
  */
5
5
  export declare function allowedMaxDays(days: number): DisabledDateFunction;
6
6
  /**
7
- Only allowed days are specified, other dates are disabled.
7
+ * Only allowed days are specified, other dates are disabled.
8
8
  */
9
9
  export declare function allowedDays(days: number): DisabledDateFunction;
10
10
  /**
@@ -46,7 +46,7 @@ function allowedMaxDays(days) {
46
46
  }
47
47
 
48
48
  /**
49
- Only allowed days are specified, other dates are disabled.
49
+ * Only allowed days are specified, other dates are disabled.
50
50
  */
51
51
  function allowedDays(days) {
52
52
  return function (date, selectValue, selectedDone, target) {
@@ -1,9 +1,14 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
6
  exports.__esModule = true;
6
7
  exports.default = void 0;
7
8
  var _DateRangePicker = _interopRequireDefault(require("./DateRangePicker"));
9
+ var utils = _interopRequireWildcard(require("./disabledDateUtils"));
10
+ Object.keys(utils).forEach(function (key) {
11
+ _DateRangePicker.default[key] = utils[key];
12
+ });
8
13
  var _default = _DateRangePicker.default;
9
14
  exports.default = _default;
@@ -1,36 +1,64 @@
1
1
  import React from 'react';
2
2
  import { Schema } from 'schema-typed';
3
- import type { CheckResult } from 'schema-typed';
4
3
  import FormControl from '../FormControl';
5
4
  import FormControlLabel from '../FormControlLabel';
6
5
  import FormErrorMessage from '../FormErrorMessage';
7
6
  import FormGroup from '../FormGroup';
8
7
  import FormHelpText from '../FormHelpText';
9
8
  import { WithAsProps, TypeAttributes, RsRefForwardingComponent } from '../@types/common';
9
+ import { FormInstance } from './hooks/useFormRef';
10
10
  export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
11
11
  [P in keyof T]?: errorMsgType;
12
12
  }> extends WithAsProps, Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onChange' | 'onSubmit' | 'onError'> {
13
- /** Set the left and right columns of the layout of the elements within the form */
13
+ /**
14
+ * Set the left and right columns of the layout of the elements within the form。
15
+ *
16
+ * @default 'vertical'
17
+ */
14
18
  layout?: 'horizontal' | 'vertical' | 'inline';
15
- /** The fluid property allows the Input 100% of the form to fill the container, valid only in vertical layouts. */
19
+ /**
20
+ * The fluid property allows the Input 100% of the form to fill the container, valid only in vertical layouts.
21
+ */
16
22
  fluid?: boolean;
17
- /** Current value of the input. Creates a controlled component */
18
- formValue?: T;
19
- /** Initial value */
20
- formDefaultValue?: T;
21
- /** Error message of form */
22
- formError?: E;
23
- /** Trigger the type of form validation */
23
+ /**
24
+ * Current value of the input. Creates a controlled component
25
+ */
26
+ formValue?: T | null;
27
+ /**
28
+ * Initial value
29
+ */
30
+ formDefaultValue?: T | null;
31
+ /**
32
+ * Error message of form
33
+ */
34
+ formError?: E | null;
35
+ /**
36
+ * Trigger the type of form validation.
37
+ *
38
+ * @default 'change'
39
+ */
24
40
  checkTrigger?: TypeAttributes.CheckTrigger;
25
- /** SchemaModel object */
41
+ /**
42
+ * SchemaModel object
43
+ *
44
+ * @see https://github.com/rsuite/schema-typed
45
+ */
26
46
  model?: Schema;
27
- /** Make the form readonly */
47
+ /**
48
+ * Make the form readonly
49
+ */
28
50
  readOnly?: boolean;
29
- /** Render the form as plain text */
51
+ /**
52
+ * Render the form as plain text
53
+ */
30
54
  plaintext?: boolean;
31
- /** Disable the form. */
55
+ /**
56
+ * Disable the form
57
+ */
32
58
  disabled?: boolean;
33
- /** The error message comes from context */
59
+ /**
60
+ * The error message comes from context
61
+ */
34
62
  errorFromContext?: boolean;
35
63
  /**
36
64
  * The form data is nested.
@@ -46,33 +74,22 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
46
74
  * ```
47
75
  */
48
76
  nestedField?: boolean;
49
- /** Callback fired when data changing */
77
+ /**
78
+ * Callback fired when data changing
79
+ */
50
80
  onChange?: (formValue: T, event?: React.SyntheticEvent) => void;
51
- /** Callback fired when error checking */
81
+ /**
82
+ * Callback fired when error checking
83
+ */
52
84
  onError?: (formError: E) => void;
53
- /** Callback fired when data cheking */
85
+ /**
86
+ * Callback fired when data cheking
87
+ */
54
88
  onCheck?: (formError: E) => void;
55
- /** Callback fired when form submit */
56
- onSubmit?: (checkStatus: boolean, event: React.FormEvent<HTMLFormElement>) => void;
57
- }
58
- export interface FormInstance<T = Record<string, any>, errorMsg = string, E = {
59
- [P in keyof T]?: errorMsg;
60
- }> {
61
- root: HTMLFormElement | null;
62
- /** Verify form data */
63
- check: (callback?: (formError: E) => void) => boolean;
64
- /** Asynchronously check form data */
65
- checkAsync: () => Promise<any>;
66
- /** Check the data field */
67
- checkForField: (fieldName: keyof T, callback?: (checkResult: CheckResult<errorMsg>) => void) => boolean;
68
- /** Asynchronous verification as a data field */
69
- checkForFieldAsync: (fieldName: keyof T) => Promise<CheckResult>;
70
- /** Clear all error messages */
71
- cleanErrors: (callback?: () => void) => void;
72
- /** Clear the error message of the specified field */
73
- cleanErrorForField: (fieldName: keyof E, callback?: () => void) => void;
74
- /** All error messages are reset, and an initial value can be set */
75
- resetErrors: (formError: E, callback?: () => void) => void;
89
+ /**
90
+ * Callback fired when form submit
91
+ */
92
+ onSubmit?: (checkPassed: boolean, event: React.FormEvent<HTMLFormElement>) => void;
76
93
  }
77
94
  export interface FormComponent extends RsRefForwardingComponent<'form', FormProps & {
78
95
  ref?: React.Ref<FormInstance>;
package/cjs/Form/Form.js CHANGED
@@ -1,18 +1,15 @@
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"));
@@ -21,9 +18,11 @@ var _FormHelpText = _interopRequireDefault(require("../FormHelpText"));
21
18
  var _utils = require("../utils");
22
19
  var _propTypes2 = require("../internals/propTypes");
23
20
  var _useSchemaModel2 = _interopRequireDefault(require("./hooks/useSchemaModel"));
24
- var _useFormError2 = _interopRequireDefault(require("./hooks/useFormError"));
21
+ var _useFormValidate2 = _interopRequireDefault(require("./hooks/useFormValidate"));
25
22
  var _useFormValue2 = _interopRequireDefault(require("./hooks/useFormValue"));
26
23
  var _useFormClassNames = _interopRequireDefault(require("./hooks/useFormClassNames"));
24
+ var defaultSchema = (0, _schemaTyped.SchemaModel)({});
25
+
27
26
  /**
28
27
  * The `Form` component is a form interface for collecting and validating user input.
29
28
  * @see https://rsuitejs.com/components/form
@@ -37,15 +36,15 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
37
36
  errorFromContext = _props$errorFromConte === void 0 ? true : _props$errorFromConte,
38
37
  _props$formDefaultVal = props.formDefaultValue,
39
38
  formDefaultValue = _props$formDefaultVal === void 0 ? {} : _props$formDefaultVal,
40
- formValueProp = props.formValue,
41
- formErrorProp = props.formError,
39
+ controlledFormValue = props.formValue,
40
+ controlledFormError = props.formError,
42
41
  fluid = props.fluid,
43
42
  _props$nestedField = props.nestedField,
44
43
  nestedField = _props$nestedField === void 0 ? false : _props$nestedField,
45
44
  _props$layout = props.layout,
46
45
  layout = _props$layout === void 0 ? 'vertical' : _props$layout,
47
46
  _props$model = props.model,
48
- formModel = _props$model === void 0 ? (0, _schemaTyped.SchemaModel)({}) : _props$model,
47
+ formModel = _props$model === void 0 ? defaultSchema : _props$model,
49
48
  readOnly = props.readOnly,
50
49
  plaintext = props.plaintext,
51
50
  className = props.className,
@@ -60,6 +59,27 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
60
59
  getCombinedModel = _useSchemaModel.getCombinedModel,
61
60
  pushFieldRule = _useSchemaModel.pushFieldRule,
62
61
  removeFieldRule = _useSchemaModel.removeFieldRule;
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;
63
83
  var classes = (0, _useFormClassNames.default)({
64
84
  classPrefix: classPrefix,
65
85
  className: className,
@@ -69,199 +89,57 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
69
89
  plaintext: plaintext,
70
90
  disabled: disabled
71
91
  });
72
- var _useFormValue = (0, _useFormValue2.default)(formValueProp, formDefaultValue),
73
- formValue = _useFormValue.formValue,
74
- setFormValue = _useFormValue.setFormValue,
75
- onRemoveValue = _useFormValue.onRemoveValue;
76
- var _useFormError = (0, _useFormError2.default)(formErrorProp),
77
- formError = _useFormError.formError,
78
- setFormError = _useFormError.setFormError,
79
- onRemoveError = _useFormError.onRemoveError;
80
- /**
81
- * Validate the form data and return a boolean.
82
- * The error message after verification is returned in the callback.
83
- * @param callback
84
- */
85
- var check = (0, _utils.useEventCallback)(function (callback) {
86
- var formError = {};
87
- var errorCount = 0;
88
- var model = getCombinedModel();
89
- Object.keys(model.getSchemaSpec()).forEach(function (key) {
90
- var checkResult = model.checkForField(key, formValue || {});
91
- if (checkResult.hasError === true) {
92
- errorCount += 1;
93
- formError[key] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult;
94
- }
95
- });
96
- setFormError(formError);
97
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
98
- callback === null || callback === void 0 ? void 0 : callback(formError);
99
- if (errorCount > 0) {
100
- onError === null || onError === void 0 ? void 0 : onError(formError);
101
- return false;
102
- }
103
- return true;
104
- });
105
-
106
- /**
107
- * Check the data field
108
- * @param fieldName
109
- * @param callback
110
- */
111
- var checkForField = (0, _utils.useEventCallback)(function (fieldName, callback) {
112
- var _extends2;
113
- var model = getCombinedModel();
114
- var checkResult = model.checkForField(fieldName, formValue || {});
115
- var nextFormError = (0, _extends6.default)({}, formError, (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
116
- setFormError(nextFormError);
117
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextFormError);
118
- callback === null || callback === void 0 ? void 0 : callback(checkResult);
119
- if (checkResult.hasError) {
120
- onError === null || onError === void 0 ? void 0 : onError(nextFormError);
121
- }
122
- return !checkResult.hasError;
123
- });
124
-
125
- /**
126
- * Check form data asynchronously and return a Promise
127
- */
128
- var checkAsync = (0, _utils.useEventCallback)(function () {
129
- var promises = [];
130
- var keys = [];
131
- var model = getCombinedModel();
132
- Object.keys(model.getSchemaSpec()).forEach(function (key) {
133
- keys.push(key);
134
- promises.push(model.checkForFieldAsync(key, formValue || {}));
135
- });
136
- return Promise.all(promises).then(function (values) {
137
- var formError = {};
138
- var errorCount = 0;
139
- for (var i = 0; i < values.length; i++) {
140
- if (values[i].hasError) {
141
- errorCount += 1;
142
- formError[keys[i]] = values[i].errorMessage;
143
- }
144
- }
145
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
146
- setFormError(formError);
147
- if (errorCount > 0) {
148
- onError === null || onError === void 0 ? void 0 : onError(formError);
149
- }
150
- return {
151
- hasError: errorCount > 0,
152
- formError: formError
153
- };
154
- });
155
- });
156
-
157
- /**
158
- * Asynchronously check form fields and return Promise
159
- * @param fieldName
160
- */
161
- var checkForFieldAsync = (0, _utils.useEventCallback)(function (fieldName) {
162
- var model = getCombinedModel();
163
- return model.checkForFieldAsync(fieldName, formValue || {}).then(function (checkResult) {
164
- var _extends3;
165
- var nextFormError = (0, _extends6.default)({}, formError, (_extends3 = {}, _extends3[fieldName] = checkResult.errorMessage, _extends3));
166
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextFormError);
167
- setFormError(nextFormError);
168
- if (checkResult.hasError) {
169
- onError === null || onError === void 0 ? void 0 : onError(nextFormError);
170
- }
171
- return checkResult;
172
- });
173
- });
174
- var cleanErrors = (0, _utils.useEventCallback)(function () {
175
- setFormError({});
176
- });
177
- var cleanErrorForField = (0, _utils.useEventCallback)(function (fieldName) {
178
- setFormError((0, _omit.default)(formError, [fieldName]));
179
- });
180
- var resetErrors = (0, _utils.useEventCallback)(function (formError) {
181
- if (formError === void 0) {
182
- formError = {};
183
- }
184
- setFormError(formError);
185
- });
186
- (0, _react.useImperativeHandle)(ref, function () {
187
- return {
188
- root: rootRef.current,
189
- check: check,
190
- checkForField: checkForField,
191
- checkAsync: checkAsync,
192
- checkForFieldAsync: checkForFieldAsync,
193
- cleanErrors: cleanErrors,
194
- cleanErrorForField: cleanErrorForField,
195
- resetErrors: resetErrors
196
- };
197
- });
198
- var removeFieldError = (0, _utils.useEventCallback)(function (name) {
199
- var formError = onRemoveError(name);
200
- setFormError(formError);
201
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
202
- });
203
92
  var removeFieldValue = (0, _utils.useEventCallback)(function (name) {
204
93
  var formValue = onRemoveValue(name);
205
94
  onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
206
95
  });
96
+ var removeFieldError = (0, _utils.useEventCallback)(function (name) {
97
+ onRemoveError(name);
98
+ });
207
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);
208
103
  if (disabled || readOnly || plaintext) {
209
104
  return;
210
105
  }
211
- event.preventDefault();
212
- event.stopPropagation();
213
- var checkStatus = check();
214
- 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);
215
108
  });
216
- var handleFieldError = (0, _utils.useEventCallback)(function (name, errorMessage) {
217
- var _extends4;
218
- var nextFormError = (0, _extends6.default)({}, formError, (_extends4 = {}, _extends4[name] = errorMessage, _extends4));
219
- setFormError(nextFormError);
220
- onError === null || onError === void 0 ? void 0 : onError(nextFormError);
221
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextFormError);
109
+ var onFieldError = (0, _utils.useEventCallback)(function (name, checkResult) {
110
+ setFieldError(name, checkResult);
222
111
  });
223
- var handleFieldSuccess = (0, _utils.useEventCallback)(function (name) {
112
+ var onFieldSuccess = (0, _utils.useEventCallback)(function (name) {
224
113
  removeFieldError(name);
225
114
  });
226
- var setFieldValue = function setFieldValue(formValue, fieldName, fieldValue) {
227
- var _extends5;
228
- if (nestedField) {
229
- return (0, _set.default)((0, _extends6.default)({}, formValue), fieldName, fieldValue);
230
- }
231
- return (0, _extends6.default)({}, formValue, (_extends5 = {}, _extends5[fieldName] = fieldValue, _extends5));
232
- };
233
- var handleFieldChange = (0, _utils.useEventCallback)(function (name, value, event) {
234
- var nextFormValue = setFieldValue(formValue, name, value);
235
- setFormValue(nextFormValue);
115
+ var onFieldChange = (0, _utils.useEventCallback)(function (name, value, event) {
116
+ var nextFormValue = setFieldValue(name, value);
236
117
  onChange === null || onChange === void 0 ? void 0 : onChange(nextFormValue, event);
237
118
  });
238
- var rootRef = (0, _react.useRef)(null);
239
- var formContextValue = (0, _react.useMemo)(function () {
240
- return {
241
- getCombinedModel: getCombinedModel,
242
- checkTrigger: checkTrigger,
243
- errorFromContext: errorFromContext,
244
- readOnly: readOnly,
245
- plaintext: plaintext,
246
- disabled: disabled,
247
- formError: formError,
248
- nestedField: nestedField,
249
- removeFieldValue: removeFieldValue,
250
- removeFieldError: removeFieldError,
251
- pushFieldRule: pushFieldRule,
252
- removeFieldRule: removeFieldRule,
253
- onFieldChange: handleFieldChange,
254
- onFieldError: handleFieldError,
255
- onFieldSuccess: handleFieldSuccess
256
- };
257
- }, [getCombinedModel, checkTrigger, errorFromContext, readOnly, plaintext, disabled, formError, nestedField, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
258
- return /*#__PURE__*/_react.default.createElement("form", (0, _extends6.default)({}, rest, {
259
- 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,
260
138
  onSubmit: handleSubmit,
261
139
  className: classes
262
- }), /*#__PURE__*/_react.default.createElement(_FormContext.default.Provider, {
140
+ }), /*#__PURE__*/_react.default.createElement(_FormContext.FormProvider, {
263
141
  value: formContextValue
264
- }, /*#__PURE__*/_react.default.createElement(_FormContext.FormValueContext.Provider, {
142
+ }, /*#__PURE__*/_react.default.createElement(_FormContext.FormValueProvider, {
265
143
  value: formValue
266
144
  }, children)));
267
145
  });
@@ -1,19 +1,20 @@
1
1
  import React from 'react';
2
2
  import { TypeAttributes } from '../@types/common';
3
- import type { Schema } from 'schema-typed';
3
+ import type { Schema, CheckResult } from 'schema-typed';
4
4
  import type { FieldRuleType } from './hooks/useSchemaModel';
5
- interface TrulyFormContextValue<T = Record<string, any>, errorMsgType = any, E = {
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;
@@ -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 {};