rsuite 5.49.0 → 5.51.0
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/CHANGELOG.md +24 -0
- package/Cascader/styles/index.less +4 -4
- package/CheckTreePicker/styles/index.less +3 -3
- package/DatePicker/styles/index.less +1 -1
- package/DateRangePicker/styles/index.less +15 -5
- package/Dropdown/styles/index.less +5 -4
- package/Dropdown/styles/mixin.less +0 -11
- package/Form/styles/mixin.less +1 -2
- package/InputGroup/styles/index.less +0 -14
- package/InputPicker/styles/index.less +1 -1
- package/Picker/styles/index.less +33 -26
- package/Picker/styles/mixin.less +20 -16
- package/README.md +4 -4
- package/TagInput/styles/index.less +2 -2
- package/TagPicker/styles/index.less +5 -1
- package/TreePicker/styles/index.less +2 -2
- package/cjs/@types/common.d.ts +8 -0
- package/cjs/AutoComplete/AutoComplete.js +39 -37
- package/cjs/AutoComplete/Combobox.d.ts +8 -0
- package/cjs/AutoComplete/Combobox.js +31 -0
- package/cjs/Calendar/Calendar.d.ts +5 -1
- package/cjs/Calendar/CalendarContainer.d.ts +5 -1
- package/cjs/Calendar/CalendarContainer.js +35 -37
- package/cjs/Cascader/Cascader.js +58 -59
- package/cjs/Cascader/DropdownMenu.d.ts +3 -20
- package/cjs/Cascader/DropdownMenu.js +48 -48
- package/cjs/Cascader/TreeView.d.ts +24 -0
- package/cjs/Cascader/TreeView.js +174 -0
- package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
- package/cjs/CheckPicker/CheckPicker.js +42 -44
- package/cjs/CheckTreePicker/CheckTreeNode.d.ts +2 -2
- package/cjs/CheckTreePicker/CheckTreeNode.js +31 -59
- package/cjs/CheckTreePicker/CheckTreePicker.js +81 -84
- package/cjs/DatePicker/DatePicker.d.ts +5 -1
- package/cjs/DatePicker/DatePicker.js +7 -10
- package/cjs/DatePicker/Toolbar.js +2 -1
- package/cjs/DateRangeInput/DateRangeInput.js +2 -2
- package/cjs/DateRangePicker/Calendar.js +24 -23
- package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
- package/cjs/DateRangePicker/DateRangePicker.js +239 -202
- package/cjs/DateRangePicker/types.d.ts +11 -3
- package/cjs/DateRangePicker/utils.d.ts +2 -1
- package/cjs/DateRangePicker/utils.js +7 -5
- package/cjs/Form/Form.d.ts +14 -0
- package/cjs/Form/Form.js +39 -30
- package/cjs/Form/FormContext.d.ts +1 -0
- package/cjs/FormControl/FormControl.d.ts +11 -1
- package/cjs/FormControl/FormControl.js +40 -17
- package/cjs/FormGroup/FormGroup.js +2 -1
- package/cjs/InputPicker/InputPicker.js +108 -92
- package/cjs/InputPicker/InputSearch.js +3 -15
- package/cjs/InputPicker/TagList.d.ts +3 -0
- package/cjs/InputPicker/TagList.js +29 -0
- package/cjs/InputPicker/TextBox.d.ts +18 -0
- package/cjs/InputPicker/TextBox.js +48 -0
- package/cjs/MultiCascader/MultiCascader.js +53 -52
- package/cjs/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
- package/cjs/MultiCascader/{DropdownMenu.js → TreeView.js} +77 -74
- package/{esm/Picker/DropdownMenuCheckItem.d.ts → cjs/Picker/ListCheckItem.d.ts} +3 -3
- package/cjs/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +14 -30
- package/cjs/Picker/{DropdownMenuItem.d.ts → ListItem.d.ts} +4 -4
- package/cjs/Picker/{DropdownMenuItem.js → ListItem.js} +15 -24
- package/cjs/Picker/ListItemGroup.d.ts +6 -0
- package/cjs/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
- package/cjs/Picker/Listbox.d.ts +35 -0
- package/cjs/Picker/{DropdownMenu.js → Listbox.js} +49 -64
- package/cjs/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
- package/cjs/{DatePicker → Picker}/PickerIndicator.js +2 -1
- package/cjs/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
- package/cjs/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
- package/cjs/Picker/{PickerOverlay.js → PickerPopup.js} +9 -7
- package/cjs/Picker/PickerToggle.d.ts +17 -22
- package/cjs/Picker/PickerToggle.js +63 -181
- package/cjs/Picker/PickerToggleTrigger.d.ts +15 -0
- package/cjs/Picker/PickerToggleTrigger.js +21 -5
- package/cjs/Picker/SearchBar.js +7 -9
- package/cjs/Picker/TreeView.d.ts +7 -0
- package/cjs/Picker/TreeView.js +31 -0
- package/cjs/Picker/hooks/index.d.ts +6 -0
- package/cjs/Picker/hooks/index.js +18 -0
- package/cjs/Picker/hooks/useCombobox.d.ts +7 -0
- package/cjs/Picker/hooks/useCombobox.js +22 -0
- package/cjs/Picker/hooks/useFocusItemValue.d.ts +30 -0
- package/cjs/Picker/hooks/useFocusItemValue.js +246 -0
- package/cjs/Picker/hooks/usePickerClassName.d.ts +21 -0
- package/cjs/Picker/hooks/usePickerClassName.js +39 -0
- package/cjs/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +5 -3
- package/cjs/Picker/{usePickerRef.js → hooks/usePickerRef.js} +13 -7
- package/cjs/Picker/hooks/useSearch.d.ts +18 -0
- package/cjs/Picker/hooks/useSearch.js +57 -0
- package/cjs/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
- package/cjs/Picker/hooks/useToggleKeyDownEvent.js +101 -0
- package/cjs/Picker/index.d.ts +9 -5
- package/cjs/Picker/index.js +32 -16
- package/cjs/Picker/propTypes.d.ts +0 -6
- package/cjs/Picker/propTypes.js +0 -5
- package/cjs/Picker/utils.d.ts +2 -100
- package/cjs/Picker/utils.js +1 -473
- package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
- package/cjs/SelectPicker/SelectPicker.js +47 -50
- package/cjs/TagInput/index.js +4 -0
- package/cjs/TreePicker/TreeNode.d.ts +2 -2
- package/cjs/TreePicker/TreeNode.js +22 -56
- package/cjs/TreePicker/TreePicker.js +91 -95
- package/cjs/utils/constants.d.ts +2 -1
- package/cjs/utils/constants.js +1 -0
- package/cjs/utils/dateUtils.d.ts +0 -1
- package/cjs/utils/dateUtils.js +0 -6
- package/cjs/utils/getStringLength.d.ts +2 -0
- package/cjs/utils/getStringLength.js +18 -0
- package/cjs/utils/index.d.ts +1 -0
- package/cjs/utils/index.js +4 -1
- package/dist/rsuite-no-reset-rtl.css +201 -186
- 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 +201 -186
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +201 -186
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +201 -186
- package/dist/rsuite.js +235 -104
- 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.map +1 -1
- package/esm/@types/common.d.ts +8 -0
- package/esm/AutoComplete/AutoComplete.js +42 -40
- package/esm/AutoComplete/Combobox.d.ts +8 -0
- package/esm/AutoComplete/Combobox.js +25 -0
- package/esm/Calendar/Calendar.d.ts +5 -1
- package/esm/Calendar/CalendarContainer.d.ts +5 -1
- package/esm/Calendar/CalendarContainer.js +37 -39
- package/esm/Cascader/Cascader.js +61 -62
- package/esm/Cascader/DropdownMenu.d.ts +3 -20
- package/esm/Cascader/DropdownMenu.js +50 -49
- package/esm/Cascader/TreeView.d.ts +24 -0
- package/esm/Cascader/TreeView.js +167 -0
- package/esm/CheckPicker/CheckPicker.d.ts +2 -2
- package/esm/CheckPicker/CheckPicker.js +45 -47
- package/esm/CheckTreePicker/CheckTreeNode.d.ts +2 -2
- package/esm/CheckTreePicker/CheckTreeNode.js +33 -61
- package/esm/CheckTreePicker/CheckTreePicker.js +84 -87
- package/esm/DatePicker/DatePicker.d.ts +5 -1
- package/esm/DatePicker/DatePicker.js +5 -8
- package/esm/DatePicker/Toolbar.js +2 -1
- package/esm/DateRangeInput/DateRangeInput.js +2 -2
- package/esm/DateRangePicker/Calendar.js +25 -23
- package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
- package/esm/DateRangePicker/DateRangePicker.js +241 -204
- package/esm/DateRangePicker/types.d.ts +11 -3
- package/esm/DateRangePicker/utils.d.ts +2 -1
- package/esm/DateRangePicker/utils.js +7 -5
- package/esm/Form/Form.d.ts +14 -0
- package/esm/Form/Form.js +41 -32
- package/esm/Form/FormContext.d.ts +1 -0
- package/esm/FormControl/FormControl.d.ts +11 -1
- package/esm/FormControl/FormControl.js +41 -18
- package/esm/FormGroup/FormGroup.js +3 -2
- package/esm/InputPicker/InputPicker.js +110 -94
- package/esm/InputPicker/InputSearch.js +4 -15
- package/esm/InputPicker/TagList.d.ts +3 -0
- package/esm/InputPicker/TagList.js +23 -0
- package/esm/InputPicker/TextBox.d.ts +18 -0
- package/esm/InputPicker/TextBox.js +42 -0
- package/esm/MultiCascader/MultiCascader.js +56 -55
- package/esm/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
- package/esm/MultiCascader/{DropdownMenu.js → TreeView.js} +79 -75
- package/{cjs/Picker/DropdownMenuCheckItem.d.ts → esm/Picker/ListCheckItem.d.ts} +3 -3
- package/esm/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +15 -30
- package/esm/Picker/{DropdownMenuItem.d.ts → ListItem.d.ts} +4 -4
- package/esm/Picker/{DropdownMenuItem.js → ListItem.js} +16 -24
- package/esm/Picker/ListItemGroup.d.ts +6 -0
- package/esm/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
- package/esm/Picker/Listbox.d.ts +35 -0
- package/esm/Picker/{DropdownMenu.js → Listbox.js} +50 -64
- package/esm/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
- package/esm/{DatePicker → Picker}/PickerIndicator.js +2 -1
- package/esm/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
- package/esm/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
- package/esm/Picker/{PickerOverlay.js → PickerPopup.js} +10 -8
- package/esm/Picker/PickerToggle.d.ts +17 -22
- package/esm/Picker/PickerToggle.js +65 -183
- package/esm/Picker/PickerToggleTrigger.d.ts +15 -0
- package/esm/Picker/PickerToggleTrigger.js +20 -5
- package/esm/Picker/SearchBar.js +8 -9
- package/esm/Picker/TreeView.d.ts +7 -0
- package/esm/Picker/TreeView.js +25 -0
- package/esm/Picker/hooks/index.d.ts +6 -0
- package/esm/Picker/hooks/index.js +7 -0
- package/esm/Picker/hooks/useCombobox.d.ts +7 -0
- package/esm/Picker/hooks/useCombobox.js +17 -0
- package/esm/Picker/hooks/useFocusItemValue.d.ts +30 -0
- package/esm/Picker/hooks/useFocusItemValue.js +240 -0
- package/esm/Picker/hooks/usePickerClassName.d.ts +21 -0
- package/esm/Picker/hooks/usePickerClassName.js +33 -0
- package/esm/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +5 -3
- package/esm/Picker/{usePickerRef.js → hooks/usePickerRef.js} +13 -8
- package/esm/Picker/hooks/useSearch.d.ts +18 -0
- package/esm/Picker/hooks/useSearch.js +51 -0
- package/esm/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
- package/esm/Picker/hooks/useToggleKeyDownEvent.js +96 -0
- package/esm/Picker/index.d.ts +9 -5
- package/esm/Picker/index.js +9 -5
- package/esm/Picker/propTypes.d.ts +0 -6
- package/esm/Picker/propTypes.js +0 -5
- package/esm/Picker/utils.d.ts +2 -100
- package/esm/Picker/utils.js +2 -467
- package/esm/SelectPicker/SelectPicker.d.ts +2 -2
- package/esm/SelectPicker/SelectPicker.js +50 -53
- package/esm/TagInput/index.js +4 -0
- package/esm/TreePicker/TreeNode.d.ts +2 -2
- package/esm/TreePicker/TreeNode.js +24 -58
- package/esm/TreePicker/TreePicker.js +94 -98
- package/esm/utils/constants.d.ts +2 -1
- package/esm/utils/constants.js +1 -0
- package/esm/utils/dateUtils.d.ts +0 -1
- package/esm/utils/dateUtils.js +0 -5
- package/esm/utils/getStringLength.d.ts +2 -0
- package/esm/utils/getStringLength.js +13 -0
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.js +1 -0
- package/package.json +1 -1
- package/styles/mixins/combobox.less +10 -0
- package/styles/variables.less +1 -3
- package/cjs/Picker/DropdownMenu.d.ts +0 -59
- package/cjs/Picker/DropdownMenuGroup.d.ts +0 -6
- package/esm/Picker/DropdownMenu.d.ts +0 -59
- package/esm/Picker/DropdownMenuGroup.d.ts +0 -6
- /package/cjs/{DatePicker → Picker}/PickerLabel.js +0 -0
- /package/esm/{DatePicker → Picker}/PickerLabel.js +0 -0
|
@@ -9,12 +9,20 @@ export interface RangeType<T = DateRange> {
|
|
|
9
9
|
placement?: 'bottom' | 'left';
|
|
10
10
|
}
|
|
11
11
|
export declare type DisabledDateFunction = (
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Date used to determine if disabling is required.
|
|
14
|
+
*/
|
|
13
15
|
date: Date,
|
|
14
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Date selected.
|
|
18
|
+
*/
|
|
15
19
|
selectDate?: ValueType,
|
|
16
20
|
/**
|
|
17
21
|
* Whether to choose to finish now.
|
|
18
22
|
* If `false`, only the start date is selected, waiting for the selection end date.
|
|
19
23
|
*/
|
|
20
|
-
selectedDone?: boolean,
|
|
24
|
+
selectedDone?: boolean,
|
|
25
|
+
/**
|
|
26
|
+
* Call the target of the `shouldDisableDate` function.
|
|
27
|
+
*/
|
|
28
|
+
target?: DATERANGE_DISABLED_TARGET) => boolean;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { DateRange } from './types';
|
|
2
|
-
export declare function getSafeCalendarDate({ value, calendarKey }: {
|
|
2
|
+
export declare function getSafeCalendarDate({ value, calendarKey, allowAameMonth }: {
|
|
3
3
|
value: [] | [Date] | [Date, Date] | null;
|
|
4
4
|
calendarKey?: 'start' | 'end';
|
|
5
|
+
allowAameMonth?: boolean;
|
|
5
6
|
}): DateRange;
|
|
6
7
|
export declare const isSameRange: (source: DateRange | null, dest: DateRange | null, format: string) => boolean;
|
|
7
8
|
export declare const getMonthHoverRange: (date: Date) => DateRange;
|
|
@@ -4,29 +4,31 @@ export function getSafeCalendarDate(_ref) {
|
|
|
4
4
|
var _value;
|
|
5
5
|
var value = _ref.value,
|
|
6
6
|
_ref$calendarKey = _ref.calendarKey,
|
|
7
|
-
calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey
|
|
7
|
+
calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey,
|
|
8
|
+
allowAameMonth = _ref.allowAameMonth;
|
|
8
9
|
// Update calendarDate if the value is not null
|
|
9
10
|
value = (_value = value) !== null && _value !== void 0 ? _value : [];
|
|
11
|
+
var gap = allowAameMonth ? 0 : 1;
|
|
10
12
|
if (value[0] && value[1]) {
|
|
11
13
|
var diffMonth = differenceInCalendarMonths(value[1], value[0]);
|
|
12
14
|
if (calendarKey === 'start') {
|
|
13
15
|
return [value[0], diffMonth <= 0 ? copyTime({
|
|
14
16
|
from: value[1],
|
|
15
|
-
to: addMonths(value[0],
|
|
17
|
+
to: addMonths(value[0], gap)
|
|
16
18
|
}) : value[1]];
|
|
17
19
|
} else if (calendarKey === 'end') {
|
|
18
20
|
return [diffMonth <= 0 ? copyTime({
|
|
19
21
|
from: value[0],
|
|
20
|
-
to: addMonths(value[1], -
|
|
22
|
+
to: addMonths(value[1], -gap)
|
|
21
23
|
}) : value[0], value[1]];
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
// If only the start date
|
|
25
27
|
} else if (value[0]) {
|
|
26
|
-
return [value[0], addMonths(value[0],
|
|
28
|
+
return [value[0], addMonths(value[0], gap)];
|
|
27
29
|
}
|
|
28
30
|
var todayDate = new Date();
|
|
29
|
-
return [todayDate, addMonths(todayDate,
|
|
31
|
+
return [todayDate, addMonths(todayDate, gap)];
|
|
30
32
|
}
|
|
31
33
|
export var isSameRange = function isSameRange(source, dest, format) {
|
|
32
34
|
// If both are null, reguard as same
|
package/esm/Form/Form.d.ts
CHANGED
|
@@ -32,6 +32,20 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
|
|
|
32
32
|
disabled?: boolean;
|
|
33
33
|
/** The error message comes from context */
|
|
34
34
|
errorFromContext?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The form data is nested.
|
|
37
|
+
* You may now nest fields with "dot syntax" (e.g. address.city).
|
|
38
|
+
*
|
|
39
|
+
* @default false
|
|
40
|
+
* @version v5.51.0
|
|
41
|
+
* @example
|
|
42
|
+
* ```jsx
|
|
43
|
+
* <Form formValue={{ address: { city: 'Shanghai' } }} nestedField>
|
|
44
|
+
* <FormControl name="address.city" />
|
|
45
|
+
* </Form>
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
nestedField?: boolean;
|
|
35
49
|
/** Callback fired when data changing */
|
|
36
50
|
onChange?: (formValue: T, event?: React.SyntheticEvent) => void;
|
|
37
51
|
/** Callback fired when error checking */
|
package/esm/Form/Form.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
-
import React, { useMemo,
|
|
4
|
+
import React, { useMemo, useImperativeHandle, useRef } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import omit from 'lodash/omit';
|
|
7
|
+
import set from 'lodash/set';
|
|
7
8
|
import { SchemaModel } from 'schema-typed';
|
|
8
9
|
import FormContext, { FormValueContext } from './FormContext';
|
|
9
10
|
import FormControl from '../FormControl';
|
|
@@ -13,7 +14,7 @@ import FormGroup from '../FormGroup';
|
|
|
13
14
|
import FormHelpText from '../FormHelpText';
|
|
14
15
|
import { useFormClassNames } from './useFormClassNames';
|
|
15
16
|
import useSchemaModel from './useSchemaModel';
|
|
16
|
-
import { useControlled } from '../utils';
|
|
17
|
+
import { useControlled, useEventCallback } from '../utils';
|
|
17
18
|
/**
|
|
18
19
|
* The `Form` component is a form interface for collecting and validating user input.
|
|
19
20
|
* @see https://rsuitejs.com/components/form
|
|
@@ -30,6 +31,8 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
30
31
|
formValue = props.formValue,
|
|
31
32
|
formError = props.formError,
|
|
32
33
|
fluid = props.fluid,
|
|
34
|
+
_props$nestedField = props.nestedField,
|
|
35
|
+
nestedField = _props$nestedField === void 0 ? false : _props$nestedField,
|
|
33
36
|
_props$layout = props.layout,
|
|
34
37
|
layout = _props$layout === void 0 ? 'vertical' : _props$layout,
|
|
35
38
|
_props$model = props.model,
|
|
@@ -43,7 +46,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
43
46
|
onCheck = props.onCheck,
|
|
44
47
|
onError = props.onError,
|
|
45
48
|
onChange = props.onChange,
|
|
46
|
-
rest = _objectWithoutPropertiesLoose(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
|
|
49
|
+
rest = _objectWithoutPropertiesLoose(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "nestedField", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
|
|
47
50
|
var _useSchemaModel = useSchemaModel(formModel),
|
|
48
51
|
getCombinedModel = _useSchemaModel.getCombinedModel,
|
|
49
52
|
pushFieldRule = _useSchemaModel.pushFieldRule,
|
|
@@ -73,7 +76,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
73
76
|
* The error message after verification is returned in the callback.
|
|
74
77
|
* @param callback
|
|
75
78
|
*/
|
|
76
|
-
var check =
|
|
79
|
+
var check = useEventCallback(function (callback) {
|
|
77
80
|
var formValue = realFormValue || {};
|
|
78
81
|
var formError = {};
|
|
79
82
|
var errorCount = 0;
|
|
@@ -93,14 +96,14 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
93
96
|
return false;
|
|
94
97
|
}
|
|
95
98
|
return true;
|
|
96
|
-
}
|
|
99
|
+
});
|
|
97
100
|
|
|
98
101
|
/**
|
|
99
102
|
* Check the data field
|
|
100
103
|
* @param fieldName
|
|
101
104
|
* @param callback
|
|
102
105
|
*/
|
|
103
|
-
var checkForField =
|
|
106
|
+
var checkForField = useEventCallback(function (fieldName, callback) {
|
|
104
107
|
var _extends2;
|
|
105
108
|
var formValue = realFormValue || {};
|
|
106
109
|
var model = getCombinedModel();
|
|
@@ -113,12 +116,12 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
113
116
|
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
114
117
|
}
|
|
115
118
|
return !checkResult.hasError;
|
|
116
|
-
}
|
|
119
|
+
});
|
|
117
120
|
|
|
118
121
|
/**
|
|
119
122
|
* Check form data asynchronously and return a Promise
|
|
120
123
|
*/
|
|
121
|
-
var checkAsync =
|
|
124
|
+
var checkAsync = useEventCallback(function () {
|
|
122
125
|
var formValue = realFormValue || {};
|
|
123
126
|
var promises = [];
|
|
124
127
|
var keys = [];
|
|
@@ -146,13 +149,13 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
146
149
|
formError: formError
|
|
147
150
|
};
|
|
148
151
|
});
|
|
149
|
-
}
|
|
152
|
+
});
|
|
150
153
|
|
|
151
154
|
/**
|
|
152
155
|
* Asynchronously check form fields and return Promise
|
|
153
156
|
* @param fieldName
|
|
154
157
|
*/
|
|
155
|
-
var checkForFieldAsync =
|
|
158
|
+
var checkForFieldAsync = useEventCallback(function (fieldName) {
|
|
156
159
|
var formValue = realFormValue || {};
|
|
157
160
|
var model = getCombinedModel();
|
|
158
161
|
return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
|
|
@@ -165,19 +168,19 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
165
168
|
}
|
|
166
169
|
return checkResult;
|
|
167
170
|
});
|
|
168
|
-
}
|
|
169
|
-
var cleanErrors =
|
|
171
|
+
});
|
|
172
|
+
var cleanErrors = useEventCallback(function () {
|
|
170
173
|
setFormError({});
|
|
171
|
-
}
|
|
172
|
-
var cleanErrorForField =
|
|
174
|
+
});
|
|
175
|
+
var cleanErrorForField = useEventCallback(function (fieldName) {
|
|
173
176
|
setFormError(omit(realFormError, [fieldName]));
|
|
174
|
-
}
|
|
175
|
-
var resetErrors =
|
|
177
|
+
});
|
|
178
|
+
var resetErrors = useEventCallback(function (formError) {
|
|
176
179
|
if (formError === void 0) {
|
|
177
180
|
formError = {};
|
|
178
181
|
}
|
|
179
182
|
setFormError(formError);
|
|
180
|
-
}
|
|
183
|
+
});
|
|
181
184
|
useImperativeHandle(ref, function () {
|
|
182
185
|
return {
|
|
183
186
|
root: rootRef.current,
|
|
@@ -190,7 +193,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
190
193
|
resetErrors: resetErrors
|
|
191
194
|
};
|
|
192
195
|
});
|
|
193
|
-
var removeFieldError =
|
|
196
|
+
var removeFieldError = useEventCallback(function (name) {
|
|
194
197
|
/**
|
|
195
198
|
* when this function is called when the children component is unmount, it's an old render frame
|
|
196
199
|
* so use Ref to get future error
|
|
@@ -199,8 +202,8 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
199
202
|
realFormErrorRef.current = formError;
|
|
200
203
|
setFormError(formError);
|
|
201
204
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
202
|
-
}
|
|
203
|
-
var removeFieldValue =
|
|
205
|
+
});
|
|
206
|
+
var removeFieldValue = useEventCallback(function (name) {
|
|
204
207
|
/**
|
|
205
208
|
* when this function is called when the children component is unmount, it's an old render frame
|
|
206
209
|
* so use Ref to get future value
|
|
@@ -209,8 +212,8 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
209
212
|
realFormValueRef.current = formValue;
|
|
210
213
|
setFormValue(formValue);
|
|
211
214
|
onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
|
|
212
|
-
}
|
|
213
|
-
var handleSubmit =
|
|
215
|
+
});
|
|
216
|
+
var handleSubmit = useEventCallback(function (event) {
|
|
214
217
|
if (disabled || readOnly || plaintext) {
|
|
215
218
|
return;
|
|
216
219
|
}
|
|
@@ -218,24 +221,29 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
218
221
|
event.stopPropagation();
|
|
219
222
|
var checkStatus = check();
|
|
220
223
|
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(checkStatus, event);
|
|
221
|
-
}
|
|
222
|
-
var handleFieldError =
|
|
224
|
+
});
|
|
225
|
+
var handleFieldError = useEventCallback(function (name, errorMessage) {
|
|
223
226
|
var _extends4;
|
|
224
227
|
var formError = _extends({}, realFormError, (_extends4 = {}, _extends4[name] = errorMessage, _extends4));
|
|
225
228
|
setFormError(formError);
|
|
226
229
|
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
227
230
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
228
|
-
}
|
|
229
|
-
var handleFieldSuccess =
|
|
231
|
+
});
|
|
232
|
+
var handleFieldSuccess = useEventCallback(function (name) {
|
|
230
233
|
removeFieldError(name);
|
|
231
|
-
}
|
|
232
|
-
var
|
|
234
|
+
});
|
|
235
|
+
var setFieldValue = function setFieldValue(formValue, fieldName, fieldValue) {
|
|
233
236
|
var _extends5;
|
|
234
|
-
|
|
235
|
-
|
|
237
|
+
if (nestedField) {
|
|
238
|
+
return set(_extends({}, formValue), fieldName, fieldValue);
|
|
239
|
+
}
|
|
240
|
+
return _extends({}, formValue, (_extends5 = {}, _extends5[fieldName] = fieldValue, _extends5));
|
|
241
|
+
};
|
|
242
|
+
var handleFieldChange = useEventCallback(function (name, value, event) {
|
|
243
|
+
var nextFormValue = setFieldValue(realFormValue, name, value);
|
|
236
244
|
setFormValue(nextFormValue);
|
|
237
245
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextFormValue, event);
|
|
238
|
-
}
|
|
246
|
+
});
|
|
239
247
|
var rootRef = useRef(null);
|
|
240
248
|
var formContextValue = useMemo(function () {
|
|
241
249
|
return {
|
|
@@ -246,6 +254,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
246
254
|
plaintext: plaintext,
|
|
247
255
|
disabled: disabled,
|
|
248
256
|
formError: realFormError,
|
|
257
|
+
nestedField: nestedField,
|
|
249
258
|
removeFieldValue: removeFieldValue,
|
|
250
259
|
removeFieldError: removeFieldError,
|
|
251
260
|
pushFieldRule: pushFieldRule,
|
|
@@ -254,7 +263,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
254
263
|
onFieldError: handleFieldError,
|
|
255
264
|
onFieldSuccess: handleFieldSuccess
|
|
256
265
|
};
|
|
257
|
-
}, [getCombinedModel, checkTrigger, errorFromContext, readOnly, plaintext, disabled, realFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
266
|
+
}, [getCombinedModel, checkTrigger, errorFromContext, readOnly, plaintext, disabled, realFormError, nestedField, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
258
267
|
return /*#__PURE__*/React.createElement("form", _extends({}, rest, {
|
|
259
268
|
ref: rootRef,
|
|
260
269
|
onSubmit: handleSubmit,
|
|
@@ -7,6 +7,7 @@ interface TrulyFormContextValue<T = Record<string, any>, errorMsgType = any, E =
|
|
|
7
7
|
}> {
|
|
8
8
|
getCombinedModel: () => Schema;
|
|
9
9
|
formError: E;
|
|
10
|
+
nestedField: boolean;
|
|
10
11
|
removeFieldValue: (name: string) => void;
|
|
11
12
|
removeFieldError: (name: string) => void;
|
|
12
13
|
pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
|
|
@@ -9,7 +9,17 @@ export declare type FormControlAccepterProps<ValueType = any> = FormControlBaseP
|
|
|
9
9
|
export interface FormControlProps<P = any, ValueType = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLFormElement>, 'value' | 'onChange'> {
|
|
10
10
|
/** Proxied components */
|
|
11
11
|
accepter?: React.ElementType<P & FormControlBaseProps<ValueType>>;
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* The name of form-control, support nested path. such as `address.city`.
|
|
14
|
+
* The path will be used to get and set form values.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```js
|
|
18
|
+
* <Form formValue={{ address: { city: 'Shanghai' } }}>
|
|
19
|
+
* <FormControl name="address.city" />
|
|
20
|
+
* </Form>
|
|
21
|
+
* ```
|
|
22
|
+
**/
|
|
13
23
|
name: string;
|
|
14
24
|
/** Value */
|
|
15
25
|
value?: ValueType;
|
|
@@ -6,12 +6,14 @@ var _templateObject;
|
|
|
6
6
|
import React, { useContext } from 'react';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import isUndefined from 'lodash/isUndefined';
|
|
9
|
+
import get from 'lodash/get';
|
|
10
|
+
import set from 'lodash/set';
|
|
9
11
|
import Input from '../Input';
|
|
10
12
|
import FormErrorMessage from '../FormErrorMessage';
|
|
11
13
|
import { useClassNames } from '../utils';
|
|
12
14
|
import FormContext, { FormValueContext } from '../Form/FormContext';
|
|
13
15
|
import { FormGroupContext } from '../FormGroup/FormGroup';
|
|
14
|
-
import { useWillUnmount } from '../utils';
|
|
16
|
+
import { useWillUnmount, useEventCallback } from '../utils';
|
|
15
17
|
import useRegisterModel from './useRegisterModel';
|
|
16
18
|
import Toggle from '../Toggle';
|
|
17
19
|
|
|
@@ -31,6 +33,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
31
33
|
disabledContext = _useContext.disabled,
|
|
32
34
|
errorFromContext = _useContext.errorFromContext,
|
|
33
35
|
formError = _useContext.formError,
|
|
36
|
+
nestedField = _useContext.nestedField,
|
|
34
37
|
removeFieldValue = _useContext.removeFieldValue,
|
|
35
38
|
removeFieldError = _useContext.removeFieldError,
|
|
36
39
|
pushFieldRule = _useContext.pushFieldRule,
|
|
@@ -80,47 +83,67 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
80
83
|
});
|
|
81
84
|
var trigger = checkTrigger || contextCheckTrigger;
|
|
82
85
|
var formValue = useContext(FormValueContext);
|
|
83
|
-
var
|
|
86
|
+
var getFieldValue = function getFieldValue(fieldName) {
|
|
87
|
+
if (!isUndefined(value)) {
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
90
|
+
return nestedField ? get(formValue, fieldName) : formValue === null || formValue === void 0 ? void 0 : formValue[name];
|
|
91
|
+
};
|
|
92
|
+
var setFieldValue = function setFieldValue(fieldName, fieldValue) {
|
|
93
|
+
var _extends2;
|
|
94
|
+
if (nestedField) {
|
|
95
|
+
return set(_extends({}, formValue), fieldName, fieldValue);
|
|
96
|
+
}
|
|
97
|
+
return _extends({}, formValue, (_extends2 = {}, _extends2[fieldName] = fieldValue, _extends2));
|
|
98
|
+
};
|
|
99
|
+
var getFieldError = function getFieldError(fieldName) {
|
|
100
|
+
if (nestedField) {
|
|
101
|
+
var _name = fieldName.includes('.') ? fieldName.replace('.', '.object.') + '.errorMessage' : fieldName;
|
|
102
|
+
return get(formError, _name);
|
|
103
|
+
}
|
|
104
|
+
return formError === null || formError === void 0 ? void 0 : formError[fieldName];
|
|
105
|
+
};
|
|
106
|
+
var fieldValue = getFieldValue(name);
|
|
84
107
|
var _useClassNames = useClassNames(classPrefix),
|
|
85
108
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
86
109
|
prefix = _useClassNames.prefix;
|
|
87
110
|
var classes = withClassPrefix('wrapper');
|
|
88
|
-
var handleFieldChange = function
|
|
111
|
+
var handleFieldChange = useEventCallback(function (value, event) {
|
|
89
112
|
handleFieldCheck(value, trigger === 'change');
|
|
90
113
|
onFieldChange === null || onFieldChange === void 0 ? void 0 : onFieldChange(name, value, event);
|
|
91
114
|
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
92
|
-
};
|
|
93
|
-
var handleFieldBlur = function
|
|
94
|
-
handleFieldCheck(
|
|
115
|
+
});
|
|
116
|
+
var handleFieldBlur = useEventCallback(function (event) {
|
|
117
|
+
handleFieldCheck(fieldValue, trigger === 'blur');
|
|
95
118
|
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
96
|
-
};
|
|
97
|
-
var handleFieldCheck = function
|
|
98
|
-
var
|
|
119
|
+
});
|
|
120
|
+
var handleFieldCheck = useEventCallback(function (value, isCheckTrigger) {
|
|
121
|
+
var checkFieldName = nestedField ? name.split('.')[0] : name;
|
|
99
122
|
var callbackEvents = function callbackEvents(checkResult) {
|
|
100
123
|
// The relevant event is triggered only when the inspection is allowed.
|
|
101
124
|
if (isCheckTrigger) {
|
|
102
125
|
if (checkResult.hasError) {
|
|
103
|
-
onFieldError === null || onFieldError === void 0 ? void 0 : onFieldError(
|
|
126
|
+
onFieldError === null || onFieldError === void 0 ? void 0 : onFieldError(checkFieldName, (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult);
|
|
104
127
|
} else {
|
|
105
|
-
onFieldSuccess === null || onFieldSuccess === void 0 ? void 0 : onFieldSuccess(
|
|
128
|
+
onFieldSuccess === null || onFieldSuccess === void 0 ? void 0 : onFieldSuccess(checkFieldName);
|
|
106
129
|
}
|
|
107
130
|
}
|
|
108
131
|
return checkResult;
|
|
109
132
|
};
|
|
110
|
-
var nextFormValue =
|
|
133
|
+
var nextFormValue = setFieldValue(name, value);
|
|
111
134
|
var model = getCombinedModel();
|
|
112
135
|
if (checkAsync) {
|
|
113
|
-
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(
|
|
136
|
+
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(checkFieldName, nextFormValue).then(function (checkResult) {
|
|
114
137
|
return callbackEvents(checkResult);
|
|
115
138
|
});
|
|
116
139
|
}
|
|
117
|
-
return Promise.resolve(callbackEvents(model === null || model === void 0 ? void 0 : model.checkForField(
|
|
118
|
-
};
|
|
140
|
+
return Promise.resolve(callbackEvents(model === null || model === void 0 ? void 0 : model.checkForField(checkFieldName, nextFormValue)));
|
|
141
|
+
});
|
|
119
142
|
var messageNode = null;
|
|
120
143
|
if (!isUndefined(errorMessage)) {
|
|
121
144
|
messageNode = errorMessage;
|
|
122
145
|
} else if (errorFromContext) {
|
|
123
|
-
var fieldError =
|
|
146
|
+
var fieldError = getFieldError(name);
|
|
124
147
|
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) {
|
|
125
148
|
messageNode = fieldError;
|
|
126
149
|
}
|
|
@@ -134,7 +157,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
134
157
|
if (AccepterComponent === Toggle) {
|
|
135
158
|
valueKey = 'checked';
|
|
136
159
|
}
|
|
137
|
-
var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] =
|
|
160
|
+
var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = fieldValue === undefined ? defaultValue : fieldValue, _accepterProps);
|
|
138
161
|
return /*#__PURE__*/React.createElement(Component, {
|
|
139
162
|
className: classes,
|
|
140
163
|
ref: ref,
|
|
@@ -153,7 +176,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
153
176
|
onChange: handleFieldChange,
|
|
154
177
|
onBlur: handleFieldBlur
|
|
155
178
|
})), /*#__PURE__*/React.createElement(FormErrorMessage, {
|
|
156
|
-
id: controlId + "-error-message",
|
|
179
|
+
id: controlId ? controlId + "-error-message" : undefined,
|
|
157
180
|
role: "alert",
|
|
158
181
|
"aria-relevant": "all",
|
|
159
182
|
show: !!messageNode,
|
|
@@ -3,7 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
4
|
import React, { useMemo } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
|
-
import { useClassNames } from '../utils';
|
|
6
|
+
import { useClassNames, useUniqueId } from '../utils';
|
|
7
7
|
export var FormGroupContext = /*#__PURE__*/React.createContext({});
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -15,13 +15,14 @@ var FormGroup = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
15
15
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
16
16
|
_props$classPrefix = props.classPrefix,
|
|
17
17
|
classPrefix = _props$classPrefix === void 0 ? 'form-group' : _props$classPrefix,
|
|
18
|
-
|
|
18
|
+
controlIdProp = props.controlId,
|
|
19
19
|
className = props.className,
|
|
20
20
|
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "controlId", "className"]);
|
|
21
21
|
var _useClassNames = useClassNames(classPrefix),
|
|
22
22
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
23
23
|
merge = _useClassNames.merge;
|
|
24
24
|
var classes = merge(className, withClassPrefix());
|
|
25
|
+
var controlId = useUniqueId('rs-', controlIdProp);
|
|
25
26
|
var contextValue = useMemo(function () {
|
|
26
27
|
return {
|
|
27
28
|
controlId: controlId
|