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.
- package/AvatarGroup/styles/index.css +2 -0
- package/AvatarGroup/styles/index.less +2 -0
- package/CHANGELOG.md +26 -0
- package/CheckPicker/styles/index.css +2 -0
- package/CheckTree/styles/index.css +2 -0
- package/CheckTreePicker/styles/index.css +2 -0
- package/Checkbox/styles/index.css +2 -0
- package/Checkbox/styles/index.less +2 -0
- package/DateRangePicker/styles/index.css +27 -0
- package/DateRangePicker/styles/index.less +27 -0
- package/MultiCascadeTree/styles/index.css +2 -0
- package/MultiCascader/styles/index.css +2 -0
- package/Placeholder/styles/index.css +42 -6
- package/Placeholder/styles/index.less +18 -9
- package/Placeholder/styles/mixin.less +7 -0
- package/Sidenav/styles/index.css +3 -0
- package/Sidenav/styles/index.less +4 -0
- package/TagInput/styles/index.css +2 -0
- package/TagPicker/styles/index.css +2 -0
- package/cjs/@types/common.d.ts +1 -1
- package/cjs/Avatar/Avatar.js +16 -8
- package/cjs/Avatar/useImage.js +0 -1
- package/cjs/AvatarGroup/AvatarGroup.d.ts +1 -0
- package/cjs/AvatarGroup/AvatarGroup.js +12 -12
- package/cjs/Calendar/CalendarContainer.js +4 -4
- package/cjs/Checkbox/Checkbox.js +1 -1
- package/cjs/DatePicker/DatePicker.d.ts +3 -38
- package/cjs/DatePicker/DatePicker.js +86 -137
- package/cjs/DatePicker/PredefinedRanges.d.ts +1 -1
- package/cjs/DatePicker/PredefinedRanges.js +3 -3
- package/cjs/DatePicker/Toolbar.d.ts +1 -1
- package/cjs/DatePicker/Toolbar.js +13 -12
- package/cjs/DatePicker/hooks/useFocus.d.ts +13 -0
- package/cjs/DatePicker/hooks/useFocus.js +96 -0
- package/cjs/DatePicker/hooks/useMonthView.d.ts +10 -0
- package/cjs/DatePicker/hooks/useMonthView.js +28 -0
- package/cjs/DatePicker/index.d.ts +2 -1
- package/cjs/DatePicker/types.d.ts +37 -0
- package/cjs/DatePicker/utils.d.ts +9 -0
- package/cjs/DatePicker/utils.js +20 -2
- package/cjs/DateRangePicker/DateRangePicker.d.ts +15 -3
- package/cjs/DateRangePicker/DateRangePicker.js +58 -68
- package/cjs/DateRangePicker/DateRangePickerContext.d.ts +4 -1
- package/cjs/DateRangePicker/DateRangePickerContext.js +4 -4
- package/cjs/DateRangePicker/Header.d.ts +11 -0
- package/cjs/DateRangePicker/Header.js +65 -0
- package/cjs/DateRangePicker/disabledDateUtils.d.ts +1 -1
- package/cjs/DateRangePicker/disabledDateUtils.js +1 -1
- package/cjs/DateRangePicker/index.js +5 -0
- package/cjs/Form/Form.d.ts +56 -39
- package/cjs/Form/Form.js +70 -208
- package/cjs/Form/FormContext.d.ts +13 -10
- package/cjs/Form/FormContext.js +11 -5
- package/cjs/Form/{useFormClassNames.d.ts → hooks/useFormClassNames.d.ts} +2 -2
- package/cjs/Form/{useFormClassNames.js → hooks/useFormClassNames.js} +2 -2
- package/cjs/Form/hooks/useFormRef.d.ts +55 -0
- package/cjs/Form/hooks/useFormRef.js +45 -0
- package/cjs/Form/hooks/useFormValidate.d.ts +19 -0
- package/cjs/Form/hooks/useFormValidate.js +157 -0
- package/cjs/Form/hooks/useFormValue.d.ts +7 -0
- package/cjs/Form/hooks/useFormValue.js +42 -0
- package/cjs/Form/{useSchemaModel.js → hooks/useSchemaModel.js} +5 -0
- package/cjs/Form/index.d.ts +3 -2
- package/cjs/Form/index.js +3 -9
- package/cjs/FormControl/FormControl.d.ts +1 -1
- package/cjs/FormControl/FormControl.js +51 -69
- package/cjs/FormControl/hooks/useField.d.ts +18 -0
- package/cjs/FormControl/hooks/useField.js +54 -0
- package/cjs/FormControl/hooks/useRegisterModel.d.ts +3 -0
- package/cjs/FormControl/hooks/useRegisterModel.js +22 -0
- package/cjs/FormControl/utils.d.ts +1 -0
- package/cjs/FormControl/utils.js +8 -0
- package/cjs/FormControlLabel/FormControlLabel.js +12 -9
- package/cjs/FormErrorMessage/FormErrorMessage.js +2 -5
- package/cjs/FormGroup/FormGroup.d.ts +18 -4
- package/cjs/FormGroup/FormGroup.js +28 -2
- package/cjs/FormGroup/index.d.ts +1 -0
- package/cjs/FormGroup/index.js +4 -3
- package/cjs/FormHelpText/FormHelpText.d.ts +2 -1
- package/cjs/FormHelpText/FormHelpText.js +16 -9
- package/cjs/Input/Input.js +4 -5
- package/cjs/Placeholder/PlaceholderGraph.d.ts +13 -1
- package/cjs/Placeholder/PlaceholderGrid.d.ts +27 -1
- package/cjs/Placeholder/PlaceholderGrid.js +10 -13
- package/cjs/Placeholder/PlaceholderParagraph.d.ts +24 -1
- package/cjs/Placeholder/PlaceholderParagraph.js +13 -9
- package/cjs/utils/dateUtils.d.ts +72 -10
- package/cjs/utils/dateUtils.js +88 -29
- package/dist/rsuite-no-reset-rtl.css +76 -6
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +76 -6
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +76 -6
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +76 -6
- package/dist/rsuite.js +221 -57
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.LICENSE.txt +35 -0
- package/dist/rsuite.min.js.map +1 -1
- package/esm/@types/common.d.ts +1 -1
- package/esm/Avatar/Avatar.js +12 -4
- package/esm/Avatar/useImage.js +0 -1
- package/esm/AvatarGroup/AvatarGroup.d.ts +1 -0
- package/esm/AvatarGroup/AvatarGroup.js +12 -12
- package/esm/Calendar/CalendarContainer.js +5 -5
- package/esm/Checkbox/Checkbox.js +1 -1
- package/esm/DatePicker/DatePicker.d.ts +3 -38
- package/esm/DatePicker/DatePicker.js +88 -139
- package/esm/DatePicker/PredefinedRanges.d.ts +1 -1
- package/esm/DatePicker/PredefinedRanges.js +3 -3
- package/esm/DatePicker/Toolbar.d.ts +1 -1
- package/esm/DatePicker/Toolbar.js +13 -12
- package/esm/DatePicker/hooks/useFocus.d.ts +13 -0
- package/esm/DatePicker/hooks/useFocus.js +90 -0
- package/esm/DatePicker/hooks/useMonthView.d.ts +10 -0
- package/esm/DatePicker/hooks/useMonthView.js +22 -0
- package/esm/DatePicker/index.d.ts +2 -1
- package/esm/DatePicker/types.d.ts +37 -0
- package/esm/DatePicker/utils.d.ts +9 -0
- package/esm/DatePicker/utils.js +18 -2
- package/esm/DateRangePicker/DateRangePicker.d.ts +15 -3
- package/esm/DateRangePicker/DateRangePicker.js +61 -71
- package/esm/DateRangePicker/DateRangePickerContext.d.ts +4 -1
- package/esm/DateRangePicker/DateRangePickerContext.js +2 -2
- package/esm/DateRangePicker/Header.d.ts +11 -0
- package/esm/DateRangePicker/Header.js +59 -0
- package/esm/DateRangePicker/disabledDateUtils.d.ts +1 -1
- package/esm/DateRangePicker/disabledDateUtils.js +1 -1
- package/esm/DateRangePicker/index.js +4 -0
- package/esm/Form/Form.d.ts +56 -39
- package/esm/Form/Form.js +68 -205
- package/esm/Form/FormContext.d.ts +13 -10
- package/esm/Form/FormContext.js +6 -2
- package/esm/Form/{useFormClassNames.d.ts → hooks/useFormClassNames.d.ts} +2 -2
- package/esm/Form/{useFormClassNames.js → hooks/useFormClassNames.js} +2 -2
- package/esm/Form/hooks/useFormRef.d.ts +55 -0
- package/esm/Form/hooks/useFormRef.js +40 -0
- package/esm/Form/hooks/useFormValidate.d.ts +19 -0
- package/esm/Form/hooks/useFormValidate.js +152 -0
- package/esm/Form/hooks/useFormValue.d.ts +7 -0
- package/esm/Form/hooks/useFormValue.js +37 -0
- package/esm/Form/{useSchemaModel.js → hooks/useSchemaModel.js} +5 -0
- package/esm/Form/index.d.ts +3 -2
- package/esm/Form/index.js +1 -1
- package/esm/FormControl/FormControl.d.ts +1 -1
- package/esm/FormControl/FormControl.js +49 -67
- package/esm/FormControl/hooks/useField.d.ts +18 -0
- package/esm/FormControl/hooks/useField.js +48 -0
- package/esm/FormControl/hooks/useRegisterModel.d.ts +3 -0
- package/esm/FormControl/hooks/useRegisterModel.js +17 -0
- package/esm/FormControl/utils.d.ts +1 -0
- package/esm/FormControl/utils.js +4 -0
- package/esm/FormControlLabel/FormControlLabel.js +12 -8
- package/esm/FormErrorMessage/FormErrorMessage.js +2 -5
- package/esm/FormGroup/FormGroup.d.ts +18 -4
- package/esm/FormGroup/FormGroup.js +27 -1
- package/esm/FormGroup/index.d.ts +1 -0
- package/esm/FormGroup/index.js +1 -0
- package/esm/FormHelpText/FormHelpText.d.ts +2 -1
- package/esm/FormHelpText/FormHelpText.js +17 -9
- package/esm/Input/Input.js +4 -5
- package/esm/Placeholder/PlaceholderGraph.d.ts +13 -1
- package/esm/Placeholder/PlaceholderGrid.d.ts +27 -1
- package/esm/Placeholder/PlaceholderGrid.js +10 -13
- package/esm/Placeholder/PlaceholderParagraph.d.ts +24 -1
- package/esm/Placeholder/PlaceholderParagraph.js +12 -8
- package/esm/utils/dateUtils.d.ts +72 -10
- package/esm/utils/dateUtils.js +86 -28
- package/package.json +2 -2
- package/cjs/FormControl/useRegisterModel.d.ts +0 -4
- package/cjs/FormControl/useRegisterModel.js +0 -18
- package/esm/FormControl/useRegisterModel.d.ts +0 -4
- package/esm/FormControl/useRegisterModel.js +0 -13
- /package/cjs/Form/{useSchemaModel.d.ts → hooks/useSchemaModel.d.ts} +0 -0
- /package/esm/Form/{useSchemaModel.d.ts → hooks/useSchemaModel.d.ts} +0 -0
|
@@ -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,40 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useRef, useImperativeHandle } from 'react';
|
|
3
|
+
import omit from 'lodash/omit';
|
|
4
|
+
import useEventCallback from '../../utils/useEventCallback';
|
|
5
|
+
import { nameToPath } from '../../FormControl/utils';
|
|
6
|
+
export default function useFormRef(ref, props) {
|
|
7
|
+
var rootRef = useRef(null);
|
|
8
|
+
var formError = props.formError,
|
|
9
|
+
setFormError = props.setFormError,
|
|
10
|
+
nestedField = props.nestedField,
|
|
11
|
+
check = props.check,
|
|
12
|
+
checkForField = props.checkForField,
|
|
13
|
+
checkAsync = props.checkAsync,
|
|
14
|
+
checkForFieldAsync = props.checkForFieldAsync;
|
|
15
|
+
var cleanErrors = useEventCallback(function () {
|
|
16
|
+
setFormError({});
|
|
17
|
+
});
|
|
18
|
+
var resetErrors = useEventCallback(function (formError) {
|
|
19
|
+
if (formError === void 0) {
|
|
20
|
+
formError = {};
|
|
21
|
+
}
|
|
22
|
+
setFormError(formError);
|
|
23
|
+
});
|
|
24
|
+
var cleanErrorForField = useEventCallback(function (fieldName) {
|
|
25
|
+
setFormError(omit(formError, [nestedField ? nameToPath(fieldName) : fieldName]));
|
|
26
|
+
});
|
|
27
|
+
useImperativeHandle(ref, function () {
|
|
28
|
+
return {
|
|
29
|
+
root: rootRef.current,
|
|
30
|
+
check: check,
|
|
31
|
+
checkForField: checkForField,
|
|
32
|
+
checkAsync: checkAsync,
|
|
33
|
+
checkForFieldAsync: checkForFieldAsync,
|
|
34
|
+
cleanErrors: cleanErrors,
|
|
35
|
+
cleanErrorForField: cleanErrorForField,
|
|
36
|
+
resetErrors: resetErrors
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
return rootRef;
|
|
40
|
+
}
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import { useRef, useCallback } from 'react';
|
|
4
|
+
import omit from 'lodash/omit';
|
|
5
|
+
import set from 'lodash/set';
|
|
6
|
+
import { useControlled } from '../../utils';
|
|
7
|
+
import { nameToPath } from '../../FormControl/utils';
|
|
8
|
+
import useEventCallback from '../../utils/useEventCallback';
|
|
9
|
+
import useFormRef from './useFormRef';
|
|
10
|
+
export default function useFormValidate(formError, props) {
|
|
11
|
+
var ref = props.ref,
|
|
12
|
+
formValue = props.formValue,
|
|
13
|
+
getCombinedModel = props.getCombinedModel,
|
|
14
|
+
onCheck = props.onCheck,
|
|
15
|
+
onError = props.onError,
|
|
16
|
+
nestedField = props.nestedField;
|
|
17
|
+
var _useControlled = useControlled(formError, {}),
|
|
18
|
+
realFormError = _useControlled[0],
|
|
19
|
+
setFormError = _useControlled[1];
|
|
20
|
+
var realFormErrorRef = useRef(realFormError);
|
|
21
|
+
realFormErrorRef.current = realFormError;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Validate the form data and return a boolean.
|
|
25
|
+
* The error message after verification is returned in the callback.
|
|
26
|
+
* @param callback
|
|
27
|
+
*/
|
|
28
|
+
var check = useEventCallback(function (callback) {
|
|
29
|
+
var formError = {};
|
|
30
|
+
var errorCount = 0;
|
|
31
|
+
var model = getCombinedModel();
|
|
32
|
+
Object.keys(model.getSchemaSpec()).forEach(function (key) {
|
|
33
|
+
var checkResult = model.checkForField(key, formValue || {});
|
|
34
|
+
if (checkResult.hasError === true) {
|
|
35
|
+
errorCount += 1;
|
|
36
|
+
formError[key] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
setFormError(formError);
|
|
40
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
41
|
+
callback === null || callback === void 0 ? void 0 : callback(formError);
|
|
42
|
+
if (errorCount > 0) {
|
|
43
|
+
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Check the data field
|
|
51
|
+
* @param fieldName
|
|
52
|
+
* @param callback
|
|
53
|
+
*/
|
|
54
|
+
var checkForField = useEventCallback(function (fieldName, callback) {
|
|
55
|
+
var _extends2;
|
|
56
|
+
var model = getCombinedModel();
|
|
57
|
+
var checkResult = model.checkForField(fieldName, formValue || {});
|
|
58
|
+
var nextFormError = _extends({}, formError, (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
|
|
59
|
+
setFormError(nextFormError);
|
|
60
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextFormError);
|
|
61
|
+
callback === null || callback === void 0 ? void 0 : callback(checkResult);
|
|
62
|
+
if (checkResult.hasError) {
|
|
63
|
+
onError === null || onError === void 0 ? void 0 : onError(nextFormError);
|
|
64
|
+
}
|
|
65
|
+
return !checkResult.hasError;
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Check form data asynchronously and return a Promise
|
|
70
|
+
*/
|
|
71
|
+
var checkAsync = useEventCallback(function () {
|
|
72
|
+
var promises = [];
|
|
73
|
+
var keys = [];
|
|
74
|
+
var model = getCombinedModel();
|
|
75
|
+
Object.keys(model.getSchemaSpec()).forEach(function (key) {
|
|
76
|
+
keys.push(key);
|
|
77
|
+
promises.push(model.checkForFieldAsync(key, formValue || {}));
|
|
78
|
+
});
|
|
79
|
+
return Promise.all(promises).then(function (values) {
|
|
80
|
+
var formError = {};
|
|
81
|
+
var errorCount = 0;
|
|
82
|
+
for (var i = 0; i < values.length; i++) {
|
|
83
|
+
if (values[i].hasError) {
|
|
84
|
+
errorCount += 1;
|
|
85
|
+
formError[keys[i]] = values[i].errorMessage;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
89
|
+
setFormError(formError);
|
|
90
|
+
if (errorCount > 0) {
|
|
91
|
+
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
hasError: errorCount > 0,
|
|
95
|
+
formError: formError
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Asynchronously check form fields and return Promise
|
|
102
|
+
* @param fieldName
|
|
103
|
+
*/
|
|
104
|
+
var checkForFieldAsync = useEventCallback(function (fieldName) {
|
|
105
|
+
var model = getCombinedModel();
|
|
106
|
+
return model.checkForFieldAsync(fieldName, formValue || {}).then(function (checkResult) {
|
|
107
|
+
var _extends3;
|
|
108
|
+
var nextFormError = _extends({}, formError, (_extends3 = {}, _extends3[fieldName] = checkResult.errorMessage, _extends3));
|
|
109
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextFormError);
|
|
110
|
+
setFormError(nextFormError);
|
|
111
|
+
if (checkResult.hasError) {
|
|
112
|
+
onError === null || onError === void 0 ? void 0 : onError(nextFormError);
|
|
113
|
+
}
|
|
114
|
+
return checkResult;
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
var onRemoveError = useCallback(function (name) {
|
|
118
|
+
/**
|
|
119
|
+
* when this function is called when the children component is unmount,
|
|
120
|
+
* it's an old render frame so use Ref to get future error
|
|
121
|
+
*/
|
|
122
|
+
var formError = omit(realFormErrorRef.current, [nestedField ? nameToPath(name) : name]);
|
|
123
|
+
realFormErrorRef.current = formError;
|
|
124
|
+
setFormError(formError);
|
|
125
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
126
|
+
return formError;
|
|
127
|
+
}, [nestedField, onCheck, setFormError]);
|
|
128
|
+
var setFieldError = useCallback(function (fieldName, checkResult) {
|
|
129
|
+
var _extends4;
|
|
130
|
+
var nextFormError = nestedField ? set(_extends({}, formError), nameToPath(fieldName), checkResult) : _extends({}, formError, (_extends4 = {}, _extends4[fieldName] = checkResult, _extends4));
|
|
131
|
+
setFormError(nextFormError);
|
|
132
|
+
onError === null || onError === void 0 ? void 0 : onError(nextFormError);
|
|
133
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextFormError);
|
|
134
|
+
return nextFormError;
|
|
135
|
+
}, [formError, nestedField, onCheck, onError, setFormError]);
|
|
136
|
+
var formRef = useFormRef(ref, {
|
|
137
|
+
check: check,
|
|
138
|
+
checkForField: checkForField,
|
|
139
|
+
checkAsync: checkAsync,
|
|
140
|
+
checkForFieldAsync: checkForFieldAsync,
|
|
141
|
+
formError: formError,
|
|
142
|
+
setFormError: setFormError,
|
|
143
|
+
nestedField: nestedField
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
formRef: formRef,
|
|
147
|
+
formError: realFormError,
|
|
148
|
+
check: check,
|
|
149
|
+
setFieldError: setFieldError,
|
|
150
|
+
onRemoveError: onRemoveError
|
|
151
|
+
};
|
|
152
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="lodash" />
|
|
2
|
+
export default function useFormValue(controlledValue: any, props: any): {
|
|
3
|
+
formValue: any;
|
|
4
|
+
setFormValue: (value: any) => void;
|
|
5
|
+
setFieldValue: (fieldName: string, fieldValue: any) => any;
|
|
6
|
+
onRemoveValue: (name: string) => import("lodash").Omit<any, string>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import { useRef, useCallback } from 'react';
|
|
4
|
+
import omit from 'lodash/omit';
|
|
5
|
+
import set from 'lodash/set';
|
|
6
|
+
import { useControlled } from '../../utils';
|
|
7
|
+
export default function useFormValue(controlledValue, props) {
|
|
8
|
+
var formDefaultValue = props.formDefaultValue,
|
|
9
|
+
nestedField = props.nestedField;
|
|
10
|
+
var _useControlled = useControlled(controlledValue, formDefaultValue),
|
|
11
|
+
formValue = _useControlled[0],
|
|
12
|
+
setFormValue = _useControlled[1];
|
|
13
|
+
var realFormValueRef = useRef(formValue);
|
|
14
|
+
realFormValueRef.current = formValue;
|
|
15
|
+
var setFieldValue = useCallback(function (fieldName, fieldValue) {
|
|
16
|
+
var _extends2;
|
|
17
|
+
var nextFormError = nestedField ? set(_extends({}, formValue), fieldName, fieldValue) : _extends({}, formValue, (_extends2 = {}, _extends2[fieldName] = fieldValue, _extends2));
|
|
18
|
+
setFormValue(nextFormError);
|
|
19
|
+
return nextFormError;
|
|
20
|
+
}, [formValue, nestedField, setFormValue]);
|
|
21
|
+
var onRemoveValue = useCallback(function (name) {
|
|
22
|
+
/**
|
|
23
|
+
* when this function is called when the children component is unmount,
|
|
24
|
+
* it's an old render frame so use Ref to get future value
|
|
25
|
+
*/
|
|
26
|
+
var formValue = omit(realFormValueRef.current, [name]);
|
|
27
|
+
realFormValueRef.current = formValue;
|
|
28
|
+
setFormValue(formValue);
|
|
29
|
+
return formValue;
|
|
30
|
+
}, [setFormValue]);
|
|
31
|
+
return {
|
|
32
|
+
formValue: formValue,
|
|
33
|
+
setFormValue: setFormValue,
|
|
34
|
+
setFieldValue: setFieldValue,
|
|
35
|
+
onRemoveValue: onRemoveValue
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -19,6 +19,11 @@ function useSchemaModel(formModel) {
|
|
|
19
19
|
var realSubRules = subRulesRef.current.filter(function (v) {
|
|
20
20
|
return Boolean(v.fieldRule.current);
|
|
21
21
|
});
|
|
22
|
+
|
|
23
|
+
// If there is no sub rule, return the original form model
|
|
24
|
+
if (realSubRules.length === 0) {
|
|
25
|
+
return formModel;
|
|
26
|
+
}
|
|
22
27
|
return SchemaModel.combine(formModel, SchemaModel(realSubRules.map(function (_ref) {
|
|
23
28
|
var _ref2;
|
|
24
29
|
var name = _ref.name,
|
package/esm/Form/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import Form from './Form';
|
|
2
|
-
export type {
|
|
2
|
+
export type { FormProps } from './Form';
|
|
3
|
+
export type { FormInstance } from './hooks/useFormRef';
|
|
3
4
|
export type { FormGroupProps } from '../FormGroup';
|
|
4
5
|
export type { FormErrorMessageProps } from '../FormErrorMessage';
|
|
5
6
|
export type { FormControlLabelProps } from '../FormControlLabel';
|
|
6
7
|
export type { FormHelpTextProps } from '../FormHelpText';
|
|
7
8
|
export type { FormControlProps } from '../FormControl';
|
|
8
|
-
export
|
|
9
|
+
export { default as useFormClassNames } from './hooks/useFormClassNames';
|
|
9
10
|
export default Form;
|
package/esm/Form/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { CheckType } from 'schema-typed';
|
|
2
3
|
import Input from '../Input';
|
|
3
4
|
import { TypeAttributes, FormControlBaseProps, WithAsProps } from '../@types/common';
|
|
4
|
-
import type { CheckType } from 'schema-typed';
|
|
5
5
|
/**
|
|
6
6
|
* Props that FormControl passes to its accepter
|
|
7
7
|
*/
|
|
@@ -5,17 +5,15 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
|
|
|
5
5
|
var _templateObject;
|
|
6
6
|
import React, { useContext } from 'react';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
-
import isUndefined from 'lodash/isUndefined';
|
|
9
|
-
import get from 'lodash/get';
|
|
10
|
-
import set from 'lodash/set';
|
|
11
8
|
import Input from '../Input';
|
|
12
9
|
import FormErrorMessage from '../FormErrorMessage';
|
|
13
10
|
import { useClassNames } from '../utils';
|
|
14
11
|
import FormContext, { FormValueContext } from '../Form/FormContext';
|
|
15
|
-
import {
|
|
12
|
+
import { useFormGroup } from '../FormGroup';
|
|
16
13
|
import { useWillUnmount, useEventCallback } from '../utils';
|
|
17
14
|
import { oneOf } from '../internals/propTypes';
|
|
18
|
-
import useRegisterModel from './useRegisterModel';
|
|
15
|
+
import useRegisterModel from './hooks/useRegisterModel';
|
|
16
|
+
import useField from './hooks/useField';
|
|
19
17
|
import Toggle from '../Toggle';
|
|
20
18
|
|
|
21
19
|
/**
|
|
@@ -37,8 +35,6 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
37
35
|
nestedField = _useContext.nestedField,
|
|
38
36
|
removeFieldValue = _useContext.removeFieldValue,
|
|
39
37
|
removeFieldError = _useContext.removeFieldError,
|
|
40
|
-
pushFieldRule = _useContext.pushFieldRule,
|
|
41
|
-
removeFieldRule = _useContext.removeFieldRule,
|
|
42
38
|
onFieldChange = _useContext.onFieldChange,
|
|
43
39
|
onFieldError = _useContext.onFieldError,
|
|
44
40
|
onFieldSuccess = _useContext.onFieldSuccess,
|
|
@@ -69,13 +65,17 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
69
65
|
_props$shouldResetWit = props.shouldResetWithUnmount,
|
|
70
66
|
shouldResetWithUnmount = _props$shouldResetWit === void 0 ? false : _props$shouldResetWit,
|
|
71
67
|
rule = props.rule,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
id = props.id,
|
|
69
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "accepter", "classPrefix", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount", "rule", "id"]);
|
|
70
|
+
var _useFormGroup = useFormGroup(id),
|
|
71
|
+
controlId = _useFormGroup.controlId,
|
|
72
|
+
helpTextId = _useFormGroup.helpTextId,
|
|
73
|
+
labelId = _useFormGroup.labelId,
|
|
74
|
+
errorMessageId = _useFormGroup.errorMessageId;
|
|
75
75
|
if (!onFieldChange) {
|
|
76
76
|
throw new Error("\n <FormControl> must be inside a component decorated with <Form>.\n And need to update React to 16.6.0 +.\n ");
|
|
77
77
|
}
|
|
78
|
-
useRegisterModel(name,
|
|
78
|
+
useRegisterModel(name, rule);
|
|
79
79
|
useWillUnmount(function () {
|
|
80
80
|
if (shouldResetWithUnmount) {
|
|
81
81
|
removeFieldValue === null || removeFieldValue === void 0 ? void 0 : removeFieldValue(name);
|
|
@@ -84,80 +84,62 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
84
84
|
});
|
|
85
85
|
var trigger = checkTrigger || contextCheckTrigger;
|
|
86
86
|
var formValue = useContext(FormValueContext);
|
|
87
|
-
var
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
};
|
|
100
|
-
var getFieldError = function getFieldError(fieldName) {
|
|
101
|
-
if (nestedField) {
|
|
102
|
-
var _name = fieldName.includes('.') ? fieldName.replace('.', '.object.') + '.errorMessage' : fieldName;
|
|
103
|
-
return get(formError, _name);
|
|
104
|
-
}
|
|
105
|
-
return formError === null || formError === void 0 ? void 0 : formError[fieldName];
|
|
106
|
-
};
|
|
107
|
-
var fieldValue = getFieldValue(name);
|
|
87
|
+
var _useField = useField({
|
|
88
|
+
name: name,
|
|
89
|
+
errorMessage: errorMessage,
|
|
90
|
+
formValue: formValue,
|
|
91
|
+
formError: formError,
|
|
92
|
+
value: value,
|
|
93
|
+
nestedField: nestedField,
|
|
94
|
+
errorFromContext: errorFromContext
|
|
95
|
+
}),
|
|
96
|
+
fieldValue = _useField.fieldValue,
|
|
97
|
+
fieldError = _useField.fieldError,
|
|
98
|
+
setFieldValue = _useField.setFieldValue;
|
|
108
99
|
var _useClassNames = useClassNames(classPrefix),
|
|
109
100
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
110
101
|
prefix = _useClassNames.prefix;
|
|
111
102
|
var classes = withClassPrefix('wrapper');
|
|
112
103
|
var handleFieldChange = useEventCallback(function (value, event) {
|
|
113
|
-
|
|
104
|
+
if (trigger === 'change') {
|
|
105
|
+
handleFieldCheck(value);
|
|
106
|
+
}
|
|
114
107
|
onFieldChange === null || onFieldChange === void 0 ? void 0 : onFieldChange(name, value, event);
|
|
115
108
|
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
116
109
|
});
|
|
117
110
|
var handleFieldBlur = useEventCallback(function (event) {
|
|
118
|
-
|
|
111
|
+
if (trigger === 'blur') {
|
|
112
|
+
handleFieldCheck(fieldValue);
|
|
113
|
+
}
|
|
119
114
|
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
120
115
|
});
|
|
121
|
-
var handleFieldCheck = useEventCallback(function (value
|
|
122
|
-
var checkFieldName = nestedField ? name.split('.')[0] : name;
|
|
116
|
+
var handleFieldCheck = useEventCallback(function (value) {
|
|
123
117
|
var callbackEvents = function callbackEvents(checkResult) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
118
|
+
if (checkResult.hasError) {
|
|
119
|
+
var _errorMessage = checkResult.errorMessage;
|
|
120
|
+
var _fieldError = nestedField ? checkResult : _errorMessage || checkResult;
|
|
121
|
+
onFieldError === null || onFieldError === void 0 ? void 0 : onFieldError(name, _fieldError);
|
|
122
|
+
} else {
|
|
123
|
+
onFieldSuccess === null || onFieldSuccess === void 0 ? void 0 : onFieldSuccess(name);
|
|
131
124
|
}
|
|
132
125
|
return checkResult;
|
|
133
126
|
};
|
|
134
127
|
var nextFormValue = setFieldValue(name, value);
|
|
135
128
|
var model = getCombinedModel();
|
|
129
|
+
var checkOptions = {
|
|
130
|
+
nestedObject: nestedField
|
|
131
|
+
};
|
|
136
132
|
if (checkAsync) {
|
|
137
|
-
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(
|
|
133
|
+
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(name, nextFormValue, checkOptions).then(function (checkResult) {
|
|
138
134
|
return callbackEvents(checkResult);
|
|
139
135
|
});
|
|
140
136
|
}
|
|
141
|
-
return Promise.resolve(callbackEvents(model === null || model === void 0 ? void 0 : model.checkForField(
|
|
137
|
+
return Promise.resolve(callbackEvents(model === null || model === void 0 ? void 0 : model.checkForField(name, nextFormValue, checkOptions)));
|
|
142
138
|
});
|
|
143
|
-
var
|
|
144
|
-
if (!isUndefined(errorMessage)) {
|
|
145
|
-
messageNode = errorMessage;
|
|
146
|
-
} else if (errorFromContext) {
|
|
147
|
-
var fieldError = getFieldError(name);
|
|
148
|
-
if (typeof fieldError === 'string' || !(fieldError !== null && fieldError !== void 0 && fieldError.array) && !(fieldError !== null && fieldError !== void 0 && fieldError.object) && fieldError !== null && fieldError !== void 0 && fieldError.hasError) {
|
|
149
|
-
messageNode = fieldError;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
var ariaDescribedby = controlId ? controlId + "-help-text" : null;
|
|
153
|
-
var fieldHasError = Boolean(messageNode);
|
|
154
|
-
var ariaErrormessage = fieldHasError && controlId ? controlId + "-error-message" : undefined;
|
|
155
|
-
var valueKey = 'value';
|
|
139
|
+
var fieldHasError = Boolean(fieldError);
|
|
156
140
|
|
|
157
141
|
// Toggle component is a special case that uses `checked` and `defaultChecked` instead of `value` and `defaultValue` props.
|
|
158
|
-
|
|
159
|
-
valueKey = 'checked';
|
|
160
|
-
}
|
|
142
|
+
var valueKey = AccepterComponent === Toggle ? 'checked' : 'value';
|
|
161
143
|
var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = fieldValue === undefined ? defaultValue : fieldValue, _accepterProps);
|
|
162
144
|
return /*#__PURE__*/React.createElement(Component, {
|
|
163
145
|
className: classes,
|
|
@@ -165,10 +147,10 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
165
147
|
"data-testid": "form-control-wrapper"
|
|
166
148
|
}, /*#__PURE__*/React.createElement(AccepterComponent, _extends({
|
|
167
149
|
id: controlId,
|
|
168
|
-
"aria-labelledby":
|
|
169
|
-
"aria-describedby":
|
|
150
|
+
"aria-labelledby": labelId,
|
|
151
|
+
"aria-describedby": helpTextId,
|
|
170
152
|
"aria-invalid": fieldHasError || undefined,
|
|
171
|
-
"aria-errormessage":
|
|
153
|
+
"aria-errormessage": fieldHasError ? errorMessageId : undefined
|
|
172
154
|
}, accepterProps, rest, {
|
|
173
155
|
readOnly: readOnly,
|
|
174
156
|
plaintext: plaintext,
|
|
@@ -177,13 +159,13 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
177
159
|
onChange: handleFieldChange,
|
|
178
160
|
onBlur: handleFieldBlur
|
|
179
161
|
})), /*#__PURE__*/React.createElement(FormErrorMessage, {
|
|
180
|
-
id:
|
|
162
|
+
id: errorMessageId,
|
|
181
163
|
role: "alert",
|
|
182
164
|
"aria-relevant": "all",
|
|
183
|
-
show:
|
|
165
|
+
show: fieldHasError,
|
|
184
166
|
className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["message-wrapper"]))),
|
|
185
167
|
placement: errorPlacement
|
|
186
|
-
},
|
|
168
|
+
}, fieldError));
|
|
187
169
|
});
|
|
188
170
|
FormControl.displayName = 'FormControl';
|
|
189
171
|
FormControl.propTypes = {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface FieldProps {
|
|
3
|
+
name: string;
|
|
4
|
+
formValue?: Record<string, any>;
|
|
5
|
+
formError?: Record<string, any>;
|
|
6
|
+
value: any;
|
|
7
|
+
nestedField: boolean;
|
|
8
|
+
errorMessage: React.ReactNode;
|
|
9
|
+
errorFromContext?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare function useField(props: FieldProps): {
|
|
12
|
+
fieldValue: any;
|
|
13
|
+
fieldError: any;
|
|
14
|
+
setFieldValue: (fieldName: string, fieldValue: any) => {
|
|
15
|
+
[x: string]: any;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export default useField;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
4
|
+
import get from 'lodash/get';
|
|
5
|
+
import set from 'lodash/set';
|
|
6
|
+
import { nameToPath } from '../utils';
|
|
7
|
+
function useField(props) {
|
|
8
|
+
var name = props.name,
|
|
9
|
+
formValue = props.formValue,
|
|
10
|
+
formError = props.formError,
|
|
11
|
+
value = props.value,
|
|
12
|
+
nestedField = props.nestedField,
|
|
13
|
+
errorMessage = props.errorMessage,
|
|
14
|
+
errorFromContext = props.errorFromContext;
|
|
15
|
+
var fieldValue = useMemo(function () {
|
|
16
|
+
if (typeof value !== 'undefined') {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
return nestedField ? get(formValue, name) : formValue === null || formValue === void 0 ? void 0 : formValue[name];
|
|
20
|
+
}, [formValue, name, nestedField, value]);
|
|
21
|
+
var fieldError = useMemo(function () {
|
|
22
|
+
if (typeof errorMessage !== 'undefined' || !errorFromContext) {
|
|
23
|
+
return errorMessage;
|
|
24
|
+
}
|
|
25
|
+
if (nestedField) {
|
|
26
|
+
var _get;
|
|
27
|
+
return (_get = get(formError, nameToPath(name))) === null || _get === void 0 ? void 0 : _get.errorMessage;
|
|
28
|
+
}
|
|
29
|
+
var fieldError = formError === null || formError === void 0 ? void 0 : formError[name];
|
|
30
|
+
if (typeof fieldError === 'string') {
|
|
31
|
+
return fieldError;
|
|
32
|
+
}
|
|
33
|
+
return fieldError === null || fieldError === void 0 ? void 0 : fieldError.errorMessage;
|
|
34
|
+
}, [errorFromContext, errorMessage, formError, name, nestedField]);
|
|
35
|
+
var setFieldValue = useCallback(function (fieldName, fieldValue) {
|
|
36
|
+
var _extends2;
|
|
37
|
+
if (nestedField) {
|
|
38
|
+
return set(_extends({}, formValue), fieldName, fieldValue);
|
|
39
|
+
}
|
|
40
|
+
return _extends({}, formValue, (_extends2 = {}, _extends2[fieldName] = fieldValue, _extends2));
|
|
41
|
+
}, [formValue, nestedField]);
|
|
42
|
+
return {
|
|
43
|
+
fieldValue: fieldValue,
|
|
44
|
+
fieldError: fieldError,
|
|
45
|
+
setFieldValue: setFieldValue
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export default useField;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useRef, useEffect } from 'react';
|
|
3
|
+
import { useFormContext } from '../../Form/FormContext';
|
|
4
|
+
function useRegisterModel(name, rule) {
|
|
5
|
+
var _ref = useFormContext() || {},
|
|
6
|
+
pushFieldRule = _ref.pushFieldRule,
|
|
7
|
+
removeFieldRule = _ref.removeFieldRule;
|
|
8
|
+
var refRule = useRef(rule);
|
|
9
|
+
refRule.current = rule;
|
|
10
|
+
useEffect(function () {
|
|
11
|
+
pushFieldRule === null || pushFieldRule === void 0 ? void 0 : pushFieldRule(name, refRule);
|
|
12
|
+
return function () {
|
|
13
|
+
removeFieldRule === null || removeFieldRule === void 0 ? void 0 : removeFieldRule(name);
|
|
14
|
+
};
|
|
15
|
+
}, [name, pushFieldRule, removeFieldRule]);
|
|
16
|
+
}
|
|
17
|
+
export default useRegisterModel;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function nameToPath(name: string): string;
|