rsuite 5.9.0 → 5.12.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/ButtonToolbar/styles/index.less +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +4 -0
- package/cjs/DateRangePicker/DateRangePicker.d.ts +2 -0
- package/cjs/DateRangePicker/DateRangePicker.js +4 -2
- package/cjs/Form/Form.d.ts +1 -1
- package/cjs/Form/Form.js +35 -11
- package/cjs/Form/FormContext.d.ts +18 -11
- package/cjs/Form/useSchemaModel.d.ts +9 -0
- package/cjs/Form/useSchemaModel.js +46 -0
- package/cjs/FormControl/FormControl.d.ts +5 -0
- package/cjs/FormControl/FormControl.js +19 -2
- package/cjs/FormControl/useRegisterModel.d.ts +4 -0
- package/cjs/FormControl/useRegisterModel.js +20 -0
- package/cjs/Menu/Menubar.js +10 -3
- package/cjs/utils/dom.d.ts +1 -1
- package/dist/rsuite-rtl.css +1 -1
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +1 -1
- package/dist/rsuite.js +26 -4
- 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/DateRangePicker/DateRangePicker.d.ts +2 -0
- package/esm/DateRangePicker/DateRangePicker.js +4 -2
- package/esm/Form/Form.d.ts +1 -1
- package/esm/Form/Form.js +33 -11
- package/esm/Form/FormContext.d.ts +18 -11
- package/esm/Form/useSchemaModel.d.ts +9 -0
- package/esm/Form/useSchemaModel.js +39 -0
- package/esm/FormControl/FormControl.d.ts +5 -0
- package/esm/FormControl/FormControl.js +20 -6
- package/esm/FormControl/useRegisterModel.d.ts +4 -0
- package/esm/FormControl/useRegisterModel.js +14 -0
- package/esm/Menu/Menubar.js +9 -3
- package/esm/utils/dom.d.ts +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# [5.12.0](https://github.com/rsuite/rsuite/compare/v5.11.0...v5.12.0) (2022-05-12)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- **Form.Control:** add `rule` prop ([#2482](https://github.com/rsuite/rsuite/issues/2482)) ([d1917df](https://github.com/rsuite/rsuite/commit/d1917dfcb9474236f756551fa8908edc85e37197))
|
|
6
|
+
|
|
7
|
+
# [5.11.0](https://github.com/rsuite/rsuite/compare/v5.10.0...v5.11.0) (2022-05-05)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- **ButtonToolbar:** change item gap to 10px ([#2475](https://github.com/rsuite/rsuite/issues/2475)) ([d97810a](https://github.com/rsuite/rsuite/commit/d97810ab4cd401b27be929569ce85bff0f498498))
|
|
12
|
+
- **Dropdown.Menu:** fix expected highlight item when focus moving in ([#2477](https://github.com/rsuite/rsuite/issues/2477)) ([b9fdea5](https://github.com/rsuite/rsuite/commit/b9fdea5d57ce76ddc80f5e9776feab02e4ebfacd))
|
|
13
|
+
- **Menubar:** fix unhandled nullish value ([#2478](https://github.com/rsuite/rsuite/issues/2478)) ([10d515d](https://github.com/rsuite/rsuite/commit/10d515d06dd08f2b93e5d7dbd3be7b1114185cab))
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- **DateRangePicker:** expose calendars renderTitle ([#2480](https://github.com/rsuite/rsuite/issues/2480)) ([4461e09](https://github.com/rsuite/rsuite/commit/4461e09ec3917f379b5df213db16cedade6f39e1))
|
|
18
|
+
|
|
19
|
+
# [5.10.0](https://github.com/rsuite/rsuite/compare/v5.9.0...v5.10.0) (2022-04-28)
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
- **FormControl:** support `shouldResetWithUnmount` on `<FormControl>` ([#2468](https://github.com/rsuite/rsuite/issues/2468)) ([69dee5e](https://github.com/rsuite/rsuite/commit/69dee5ece1c20bdc1e1f42429e93150afb7995d8))
|
|
24
|
+
|
|
1
25
|
# [5.9.0](https://github.com/rsuite/rsuite/compare/v5.8.1...v5.9.0) (2022-04-21)
|
|
2
26
|
|
|
3
27
|
### Features
|
package/README.md
CHANGED
|
@@ -99,6 +99,10 @@ You can go through [full documentation][rsuite-doc-guide] or start with followin
|
|
|
99
99
|
- [Use in Vite][demo-vite]
|
|
100
100
|
</details>
|
|
101
101
|
|
|
102
|
+
<a href="https://vercel.com?utm_source=rsuite&utm_campaign=oss" target="_blank">
|
|
103
|
+
<img src="https://www.datocms-assets.com/31049/1618983297-powered-by-vercel.svg" alt="Vercel banner" />
|
|
104
|
+
</a>
|
|
105
|
+
|
|
102
106
|
## Previous major versions
|
|
103
107
|
|
|
104
108
|
The previous major version 4.x will no longer receive new features,
|
|
@@ -35,6 +35,8 @@ export interface DateRangePickerProps extends PickerBaseProps, FormControlBasePr
|
|
|
35
35
|
onClean?: (event: React.MouseEvent) => void;
|
|
36
36
|
/** Custom render value */
|
|
37
37
|
renderValue?: (value: DateRange, format: string) => React.ReactNode;
|
|
38
|
+
/** Custom render for calendar title */
|
|
39
|
+
renderTitle?: (date: Date) => React.ReactNode;
|
|
38
40
|
}
|
|
39
41
|
export interface DateRangePicker extends PickerComponent<DateRangePickerProps> {
|
|
40
42
|
/** Allow the maximum number of days specified, other dates are disabled */
|
|
@@ -93,7 +93,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
93
93
|
onOk = props.onOk,
|
|
94
94
|
onOpen = props.onOpen,
|
|
95
95
|
onSelect = props.onSelect,
|
|
96
|
-
|
|
96
|
+
renderTitle = props.renderTitle,
|
|
97
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "appearance", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "renderTitle"]);
|
|
97
98
|
|
|
98
99
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
99
100
|
merge = _useClassNames.merge,
|
|
@@ -561,7 +562,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
561
562
|
onChangeCalendarTime: handleChangeCalendarTime,
|
|
562
563
|
onMouseMove: handleMouseMove,
|
|
563
564
|
onSelect: handleSelectDate,
|
|
564
|
-
onToggleMeridian: handleToggleMeridian
|
|
565
|
+
onToggleMeridian: handleToggleMeridian,
|
|
566
|
+
renderTitle: renderTitle
|
|
565
567
|
};
|
|
566
568
|
return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
|
|
567
569
|
className: classes,
|
package/cjs/Form/Form.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
|
|
|
33
33
|
/** The error message comes from context */
|
|
34
34
|
errorFromContext?: boolean;
|
|
35
35
|
/** Callback fired when data changing */
|
|
36
|
-
onChange?: (formValue: T, event
|
|
36
|
+
onChange?: (formValue: T, event?: React.SyntheticEvent) => void;
|
|
37
37
|
/** Callback fired when error checking */
|
|
38
38
|
onError?: (formError: E) => void;
|
|
39
39
|
/** Callback fired when data cheking */
|
package/cjs/Form/Form.js
CHANGED
|
@@ -35,6 +35,8 @@ var _FormHelpText = _interopRequireDefault(require("../FormHelpText"));
|
|
|
35
35
|
|
|
36
36
|
var _useFormClassNames = require("./useFormClassNames");
|
|
37
37
|
|
|
38
|
+
var _useSchemaModel2 = _interopRequireDefault(require("./useSchemaModel"));
|
|
39
|
+
|
|
38
40
|
var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
39
41
|
var _props$checkTrigger = props.checkTrigger,
|
|
40
42
|
checkTrigger = _props$checkTrigger === void 0 ? 'change' : _props$checkTrigger,
|
|
@@ -50,7 +52,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
50
52
|
_props$layout = props.layout,
|
|
51
53
|
layout = _props$layout === void 0 ? 'vertical' : _props$layout,
|
|
52
54
|
_props$model = props.model,
|
|
53
|
-
|
|
55
|
+
formModel = _props$model === void 0 ? (0, _schemaTyped.SchemaModel)({}) : _props$model,
|
|
54
56
|
readOnly = props.readOnly,
|
|
55
57
|
plaintext = props.plaintext,
|
|
56
58
|
className = props.className,
|
|
@@ -61,6 +63,12 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
61
63
|
onError = props.onError,
|
|
62
64
|
onChange = props.onChange,
|
|
63
65
|
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
|
|
66
|
+
|
|
67
|
+
var _useSchemaModel = (0, _useSchemaModel2.default)(formModel),
|
|
68
|
+
getCombinedModel = _useSchemaModel.getCombinedModel,
|
|
69
|
+
pushFieldRule = _useSchemaModel.pushFieldRule,
|
|
70
|
+
removeFieldRule = _useSchemaModel.removeFieldRule;
|
|
71
|
+
|
|
64
72
|
var classes = (0, _useFormClassNames.useFormClassNames)({
|
|
65
73
|
classPrefix: classPrefix,
|
|
66
74
|
className: className,
|
|
@@ -95,6 +103,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
95
103
|
var formValue = getFormValue() || {};
|
|
96
104
|
var formError = {};
|
|
97
105
|
var errorCount = 0;
|
|
106
|
+
var model = getCombinedModel();
|
|
98
107
|
Object.keys(model.spec).forEach(function (key) {
|
|
99
108
|
var checkResult = model.checkForField(key, formValue);
|
|
100
109
|
|
|
@@ -113,7 +122,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
113
122
|
}
|
|
114
123
|
|
|
115
124
|
return true;
|
|
116
|
-
}, [
|
|
125
|
+
}, [getFormValue, getCombinedModel, onCheck, onError]);
|
|
117
126
|
/**
|
|
118
127
|
* Check the data field
|
|
119
128
|
* @param fieldName
|
|
@@ -124,6 +133,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
124
133
|
var _extends2;
|
|
125
134
|
|
|
126
135
|
var formValue = getFormValue() || {};
|
|
136
|
+
var model = getCombinedModel();
|
|
127
137
|
var checkResult = model.checkForField(fieldName, formValue);
|
|
128
138
|
var formError = (0, _extends6.default)({}, getFormError(), (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
|
|
129
139
|
setFormError(formError);
|
|
@@ -135,7 +145,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
135
145
|
}
|
|
136
146
|
|
|
137
147
|
return !checkResult.hasError;
|
|
138
|
-
}, [
|
|
148
|
+
}, [getFormValue, getCombinedModel, getFormError, onCheck, onError]);
|
|
139
149
|
/**
|
|
140
150
|
* Check form data asynchronously and return a Promise
|
|
141
151
|
*/
|
|
@@ -144,6 +154,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
144
154
|
var formValue = getFormValue() || {};
|
|
145
155
|
var promises = [];
|
|
146
156
|
var keys = [];
|
|
157
|
+
var model = getCombinedModel();
|
|
147
158
|
Object.keys(model.spec).forEach(function (key) {
|
|
148
159
|
keys.push(key);
|
|
149
160
|
promises.push(model.checkForFieldAsync(key, formValue));
|
|
@@ -171,7 +182,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
171
182
|
formError: formError
|
|
172
183
|
};
|
|
173
184
|
});
|
|
174
|
-
}, [
|
|
185
|
+
}, [getFormValue, getCombinedModel, onCheck, onError]);
|
|
175
186
|
/**
|
|
176
187
|
* Asynchronously check form fields and return Promise
|
|
177
188
|
* @param fieldName
|
|
@@ -179,6 +190,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
179
190
|
|
|
180
191
|
var checkForFieldAsync = (0, _react.useCallback)(function (fieldName) {
|
|
181
192
|
var formValue = getFormValue() || {};
|
|
193
|
+
var model = getCombinedModel();
|
|
182
194
|
return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
|
|
183
195
|
var _extends3;
|
|
184
196
|
|
|
@@ -192,7 +204,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
192
204
|
|
|
193
205
|
return checkResult;
|
|
194
206
|
});
|
|
195
|
-
}, [
|
|
207
|
+
}, [getFormValue, getCombinedModel, getFormError, onCheck, onError]);
|
|
196
208
|
var cleanErrors = (0, _react.useCallback)(function () {
|
|
197
209
|
setFormError({});
|
|
198
210
|
}, []);
|
|
@@ -218,6 +230,16 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
218
230
|
resetErrors: resetErrors
|
|
219
231
|
};
|
|
220
232
|
});
|
|
233
|
+
var removeFieldError = (0, _react.useCallback)(function (name) {
|
|
234
|
+
var formError = (0, _omit.default)(getFormError(), [name]);
|
|
235
|
+
setFormError(formError);
|
|
236
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
237
|
+
}, [getFormError, onCheck]);
|
|
238
|
+
var removeFieldValue = (0, _react.useCallback)(function (name) {
|
|
239
|
+
var formValue = (0, _omit.default)(getFormValue(), [name]);
|
|
240
|
+
setFormValue(formValue);
|
|
241
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
|
|
242
|
+
}, [getFormValue, onChange]);
|
|
221
243
|
var handleSubmit = (0, _react.useCallback)(function (event) {
|
|
222
244
|
if (disabled || readOnly || plaintext) {
|
|
223
245
|
return;
|
|
@@ -237,10 +259,8 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
237
259
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
238
260
|
}, [onError, onCheck, getFormError]);
|
|
239
261
|
var handleFieldSuccess = (0, _react.useCallback)(function (name) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
243
|
-
}, [onCheck, getFormError]);
|
|
262
|
+
removeFieldError(name);
|
|
263
|
+
}, [removeFieldError]);
|
|
244
264
|
var handleFieldChange = (0, _react.useCallback)(function (name, value, event) {
|
|
245
265
|
var _extends5;
|
|
246
266
|
|
|
@@ -252,7 +272,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
252
272
|
var rootRef = (0, _react.useRef)(null);
|
|
253
273
|
var formContextValue = (0, _react.useMemo)(function () {
|
|
254
274
|
return {
|
|
255
|
-
|
|
275
|
+
getCombinedModel: getCombinedModel,
|
|
256
276
|
checkTrigger: checkTrigger,
|
|
257
277
|
formDefaultValue: formDefaultValue,
|
|
258
278
|
errorFromContext: errorFromContext,
|
|
@@ -260,11 +280,15 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
260
280
|
plaintext: plaintext,
|
|
261
281
|
disabled: disabled,
|
|
262
282
|
formError: getFormError(),
|
|
283
|
+
removeFieldValue: removeFieldValue,
|
|
284
|
+
removeFieldError: removeFieldError,
|
|
285
|
+
pushFieldRule: pushFieldRule,
|
|
286
|
+
removeFieldRule: removeFieldRule,
|
|
263
287
|
onFieldChange: handleFieldChange,
|
|
264
288
|
onFieldError: handleFieldError,
|
|
265
289
|
onFieldSuccess: handleFieldSuccess
|
|
266
290
|
};
|
|
267
|
-
}, [
|
|
291
|
+
}, [getCombinedModel, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, getFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
268
292
|
return /*#__PURE__*/_react.default.createElement("form", (0, _extends6.default)({}, rest, {
|
|
269
293
|
ref: rootRef,
|
|
270
294
|
onSubmit: handleSubmit,
|
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Schema } from 'schema-typed';
|
|
3
2
|
import { TypeAttributes } from '../@types/common';
|
|
4
|
-
|
|
3
|
+
import type { Schema } from 'schema-typed';
|
|
4
|
+
import type { FieldRuleType } from './useSchemaModel';
|
|
5
|
+
interface TrulyFormContextValue<T = Record<string, any>, errorMsgType = any, E = {
|
|
5
6
|
[P in keyof T]?: errorMsgType;
|
|
6
7
|
}> {
|
|
7
|
-
|
|
8
|
+
getCombinedModel: () => Schema;
|
|
9
|
+
formError: E;
|
|
10
|
+
removeFieldValue: (name: string) => void;
|
|
11
|
+
removeFieldError: (name: string) => void;
|
|
12
|
+
pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
|
|
13
|
+
removeFieldRule: (name: string) => void;
|
|
14
|
+
onFieldChange: (name: string, value: any, event: React.SyntheticEvent) => void;
|
|
15
|
+
onFieldError: (name: string, errorMessage: string) => void;
|
|
16
|
+
onFieldSuccess: (name: string) => void;
|
|
17
|
+
}
|
|
18
|
+
declare type ExternalPropsContextValue<T> = {
|
|
8
19
|
checkTrigger?: TypeAttributes.CheckTrigger;
|
|
9
20
|
formDefaultValue?: T;
|
|
10
21
|
errorFromContext?: boolean;
|
|
11
22
|
readOnly?: boolean;
|
|
12
23
|
plaintext?: boolean;
|
|
13
24
|
disabled?: boolean;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
export declare const FormContext: React.Context<FormContextValue<Record<string, any>, any, {
|
|
20
|
-
[x: string]: any;
|
|
21
|
-
}>>;
|
|
25
|
+
};
|
|
26
|
+
declare type InitialContextType = Partial<Record<keyof TrulyFormContextValue, undefined>>;
|
|
27
|
+
export declare type FormContextValue<T = Record<string, any>, errorMsgType = any> = (TrulyFormContextValue<T, errorMsgType> | InitialContextType) & ExternalPropsContextValue<T>;
|
|
28
|
+
export declare const FormContext: React.Context<FormContextValue<Record<string, any>, any>>;
|
|
22
29
|
export declare const FormValueContext: React.Context<Record<string, any> | undefined>;
|
|
23
30
|
export declare const FormPlaintextContext: React.Context<boolean>;
|
|
24
31
|
export default FormContext;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
2
|
+
import type { CheckType, Schema } from 'schema-typed';
|
|
3
|
+
export declare type FieldRuleType = MutableRefObject<CheckType<unknown, any> | undefined>;
|
|
4
|
+
declare function useSchemaModel(formModel: Schema): {
|
|
5
|
+
getCombinedModel: () => Schema<any, string>;
|
|
6
|
+
pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
|
|
7
|
+
removeFieldRule: (name: string) => void;
|
|
8
|
+
};
|
|
9
|
+
export default useSchemaModel;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
|
|
6
|
+
var _schemaTyped = require("schema-typed");
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
function useSchemaModel(formModel) {
|
|
11
|
+
var subRulesRef = (0, _react.useRef)([]);
|
|
12
|
+
var pushFieldRule = (0, _react.useCallback)(function (name, fieldRule) {
|
|
13
|
+
subRulesRef.current.push({
|
|
14
|
+
name: name,
|
|
15
|
+
fieldRule: fieldRule
|
|
16
|
+
});
|
|
17
|
+
}, []);
|
|
18
|
+
var removeFieldRule = (0, _react.useCallback)(function (name) {
|
|
19
|
+
var index = subRulesRef.current.findIndex(function (v) {
|
|
20
|
+
return v.name === name;
|
|
21
|
+
});
|
|
22
|
+
subRulesRef.current.splice(index, 1);
|
|
23
|
+
}, []);
|
|
24
|
+
var getCombinedModel = (0, _react.useCallback)(function () {
|
|
25
|
+
var realSubRules = subRulesRef.current.filter(function (v) {
|
|
26
|
+
return Boolean(v.fieldRule.current);
|
|
27
|
+
});
|
|
28
|
+
return _schemaTyped.SchemaModel.combine(formModel, (0, _schemaTyped.SchemaModel)(realSubRules.map(function (_ref) {
|
|
29
|
+
var _ref2;
|
|
30
|
+
|
|
31
|
+
var name = _ref.name,
|
|
32
|
+
fieldRule = _ref.fieldRule;
|
|
33
|
+
return _ref2 = {}, _ref2[name] = fieldRule.current, _ref2;
|
|
34
|
+
}).reduce(function (a, b) {
|
|
35
|
+
return Object.assign(a, b);
|
|
36
|
+
}, {})));
|
|
37
|
+
}, [formModel]);
|
|
38
|
+
return {
|
|
39
|
+
getCombinedModel: getCombinedModel,
|
|
40
|
+
pushFieldRule: pushFieldRule,
|
|
41
|
+
removeFieldRule: removeFieldRule
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var _default = useSchemaModel;
|
|
46
|
+
exports.default = _default;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Input from '../Input';
|
|
3
3
|
import { TypeAttributes, FormControlBaseProps, WithAsProps } from '../@types/common';
|
|
4
|
+
import type { CheckType } from 'schema-typed';
|
|
4
5
|
/**
|
|
5
6
|
* Props that FormControl passes to its accepter
|
|
6
7
|
*/
|
|
@@ -28,6 +29,10 @@ export interface FormControlProps<P = any, ValueType = any> extends WithAsProps,
|
|
|
28
29
|
disabled?: boolean;
|
|
29
30
|
/** Asynchronous check value */
|
|
30
31
|
checkAsync?: boolean;
|
|
32
|
+
/** Remove field value and error message when component is unmounted */
|
|
33
|
+
shouldResetWithUnmount?: boolean;
|
|
34
|
+
/** Validation rule */
|
|
35
|
+
rule?: CheckType<unknown, any>;
|
|
31
36
|
}
|
|
32
37
|
interface FormControlComponent extends React.FC<FormControlProps> {
|
|
33
38
|
<Accepter extends React.ElementType = typeof Input>(props: FormControlProps & {
|
|
@@ -29,6 +29,8 @@ var _FormContext = _interopRequireWildcard(require("../Form/FormContext"));
|
|
|
29
29
|
|
|
30
30
|
var _FormGroup = require("../FormGroup/FormGroup");
|
|
31
31
|
|
|
32
|
+
var _useRegisterModel = _interopRequireDefault(require("./useRegisterModel"));
|
|
33
|
+
|
|
32
34
|
var _templateObject;
|
|
33
35
|
|
|
34
36
|
var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
@@ -40,10 +42,14 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
40
42
|
_useContext$formDefau = _useContext.formDefaultValue,
|
|
41
43
|
formDefaultValue = _useContext$formDefau === void 0 ? {} : _useContext$formDefau,
|
|
42
44
|
formError = _useContext.formError,
|
|
45
|
+
removeFieldValue = _useContext.removeFieldValue,
|
|
46
|
+
removeFieldError = _useContext.removeFieldError,
|
|
47
|
+
pushFieldRule = _useContext.pushFieldRule,
|
|
48
|
+
removeFieldRule = _useContext.removeFieldRule,
|
|
43
49
|
onFieldChange = _useContext.onFieldChange,
|
|
44
50
|
onFieldError = _useContext.onFieldError,
|
|
45
51
|
onFieldSuccess = _useContext.onFieldSuccess,
|
|
46
|
-
|
|
52
|
+
getCombinedModel = _useContext.getCombinedModel,
|
|
47
53
|
contextCheckTrigger = _useContext.checkTrigger;
|
|
48
54
|
|
|
49
55
|
var _props$as = props.as,
|
|
@@ -69,7 +75,10 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
69
75
|
onChange = props.onChange,
|
|
70
76
|
onBlur = props.onBlur,
|
|
71
77
|
defaultValue = props.defaultValue,
|
|
72
|
-
|
|
78
|
+
_props$shouldResetWit = props.shouldResetWithUnmount,
|
|
79
|
+
shouldResetWithUnmount = _props$shouldResetWit === void 0 ? false : _props$shouldResetWit,
|
|
80
|
+
rule = props.rule,
|
|
81
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "accepter", "classPrefix", "className", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount", "rule"]);
|
|
73
82
|
|
|
74
83
|
var _useContext2 = (0, _react.useContext)(_FormGroup.FormGroupContext),
|
|
75
84
|
controlId = _useContext2.controlId;
|
|
@@ -78,6 +87,13 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
78
87
|
throw new Error("\n <FormControl> must be inside a component decorated with <Form>.\n And need to update React to 16.6.0 +.\n ");
|
|
79
88
|
}
|
|
80
89
|
|
|
90
|
+
(0, _useRegisterModel.default)(name, pushFieldRule, removeFieldRule, rule);
|
|
91
|
+
(0, _utils.useWillUnmount)(function () {
|
|
92
|
+
if (shouldResetWithUnmount) {
|
|
93
|
+
removeFieldValue === null || removeFieldValue === void 0 ? void 0 : removeFieldValue(name);
|
|
94
|
+
removeFieldError === null || removeFieldError === void 0 ? void 0 : removeFieldError(name);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
81
97
|
var trigger = checkTrigger || contextCheckTrigger;
|
|
82
98
|
var formValue = (0, _react.useContext)(_FormContext.FormValueContext);
|
|
83
99
|
var val = (0, _isUndefined.default)(value) ? formValue === null || formValue === void 0 ? void 0 : formValue[name] : value;
|
|
@@ -117,6 +133,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
117
133
|
};
|
|
118
134
|
|
|
119
135
|
var nextFormValue = (0, _extends3.default)({}, formValue, (_extends2 = {}, _extends2[name] = value, _extends2));
|
|
136
|
+
var model = getCombinedModel();
|
|
120
137
|
|
|
121
138
|
if (checkAsync) {
|
|
122
139
|
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(name, nextFormValue).then(function (checkResult) {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FieldRuleType } from '../Form/useSchemaModel';
|
|
2
|
+
import type { CheckType } from 'schema-typed';
|
|
3
|
+
declare function useRegisterModel(name: string, pushFieldRule: (n: string, r: FieldRuleType) => void, removeFieldRule: (n: string) => void, rule?: CheckType<unknown, any>): void;
|
|
4
|
+
export default useRegisterModel;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
|
|
8
|
+
function useRegisterModel(name, pushFieldRule, removeFieldRule, rule) {
|
|
9
|
+
var refRule = (0, _react.useRef)(rule);
|
|
10
|
+
refRule.current = rule;
|
|
11
|
+
(0, _react.useEffect)(function () {
|
|
12
|
+
pushFieldRule(name, refRule);
|
|
13
|
+
return function () {
|
|
14
|
+
removeFieldRule(name);
|
|
15
|
+
};
|
|
16
|
+
}, [name, pushFieldRule, removeFieldRule]);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var _default = useRegisterModel;
|
|
20
|
+
exports.default = _default;
|
package/cjs/Menu/Menubar.js
CHANGED
|
@@ -19,8 +19,12 @@ var _events = require("../utils/events");
|
|
|
19
19
|
|
|
20
20
|
var _useMenu = _interopRequireDefault(require("./useMenu"));
|
|
21
21
|
|
|
22
|
+
var _dom = require("../utils/dom");
|
|
23
|
+
|
|
22
24
|
// Headless ARIA `menubar`
|
|
23
25
|
function Menubar(_ref) {
|
|
26
|
+
var _items$activeItemInde3;
|
|
27
|
+
|
|
24
28
|
var _ref$vertical = _ref.vertical,
|
|
25
29
|
vertical = _ref$vertical === void 0 ? false : _ref$vertical,
|
|
26
30
|
children = _ref.children,
|
|
@@ -35,7 +39,8 @@ function Menubar(_ref) {
|
|
|
35
39
|
var menubarElementRef = (0, _react.useRef)(null);
|
|
36
40
|
var onFocus = (0, _react.useCallback)(function (event) {
|
|
37
41
|
// Focus moves inside Menubar
|
|
38
|
-
if ((0, _events.isFocusEntering)(event)
|
|
42
|
+
if ((0, _events.isFocusEntering)(event) && // Skip if focus is moving to a focusable element within this menu
|
|
43
|
+
!(event.target !== event.currentTarget && (0, _dom.isFocusableElement)(event.target))) {
|
|
39
44
|
if (activeItemIndex === null) {
|
|
40
45
|
dispatch({
|
|
41
46
|
type: _MenuContext.MenuActionTypes.MoveFocus,
|
|
@@ -58,7 +63,9 @@ function Menubar(_ref) {
|
|
|
58
63
|
rtl = _useCustom.rtl;
|
|
59
64
|
|
|
60
65
|
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
61
|
-
var
|
|
66
|
+
var _items$activeItemInde, _items$activeItemInde2;
|
|
67
|
+
|
|
68
|
+
var activeItemElement = (0, _isNil.default)(activeItemIndex) ? null : (_items$activeItemInde = (_items$activeItemInde2 = items[activeItemIndex]) === null || _items$activeItemInde2 === void 0 ? void 0 : _items$activeItemInde2.element) !== null && _items$activeItemInde !== void 0 ? _items$activeItemInde : null;
|
|
62
69
|
|
|
63
70
|
switch (true) {
|
|
64
71
|
case !vertical && !rtl && event.key === _utils.KEY_VALUES.RIGHT:
|
|
@@ -138,7 +145,7 @@ function Menubar(_ref) {
|
|
|
138
145
|
onBlur: onBlur,
|
|
139
146
|
onKeyDown: onKeyDown,
|
|
140
147
|
onClick: onClick,
|
|
141
|
-
'aria-activedescendant': (0, _isNil.default)(activeItemIndex) ? undefined : items[activeItemIndex].element.id,
|
|
148
|
+
'aria-activedescendant': (0, _isNil.default)(activeItemIndex) ? undefined : (_items$activeItemInde3 = items[activeItemIndex]) === null || _items$activeItemInde3 === void 0 ? void 0 : _items$activeItemInde3.element.id,
|
|
142
149
|
'aria-orientation': vertical ? 'vertical' : undefined // implicitly set 'horizontal'
|
|
143
150
|
|
|
144
151
|
}, menubarElementRef));
|
package/cjs/utils/dom.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function isFocusableElement(element:
|
|
1
|
+
export declare function isFocusableElement(element: Element): boolean;
|
package/dist/rsuite-rtl.css
CHANGED
|
@@ -2782,7 +2782,7 @@ tbody.rs-anim-collapse.rs-anim-in {
|
|
|
2782
2782
|
line-height: 0;
|
|
2783
2783
|
}
|
|
2784
2784
|
.rs-btn-toolbar > :not(:first-child):not(.rs-btn-block) {
|
|
2785
|
-
margin-right:
|
|
2785
|
+
margin-right: 10px;
|
|
2786
2786
|
}
|
|
2787
2787
|
.rs-picker-subtle .picker-subtle-toggle {
|
|
2788
2788
|
position: relative;
|