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;
|
|
@@ -9,29 +9,31 @@ function getSafeCalendarDate(_ref) {
|
|
|
9
9
|
var _value;
|
|
10
10
|
var value = _ref.value,
|
|
11
11
|
_ref$calendarKey = _ref.calendarKey,
|
|
12
|
-
calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey
|
|
12
|
+
calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey,
|
|
13
|
+
allowAameMonth = _ref.allowAameMonth;
|
|
13
14
|
// Update calendarDate if the value is not null
|
|
14
15
|
value = (_value = value) !== null && _value !== void 0 ? _value : [];
|
|
16
|
+
var gap = allowAameMonth ? 0 : 1;
|
|
15
17
|
if (value[0] && value[1]) {
|
|
16
18
|
var diffMonth = (0, _dateUtils.differenceInCalendarMonths)(value[1], value[0]);
|
|
17
19
|
if (calendarKey === 'start') {
|
|
18
20
|
return [value[0], diffMonth <= 0 ? (0, _dateUtils.copyTime)({
|
|
19
21
|
from: value[1],
|
|
20
|
-
to: (0, _dateUtils.addMonths)(value[0],
|
|
22
|
+
to: (0, _dateUtils.addMonths)(value[0], gap)
|
|
21
23
|
}) : value[1]];
|
|
22
24
|
} else if (calendarKey === 'end') {
|
|
23
25
|
return [diffMonth <= 0 ? (0, _dateUtils.copyTime)({
|
|
24
26
|
from: value[0],
|
|
25
|
-
to: (0, _dateUtils.addMonths)(value[1], -
|
|
27
|
+
to: (0, _dateUtils.addMonths)(value[1], -gap)
|
|
26
28
|
}) : value[0], value[1]];
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
// If only the start date
|
|
30
32
|
} else if (value[0]) {
|
|
31
|
-
return [value[0], (0, _dateUtils.addMonths)(value[0],
|
|
33
|
+
return [value[0], (0, _dateUtils.addMonths)(value[0], gap)];
|
|
32
34
|
}
|
|
33
35
|
var todayDate = new Date();
|
|
34
|
-
return [todayDate, (0, _dateUtils.addMonths)(todayDate,
|
|
36
|
+
return [todayDate, (0, _dateUtils.addMonths)(todayDate, gap)];
|
|
35
37
|
}
|
|
36
38
|
var isSameRange = function isSameRange(source, dest, format) {
|
|
37
39
|
// If both are null, reguard as same
|
package/cjs/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/cjs/Form/Form.js
CHANGED
|
@@ -10,6 +10,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
13
|
+
var _set = _interopRequireDefault(require("lodash/set"));
|
|
13
14
|
var _schemaTyped = require("schema-typed");
|
|
14
15
|
var _FormContext = _interopRequireWildcard(require("./FormContext"));
|
|
15
16
|
var _FormControl = _interopRequireDefault(require("../FormControl"));
|
|
@@ -36,6 +37,8 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
36
37
|
formValue = props.formValue,
|
|
37
38
|
formError = props.formError,
|
|
38
39
|
fluid = props.fluid,
|
|
40
|
+
_props$nestedField = props.nestedField,
|
|
41
|
+
nestedField = _props$nestedField === void 0 ? false : _props$nestedField,
|
|
39
42
|
_props$layout = props.layout,
|
|
40
43
|
layout = _props$layout === void 0 ? 'vertical' : _props$layout,
|
|
41
44
|
_props$model = props.model,
|
|
@@ -49,7 +52,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
49
52
|
onCheck = props.onCheck,
|
|
50
53
|
onError = props.onError,
|
|
51
54
|
onChange = props.onChange,
|
|
52
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
|
|
55
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "nestedField", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
|
|
53
56
|
var _useSchemaModel = (0, _useSchemaModel2.default)(formModel),
|
|
54
57
|
getCombinedModel = _useSchemaModel.getCombinedModel,
|
|
55
58
|
pushFieldRule = _useSchemaModel.pushFieldRule,
|
|
@@ -79,7 +82,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
79
82
|
* The error message after verification is returned in the callback.
|
|
80
83
|
* @param callback
|
|
81
84
|
*/
|
|
82
|
-
var check = (0,
|
|
85
|
+
var check = (0, _utils.useEventCallback)(function (callback) {
|
|
83
86
|
var formValue = realFormValue || {};
|
|
84
87
|
var formError = {};
|
|
85
88
|
var errorCount = 0;
|
|
@@ -99,14 +102,14 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
99
102
|
return false;
|
|
100
103
|
}
|
|
101
104
|
return true;
|
|
102
|
-
}
|
|
105
|
+
});
|
|
103
106
|
|
|
104
107
|
/**
|
|
105
108
|
* Check the data field
|
|
106
109
|
* @param fieldName
|
|
107
110
|
* @param callback
|
|
108
111
|
*/
|
|
109
|
-
var checkForField = (0,
|
|
112
|
+
var checkForField = (0, _utils.useEventCallback)(function (fieldName, callback) {
|
|
110
113
|
var _extends2;
|
|
111
114
|
var formValue = realFormValue || {};
|
|
112
115
|
var model = getCombinedModel();
|
|
@@ -119,12 +122,12 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
119
122
|
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
120
123
|
}
|
|
121
124
|
return !checkResult.hasError;
|
|
122
|
-
}
|
|
125
|
+
});
|
|
123
126
|
|
|
124
127
|
/**
|
|
125
128
|
* Check form data asynchronously and return a Promise
|
|
126
129
|
*/
|
|
127
|
-
var checkAsync = (0,
|
|
130
|
+
var checkAsync = (0, _utils.useEventCallback)(function () {
|
|
128
131
|
var formValue = realFormValue || {};
|
|
129
132
|
var promises = [];
|
|
130
133
|
var keys = [];
|
|
@@ -152,13 +155,13 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
152
155
|
formError: formError
|
|
153
156
|
};
|
|
154
157
|
});
|
|
155
|
-
}
|
|
158
|
+
});
|
|
156
159
|
|
|
157
160
|
/**
|
|
158
161
|
* Asynchronously check form fields and return Promise
|
|
159
162
|
* @param fieldName
|
|
160
163
|
*/
|
|
161
|
-
var checkForFieldAsync = (0,
|
|
164
|
+
var checkForFieldAsync = (0, _utils.useEventCallback)(function (fieldName) {
|
|
162
165
|
var formValue = realFormValue || {};
|
|
163
166
|
var model = getCombinedModel();
|
|
164
167
|
return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
|
|
@@ -171,19 +174,19 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
171
174
|
}
|
|
172
175
|
return checkResult;
|
|
173
176
|
});
|
|
174
|
-
}
|
|
175
|
-
var cleanErrors = (0,
|
|
177
|
+
});
|
|
178
|
+
var cleanErrors = (0, _utils.useEventCallback)(function () {
|
|
176
179
|
setFormError({});
|
|
177
|
-
}
|
|
178
|
-
var cleanErrorForField = (0,
|
|
180
|
+
});
|
|
181
|
+
var cleanErrorForField = (0, _utils.useEventCallback)(function (fieldName) {
|
|
179
182
|
setFormError((0, _omit.default)(realFormError, [fieldName]));
|
|
180
|
-
}
|
|
181
|
-
var resetErrors = (0,
|
|
183
|
+
});
|
|
184
|
+
var resetErrors = (0, _utils.useEventCallback)(function (formError) {
|
|
182
185
|
if (formError === void 0) {
|
|
183
186
|
formError = {};
|
|
184
187
|
}
|
|
185
188
|
setFormError(formError);
|
|
186
|
-
}
|
|
189
|
+
});
|
|
187
190
|
(0, _react.useImperativeHandle)(ref, function () {
|
|
188
191
|
return {
|
|
189
192
|
root: rootRef.current,
|
|
@@ -196,7 +199,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
196
199
|
resetErrors: resetErrors
|
|
197
200
|
};
|
|
198
201
|
});
|
|
199
|
-
var removeFieldError = (0,
|
|
202
|
+
var removeFieldError = (0, _utils.useEventCallback)(function (name) {
|
|
200
203
|
/**
|
|
201
204
|
* when this function is called when the children component is unmount, it's an old render frame
|
|
202
205
|
* so use Ref to get future error
|
|
@@ -205,8 +208,8 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
205
208
|
realFormErrorRef.current = formError;
|
|
206
209
|
setFormError(formError);
|
|
207
210
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
208
|
-
}
|
|
209
|
-
var removeFieldValue = (0,
|
|
211
|
+
});
|
|
212
|
+
var removeFieldValue = (0, _utils.useEventCallback)(function (name) {
|
|
210
213
|
/**
|
|
211
214
|
* when this function is called when the children component is unmount, it's an old render frame
|
|
212
215
|
* so use Ref to get future value
|
|
@@ -215,8 +218,8 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
215
218
|
realFormValueRef.current = formValue;
|
|
216
219
|
setFormValue(formValue);
|
|
217
220
|
onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
|
|
218
|
-
}
|
|
219
|
-
var handleSubmit = (0,
|
|
221
|
+
});
|
|
222
|
+
var handleSubmit = (0, _utils.useEventCallback)(function (event) {
|
|
220
223
|
if (disabled || readOnly || plaintext) {
|
|
221
224
|
return;
|
|
222
225
|
}
|
|
@@ -224,24 +227,29 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
224
227
|
event.stopPropagation();
|
|
225
228
|
var checkStatus = check();
|
|
226
229
|
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(checkStatus, event);
|
|
227
|
-
}
|
|
228
|
-
var handleFieldError = (0,
|
|
230
|
+
});
|
|
231
|
+
var handleFieldError = (0, _utils.useEventCallback)(function (name, errorMessage) {
|
|
229
232
|
var _extends4;
|
|
230
233
|
var formError = (0, _extends6.default)({}, realFormError, (_extends4 = {}, _extends4[name] = errorMessage, _extends4));
|
|
231
234
|
setFormError(formError);
|
|
232
235
|
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
233
236
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
234
|
-
}
|
|
235
|
-
var handleFieldSuccess = (0,
|
|
237
|
+
});
|
|
238
|
+
var handleFieldSuccess = (0, _utils.useEventCallback)(function (name) {
|
|
236
239
|
removeFieldError(name);
|
|
237
|
-
}
|
|
238
|
-
var
|
|
240
|
+
});
|
|
241
|
+
var setFieldValue = function setFieldValue(formValue, fieldName, fieldValue) {
|
|
239
242
|
var _extends5;
|
|
240
|
-
|
|
241
|
-
|
|
243
|
+
if (nestedField) {
|
|
244
|
+
return (0, _set.default)((0, _extends6.default)({}, formValue), fieldName, fieldValue);
|
|
245
|
+
}
|
|
246
|
+
return (0, _extends6.default)({}, formValue, (_extends5 = {}, _extends5[fieldName] = fieldValue, _extends5));
|
|
247
|
+
};
|
|
248
|
+
var handleFieldChange = (0, _utils.useEventCallback)(function (name, value, event) {
|
|
249
|
+
var nextFormValue = setFieldValue(realFormValue, name, value);
|
|
242
250
|
setFormValue(nextFormValue);
|
|
243
251
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextFormValue, event);
|
|
244
|
-
}
|
|
252
|
+
});
|
|
245
253
|
var rootRef = (0, _react.useRef)(null);
|
|
246
254
|
var formContextValue = (0, _react.useMemo)(function () {
|
|
247
255
|
return {
|
|
@@ -252,6 +260,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
252
260
|
plaintext: plaintext,
|
|
253
261
|
disabled: disabled,
|
|
254
262
|
formError: realFormError,
|
|
263
|
+
nestedField: nestedField,
|
|
255
264
|
removeFieldValue: removeFieldValue,
|
|
256
265
|
removeFieldError: removeFieldError,
|
|
257
266
|
pushFieldRule: pushFieldRule,
|
|
@@ -260,7 +269,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
260
269
|
onFieldError: handleFieldError,
|
|
261
270
|
onFieldSuccess: handleFieldSuccess
|
|
262
271
|
};
|
|
263
|
-
}, [getCombinedModel, checkTrigger, errorFromContext, readOnly, plaintext, disabled, realFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
272
|
+
}, [getCombinedModel, checkTrigger, errorFromContext, readOnly, plaintext, disabled, realFormError, nestedField, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
264
273
|
return /*#__PURE__*/_react.default.createElement("form", (0, _extends6.default)({}, rest, {
|
|
265
274
|
ref: rootRef,
|
|
266
275
|
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;
|
|
@@ -11,6 +11,8 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
13
|
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
|
14
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
15
|
+
var _set = _interopRequireDefault(require("lodash/set"));
|
|
14
16
|
var _Input = _interopRequireDefault(require("../Input"));
|
|
15
17
|
var _FormErrorMessage = _interopRequireDefault(require("../FormErrorMessage"));
|
|
16
18
|
var _utils = require("../utils");
|
|
@@ -35,6 +37,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
35
37
|
disabledContext = _useContext.disabled,
|
|
36
38
|
errorFromContext = _useContext.errorFromContext,
|
|
37
39
|
formError = _useContext.formError,
|
|
40
|
+
nestedField = _useContext.nestedField,
|
|
38
41
|
removeFieldValue = _useContext.removeFieldValue,
|
|
39
42
|
removeFieldError = _useContext.removeFieldError,
|
|
40
43
|
pushFieldRule = _useContext.pushFieldRule,
|
|
@@ -84,47 +87,67 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
84
87
|
});
|
|
85
88
|
var trigger = checkTrigger || contextCheckTrigger;
|
|
86
89
|
var formValue = (0, _react.useContext)(_FormContext.FormValueContext);
|
|
87
|
-
var
|
|
90
|
+
var getFieldValue = function getFieldValue(fieldName) {
|
|
91
|
+
if (!(0, _isUndefined.default)(value)) {
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
return nestedField ? (0, _get.default)(formValue, fieldName) : formValue === null || formValue === void 0 ? void 0 : formValue[name];
|
|
95
|
+
};
|
|
96
|
+
var setFieldValue = function setFieldValue(fieldName, fieldValue) {
|
|
97
|
+
var _extends2;
|
|
98
|
+
if (nestedField) {
|
|
99
|
+
return (0, _set.default)((0, _extends3.default)({}, formValue), fieldName, fieldValue);
|
|
100
|
+
}
|
|
101
|
+
return (0, _extends3.default)({}, formValue, (_extends2 = {}, _extends2[fieldName] = fieldValue, _extends2));
|
|
102
|
+
};
|
|
103
|
+
var getFieldError = function getFieldError(fieldName) {
|
|
104
|
+
if (nestedField) {
|
|
105
|
+
var _name = fieldName.includes('.') ? fieldName.replace('.', '.object.') + '.errorMessage' : fieldName;
|
|
106
|
+
return (0, _get.default)(formError, _name);
|
|
107
|
+
}
|
|
108
|
+
return formError === null || formError === void 0 ? void 0 : formError[fieldName];
|
|
109
|
+
};
|
|
110
|
+
var fieldValue = getFieldValue(name);
|
|
88
111
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
89
112
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
90
113
|
prefix = _useClassNames.prefix;
|
|
91
114
|
var classes = withClassPrefix('wrapper');
|
|
92
|
-
var handleFieldChange = function
|
|
115
|
+
var handleFieldChange = (0, _utils.useEventCallback)(function (value, event) {
|
|
93
116
|
handleFieldCheck(value, trigger === 'change');
|
|
94
117
|
onFieldChange === null || onFieldChange === void 0 ? void 0 : onFieldChange(name, value, event);
|
|
95
118
|
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
96
|
-
};
|
|
97
|
-
var handleFieldBlur = function
|
|
98
|
-
handleFieldCheck(
|
|
119
|
+
});
|
|
120
|
+
var handleFieldBlur = (0, _utils.useEventCallback)(function (event) {
|
|
121
|
+
handleFieldCheck(fieldValue, trigger === 'blur');
|
|
99
122
|
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
100
|
-
};
|
|
101
|
-
var handleFieldCheck = function
|
|
102
|
-
var
|
|
123
|
+
});
|
|
124
|
+
var handleFieldCheck = (0, _utils.useEventCallback)(function (value, isCheckTrigger) {
|
|
125
|
+
var checkFieldName = nestedField ? name.split('.')[0] : name;
|
|
103
126
|
var callbackEvents = function callbackEvents(checkResult) {
|
|
104
127
|
// The relevant event is triggered only when the inspection is allowed.
|
|
105
128
|
if (isCheckTrigger) {
|
|
106
129
|
if (checkResult.hasError) {
|
|
107
|
-
onFieldError === null || onFieldError === void 0 ? void 0 : onFieldError(
|
|
130
|
+
onFieldError === null || onFieldError === void 0 ? void 0 : onFieldError(checkFieldName, (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult);
|
|
108
131
|
} else {
|
|
109
|
-
onFieldSuccess === null || onFieldSuccess === void 0 ? void 0 : onFieldSuccess(
|
|
132
|
+
onFieldSuccess === null || onFieldSuccess === void 0 ? void 0 : onFieldSuccess(checkFieldName);
|
|
110
133
|
}
|
|
111
134
|
}
|
|
112
135
|
return checkResult;
|
|
113
136
|
};
|
|
114
|
-
var nextFormValue = (
|
|
137
|
+
var nextFormValue = setFieldValue(name, value);
|
|
115
138
|
var model = getCombinedModel();
|
|
116
139
|
if (checkAsync) {
|
|
117
|
-
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(
|
|
140
|
+
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(checkFieldName, nextFormValue).then(function (checkResult) {
|
|
118
141
|
return callbackEvents(checkResult);
|
|
119
142
|
});
|
|
120
143
|
}
|
|
121
|
-
return Promise.resolve(callbackEvents(model === null || model === void 0 ? void 0 : model.checkForField(
|
|
122
|
-
};
|
|
144
|
+
return Promise.resolve(callbackEvents(model === null || model === void 0 ? void 0 : model.checkForField(checkFieldName, nextFormValue)));
|
|
145
|
+
});
|
|
123
146
|
var messageNode = null;
|
|
124
147
|
if (!(0, _isUndefined.default)(errorMessage)) {
|
|
125
148
|
messageNode = errorMessage;
|
|
126
149
|
} else if (errorFromContext) {
|
|
127
|
-
var fieldError =
|
|
150
|
+
var fieldError = getFieldError(name);
|
|
128
151
|
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) {
|
|
129
152
|
messageNode = fieldError;
|
|
130
153
|
}
|
|
@@ -138,7 +161,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
138
161
|
if (AccepterComponent === _Toggle.default) {
|
|
139
162
|
valueKey = 'checked';
|
|
140
163
|
}
|
|
141
|
-
var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] =
|
|
164
|
+
var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = fieldValue === undefined ? defaultValue : fieldValue, _accepterProps);
|
|
142
165
|
return /*#__PURE__*/_react.default.createElement(Component, {
|
|
143
166
|
className: classes,
|
|
144
167
|
ref: ref,
|
|
@@ -157,7 +180,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
157
180
|
onChange: handleFieldChange,
|
|
158
181
|
onBlur: handleFieldBlur
|
|
159
182
|
})), /*#__PURE__*/_react.default.createElement(_FormErrorMessage.default, {
|
|
160
|
-
id: controlId + "-error-message",
|
|
183
|
+
id: controlId ? controlId + "-error-message" : undefined,
|
|
161
184
|
role: "alert",
|
|
162
185
|
"aria-relevant": "all",
|
|
163
186
|
show: !!messageNode,
|
|
@@ -22,13 +22,14 @@ var FormGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
22
22
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
23
23
|
_props$classPrefix = props.classPrefix,
|
|
24
24
|
classPrefix = _props$classPrefix === void 0 ? 'form-group' : _props$classPrefix,
|
|
25
|
-
|
|
25
|
+
controlIdProp = props.controlId,
|
|
26
26
|
className = props.className,
|
|
27
27
|
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "controlId", "className"]);
|
|
28
28
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
29
29
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
30
30
|
merge = _useClassNames.merge;
|
|
31
31
|
var classes = merge(className, withClassPrefix());
|
|
32
|
+
var controlId = (0, _utils.useUniqueId)('rs-', controlIdProp);
|
|
32
33
|
var contextValue = (0, _react.useMemo)(function () {
|
|
33
34
|
return {
|
|
34
35
|
controlId: controlId
|