@mui/x-date-pickers 6.0.2 → 6.0.3
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/AdapterDateFns/index.js +1 -0
- package/AdapterDateFnsJalali/index.js +1 -0
- package/AdapterDayjs/index.js +5 -0
- package/AdapterLuxon/index.js +1 -0
- package/AdapterMoment/index.js +5 -0
- package/AdapterMomentHijri/index.js +5 -0
- package/AdapterMomentJalaali/index.js +5 -0
- package/CHANGELOG.md +58 -5
- package/DateField/DateField.js +4 -0
- package/DateField/DateField.types.d.ts +2 -2
- package/DateField/useDateField.js +5 -3
- package/DateTimeField/DateTimeField.js +4 -0
- package/DateTimeField/DateTimeField.types.d.ts +2 -2
- package/DateTimeField/useDateTimeField.js +5 -3
- package/PickersDay/PickersDay.js +4 -4
- package/TimeField/TimeField.js +4 -0
- package/TimeField/TimeField.types.d.ts +2 -2
- package/TimeField/useTimeField.js +5 -3
- package/index.d.ts +1 -6
- package/index.js +4 -2
- package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +5 -4
- package/internals/hooks/useField/index.d.ts +2 -2
- package/internals/hooks/useField/index.js +1 -1
- package/internals/hooks/useField/useField.d.ts +1 -1
- package/internals/hooks/useField/useField.js +54 -25
- package/internals/hooks/useField/useField.types.d.ts +24 -12
- package/internals/hooks/useField/useFieldState.d.ts +1 -2
- package/internals/hooks/useField/useFieldState.js +1 -6
- package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +5 -4
- package/internals/hooks/usePicker/usePicker.d.ts +2 -1
- package/internals/hooks/usePicker/usePicker.types.d.ts +4 -3
- package/internals/hooks/usePicker/usePickerValue.d.ts +8 -8
- package/internals/hooks/usePicker/usePickerValue.js +7 -11
- package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +2 -1
- package/internals/index.d.ts +2 -2
- package/internals/index.js +2 -2
- package/internals/models/fields.d.ts +3 -3
- package/internals/utils/date-utils.d.ts +1 -0
- package/internals/utils/date-utils.js +6 -0
- package/internals/utils/valueManagers.js +4 -5
- package/legacy/AdapterDateFns/index.js +1 -0
- package/legacy/AdapterDateFnsJalali/index.js +1 -0
- package/legacy/AdapterDayjs/index.js +5 -0
- package/legacy/AdapterLuxon/index.js +1 -0
- package/legacy/AdapterMoment/index.js +5 -0
- package/legacy/AdapterMomentHijri/index.js +5 -0
- package/legacy/AdapterMomentJalaali/index.js +5 -0
- package/legacy/DateField/DateField.js +4 -0
- package/legacy/DateField/useDateField.js +4 -2
- package/legacy/DateTimeField/DateTimeField.js +4 -0
- package/legacy/DateTimeField/useDateTimeField.js +4 -2
- package/legacy/PickersDay/PickersDay.js +4 -4
- package/legacy/TimeField/TimeField.js +4 -0
- package/legacy/TimeField/useTimeField.js +4 -2
- package/legacy/index.js +4 -2
- package/legacy/internals/hooks/useField/index.js +1 -1
- package/legacy/internals/hooks/useField/useField.js +79 -39
- package/legacy/internals/hooks/useField/useFieldState.js +1 -8
- package/legacy/internals/hooks/usePicker/usePickerValue.js +9 -13
- package/legacy/internals/index.js +2 -2
- package/legacy/internals/utils/date-utils.js +6 -0
- package/legacy/internals/utils/valueManagers.js +3 -8
- package/legacy/locales/faIR.js +33 -16
- package/legacy/locales/nlNL.js +12 -10
- package/legacy/locales/plPL.js +12 -10
- package/legacy/models/index.js +1 -0
- package/legacy/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
- package/locales/faIR.js +13 -16
- package/locales/nlNL.js +8 -10
- package/locales/plPL.js +8 -10
- package/models/index.d.ts +6 -0
- package/models/index.js +1 -0
- package/models/package.json +6 -0
- package/modern/AdapterDateFns/index.js +1 -0
- package/modern/AdapterDateFnsJalali/index.js +1 -0
- package/modern/AdapterDayjs/index.js +5 -0
- package/modern/AdapterLuxon/index.js +1 -0
- package/modern/AdapterMoment/index.js +5 -0
- package/modern/AdapterMomentHijri/index.js +5 -0
- package/modern/AdapterMomentJalaali/index.js +5 -0
- package/modern/DateField/DateField.js +4 -0
- package/modern/DateField/useDateField.js +5 -3
- package/modern/DateTimeField/DateTimeField.js +4 -0
- package/modern/DateTimeField/useDateTimeField.js +5 -3
- package/modern/PickersDay/PickersDay.js +4 -4
- package/modern/TimeField/TimeField.js +4 -0
- package/modern/TimeField/useTimeField.js +5 -3
- package/modern/index.js +4 -2
- package/modern/internals/hooks/useField/index.js +1 -1
- package/modern/internals/hooks/useField/useField.js +53 -25
- package/modern/internals/hooks/useField/useFieldState.js +1 -6
- package/modern/internals/hooks/usePicker/usePickerValue.js +7 -11
- package/modern/internals/index.js +2 -2
- package/modern/internals/utils/date-utils.js +6 -0
- package/modern/internals/utils/valueManagers.js +4 -5
- package/modern/locales/faIR.js +13 -16
- package/modern/locales/nlNL.js +8 -10
- package/modern/locales/plPL.js +8 -10
- package/modern/models/index.js +1 -0
- package/modern/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
- package/node/AdapterDateFns/index.js +1 -0
- package/node/AdapterDateFnsJalali/index.js +1 -0
- package/node/AdapterDayjs/index.js +5 -0
- package/node/AdapterLuxon/index.js +1 -0
- package/node/AdapterMoment/index.js +5 -0
- package/node/AdapterMomentHijri/index.js +5 -0
- package/node/AdapterMomentJalaali/index.js +5 -0
- package/node/DateField/DateField.js +4 -0
- package/node/DateField/useDateField.js +5 -3
- package/node/DateTimeField/DateTimeField.js +4 -0
- package/node/DateTimeField/useDateTimeField.js +5 -3
- package/node/PickersDay/PickersDay.js +4 -4
- package/node/TimeField/TimeField.js +4 -0
- package/node/TimeField/useTimeField.js +5 -3
- package/node/index.js +14 -2
- package/node/internals/hooks/useField/index.js +0 -6
- package/node/internals/hooks/useField/useField.js +52 -24
- package/node/internals/hooks/useField/useFieldState.js +1 -6
- package/node/internals/hooks/usePicker/usePickerValue.js +7 -11
- package/node/internals/index.js +6 -6
- package/node/internals/utils/date-utils.js +9 -2
- package/node/internals/utils/valueManagers.js +2 -3
- package/node/locales/faIR.js +13 -16
- package/node/locales/nlNL.js +8 -10
- package/node/locales/plPL.js +8 -10
- package/node/models/index.js +5 -0
- package/node/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
- package/package.json +2 -2
- package/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
|
@@ -45,16 +45,16 @@ const styleArg = ({
|
|
|
45
45
|
height: _dimensions.DAY_SIZE,
|
|
46
46
|
borderRadius: '50%',
|
|
47
47
|
padding: 0,
|
|
48
|
-
//
|
|
49
|
-
backgroundColor:
|
|
48
|
+
// explicitly setting to `transparent` to avoid potentially getting impacted by change from the overridden component
|
|
49
|
+
backgroundColor: 'transparent',
|
|
50
50
|
color: (theme.vars || theme).palette.text.primary,
|
|
51
51
|
'@media (pointer: fine)': {
|
|
52
52
|
'&:hover': {
|
|
53
|
-
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.
|
|
53
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.hoverOpacity)
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
56
|
'&:focus': {
|
|
57
|
-
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.
|
|
57
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.focusOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.focusOpacity),
|
|
58
58
|
[`&.${_pickersDayClasses.pickersDayClasses.selected}`]: {
|
|
59
59
|
willChange: 'background-color',
|
|
60
60
|
backgroundColor: (theme.vars || theme).palette.primary.dark
|
|
@@ -289,6 +289,10 @@ process.env.NODE_ENV !== "production" ? TimeField.propTypes = {
|
|
|
289
289
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
290
290
|
*/
|
|
291
291
|
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
|
|
292
|
+
/**
|
|
293
|
+
* The ref object used to imperatively interact with the field.
|
|
294
|
+
*/
|
|
295
|
+
unstableFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
|
|
292
296
|
/**
|
|
293
297
|
* The selected value.
|
|
294
298
|
* Used when the component is controlled.
|
|
@@ -11,7 +11,7 @@ var _valueManagers = require("../internals/utils/valueManagers");
|
|
|
11
11
|
var _useField = require("../internals/hooks/useField");
|
|
12
12
|
var _useTimeValidation = require("../internals/hooks/validation/useTimeValidation");
|
|
13
13
|
var _useUtils = require("../internals/hooks/useUtils");
|
|
14
|
-
const _excluded = ["value", "defaultValue", "format", "onChange", "readOnly", "onError", "disableFuture", "disablePast", "minTime", "maxTime", "minutesStep", "shouldDisableClock", "shouldDisableTime", "disableIgnoringDatePartForTimeValidation", "selectedSections", "onSelectedSectionsChange", "ampm"];
|
|
14
|
+
const _excluded = ["value", "defaultValue", "format", "onChange", "readOnly", "onError", "disableFuture", "disablePast", "minTime", "maxTime", "minutesStep", "shouldDisableClock", "shouldDisableTime", "disableIgnoringDatePartForTimeValidation", "selectedSections", "onSelectedSectionsChange", "ampm", "unstableFieldRef"];
|
|
15
15
|
const useDefaultizedTimeField = props => {
|
|
16
16
|
const utils = (0, _useUtils.useUtils)();
|
|
17
17
|
const ampm = props.ampm ?? utils.is12HourCycleInCurrentLocale();
|
|
@@ -44,7 +44,8 @@ const useTimeField = ({
|
|
|
44
44
|
disableIgnoringDatePartForTimeValidation,
|
|
45
45
|
selectedSections,
|
|
46
46
|
onSelectedSectionsChange,
|
|
47
|
-
ampm
|
|
47
|
+
ampm,
|
|
48
|
+
unstableFieldRef
|
|
48
49
|
} = _useDefaultizedTimeFi,
|
|
49
50
|
other = (0, _objectWithoutPropertiesLoose2.default)(_useDefaultizedTimeFi, _excluded);
|
|
50
51
|
return (0, _useField.useField)({
|
|
@@ -67,7 +68,8 @@ const useTimeField = ({
|
|
|
67
68
|
disableIgnoringDatePartForTimeValidation,
|
|
68
69
|
selectedSections,
|
|
69
70
|
onSelectedSectionsChange,
|
|
70
|
-
ampm
|
|
71
|
+
ampm,
|
|
72
|
+
unstableFieldRef
|
|
71
73
|
},
|
|
72
74
|
valueManager: _valueManagers.singleItemValueManager,
|
|
73
75
|
fieldValueManager: _valueManagers.singleItemFieldValueManager,
|
package/node/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-date-pickers v6.0.
|
|
2
|
+
* @mui/x-date-pickers v6.0.3
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
@@ -355,4 +355,16 @@ Object.keys(_PickersShortcuts).forEach(function (key) {
|
|
|
355
355
|
}
|
|
356
356
|
});
|
|
357
357
|
});
|
|
358
|
-
var _utils = require("./internals/utils/utils");
|
|
358
|
+
var _utils = require("./internals/utils/utils");
|
|
359
|
+
var _models = require("./models");
|
|
360
|
+
Object.keys(_models).forEach(function (key) {
|
|
361
|
+
if (key === "default" || key === "__esModule") return;
|
|
362
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
363
|
+
if (key in exports && exports[key] === _models[key]) return;
|
|
364
|
+
Object.defineProperty(exports, key, {
|
|
365
|
+
enumerable: true,
|
|
366
|
+
get: function () {
|
|
367
|
+
return _models[key];
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
});
|
|
@@ -15,12 +15,6 @@ Object.defineProperty(exports, "createDateStrForInputFromSections", {
|
|
|
15
15
|
return _useField2.createDateStrForInputFromSections;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
Object.defineProperty(exports, "getSectionOrder", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _useField2.getSectionOrder;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
18
|
Object.defineProperty(exports, "splitFormatIntoSections", {
|
|
25
19
|
enumerable: true,
|
|
26
20
|
get: function () {
|
|
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
12
12
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
13
13
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
14
|
+
var _styles = require("@mui/material/styles");
|
|
14
15
|
var _useValidation = require("../validation/useValidation");
|
|
15
16
|
var _useUtils = require("../useUtils");
|
|
16
17
|
var _useField = require("./useField.utils");
|
|
@@ -31,7 +32,6 @@ const useField = params => {
|
|
|
31
32
|
updateSectionValue,
|
|
32
33
|
updateValueFromValueStr,
|
|
33
34
|
setTempAndroidValueStr,
|
|
34
|
-
sectionOrder,
|
|
35
35
|
sectionsValueBoundaries
|
|
36
36
|
} = (0, _useFieldState.useFieldState)(params);
|
|
37
37
|
const {
|
|
@@ -47,7 +47,8 @@ const useField = params => {
|
|
|
47
47
|
inputRef: inputRefProp,
|
|
48
48
|
internalProps,
|
|
49
49
|
internalProps: {
|
|
50
|
-
readOnly = false
|
|
50
|
+
readOnly = false,
|
|
51
|
+
unstableFieldRef
|
|
51
52
|
},
|
|
52
53
|
forwardedProps: {
|
|
53
54
|
onClick,
|
|
@@ -66,6 +67,8 @@ const useField = params => {
|
|
|
66
67
|
const inputRef = React.useRef(null);
|
|
67
68
|
const handleRef = (0, _useForkRef.default)(inputRefProp, inputRef);
|
|
68
69
|
const focusTimeoutRef = React.useRef(undefined);
|
|
70
|
+
const theme = (0, _styles.useTheme)();
|
|
71
|
+
const sectionOrder = React.useMemo(() => (0, _useField.getSectionOrder)(state.sections, theme.direction === 'rtl'), [theme.direction, state.sections]);
|
|
69
72
|
const syncSelectionFromDOM = () => {
|
|
70
73
|
if (readOnly) {
|
|
71
74
|
setSelectedSections(null);
|
|
@@ -152,27 +155,32 @@ const useField = params => {
|
|
|
152
155
|
updateValueFromValueStr(cleanValueStr);
|
|
153
156
|
return;
|
|
154
157
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
let keyPressed;
|
|
159
|
+
if (selectedSectionIndexes.startIndex === 0 && selectedSectionIndexes.endIndex === state.sections.length - 1) {
|
|
160
|
+
keyPressed = cleanValueStr;
|
|
161
|
+
} else {
|
|
162
|
+
const prevValueStr = (0, _useField.cleanString)(fieldValueManager.getValueStrFromSections(state.sections));
|
|
163
|
+
let startOfDiffIndex = -1;
|
|
164
|
+
let endOfDiffIndex = -1;
|
|
165
|
+
for (let i = 0; i < prevValueStr.length; i += 1) {
|
|
166
|
+
if (startOfDiffIndex === -1 && prevValueStr[i] !== cleanValueStr[i]) {
|
|
167
|
+
startOfDiffIndex = i;
|
|
168
|
+
}
|
|
169
|
+
if (endOfDiffIndex === -1 && prevValueStr[prevValueStr.length - i - 1] !== cleanValueStr[cleanValueStr.length - i - 1]) {
|
|
170
|
+
endOfDiffIndex = i;
|
|
171
|
+
}
|
|
161
172
|
}
|
|
162
|
-
|
|
163
|
-
|
|
173
|
+
const activeSection = state.sections[selectedSectionIndexes.startIndex];
|
|
174
|
+
const hasDiffOutsideOfActiveSection = startOfDiffIndex < activeSection.start || prevValueStr.length - endOfDiffIndex - 1 > activeSection.end;
|
|
175
|
+
if (hasDiffOutsideOfActiveSection) {
|
|
176
|
+
// TODO: Support if the new date is valid
|
|
177
|
+
return;
|
|
164
178
|
}
|
|
165
|
-
}
|
|
166
|
-
const activeSection = state.sections[selectedSectionIndexes.startIndex];
|
|
167
|
-
const hasDiffOutsideOfActiveSection = startOfDiffIndex < activeSection.start || prevValueStr.length - endOfDiffIndex - 1 > activeSection.end;
|
|
168
|
-
if (hasDiffOutsideOfActiveSection) {
|
|
169
|
-
// TODO: Support if the new date is valid
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
179
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
180
|
+
// The active section being selected, the browser has replaced its value with the key pressed by the user.
|
|
181
|
+
const activeSectionEndRelativeToNewValue = cleanValueStr.length - prevValueStr.length + activeSection.end - (0, _useField.cleanString)(activeSection.endSeparator || '').length;
|
|
182
|
+
keyPressed = cleanValueStr.slice(activeSection.start, activeSectionEndRelativeToNewValue);
|
|
183
|
+
}
|
|
176
184
|
if ((0, _useField.isAndroid)() && keyPressed.length === 0) {
|
|
177
185
|
setTempAndroidValueStr(valueStr);
|
|
178
186
|
return;
|
|
@@ -268,9 +276,11 @@ const useField = params => {
|
|
|
268
276
|
});
|
|
269
277
|
(0, _useEnhancedEffect.default)(() => {
|
|
270
278
|
if (selectedSectionIndexes == null) {
|
|
271
|
-
if (inputRef.current.
|
|
272
|
-
// Ensure input
|
|
273
|
-
|
|
279
|
+
if (inputRef.current.scrollLeft) {
|
|
280
|
+
// Ensure that input content is not marked as selected.
|
|
281
|
+
// setting selection range to 0 causes issues in Safari.
|
|
282
|
+
// https://bugs.webkit.org/show_bug.cgi?id=224425
|
|
283
|
+
inputRef.current.scrollLeft = 0;
|
|
274
284
|
}
|
|
275
285
|
return;
|
|
276
286
|
}
|
|
@@ -283,7 +293,11 @@ const useField = params => {
|
|
|
283
293
|
selectionEnd += lastSelectedSection.endSeparator.length;
|
|
284
294
|
}
|
|
285
295
|
if (selectionStart !== inputRef.current.selectionStart || selectionEnd !== inputRef.current.selectionEnd) {
|
|
296
|
+
// Fix scroll jumping on iOS browser: https://github.com/mui/mui-x/issues/8321
|
|
297
|
+
const currentScrollTop = inputRef.current.scrollTop;
|
|
286
298
|
inputRef.current.setSelectionRange(selectionStart, selectionEnd);
|
|
299
|
+
// Even reading this variable seems to do the trick, but also setting it just to make use of it
|
|
300
|
+
inputRef.current.scrollTop = currentScrollTop;
|
|
287
301
|
}
|
|
288
302
|
});
|
|
289
303
|
const validationError = (0, _useValidation.useValidation)((0, _extends2.default)({}, internalProps, {
|
|
@@ -327,7 +341,21 @@ const useField = params => {
|
|
|
327
341
|
return 'tel';
|
|
328
342
|
}, [selectedSectionIndexes, state.sections]);
|
|
329
343
|
const inputHasFocus = inputRef.current && inputRef.current === (0, _utils.getActiveElement)(document);
|
|
330
|
-
const shouldShowPlaceholder = !inputHasFocus &&
|
|
344
|
+
const shouldShowPlaceholder = !inputHasFocus && valueManager.areValuesEqual(utils, state.value, valueManager.emptyValue);
|
|
345
|
+
React.useImperativeHandle(unstableFieldRef, () => ({
|
|
346
|
+
getSections: () => state.sections,
|
|
347
|
+
getActiveSectionIndex: () => {
|
|
348
|
+
const browserStartIndex = inputRef.current.selectionStart ?? 0;
|
|
349
|
+
const browserEndIndex = inputRef.current.selectionEnd ?? 0;
|
|
350
|
+
if (browserStartIndex === 0 && browserEndIndex === 0) {
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
const nextSectionIndex = browserStartIndex <= state.sections[0].startInInput ? 1 // Special case if browser index is in invisible characters at the beginning.
|
|
354
|
+
: state.sections.findIndex(section => section.startInInput - section.startSeparator.length > browserStartIndex);
|
|
355
|
+
return nextSectionIndex === -1 ? state.sections.length - 1 : nextSectionIndex - 1;
|
|
356
|
+
},
|
|
357
|
+
setSelectedSections: activeSectionIndex => setSelectedSections(activeSectionIndex)
|
|
358
|
+
}));
|
|
331
359
|
return (0, _extends2.default)({
|
|
332
360
|
placeholder: state.placeholder,
|
|
333
361
|
autoComplete: 'off'
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useFieldState = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _styles = require("@mui/material/styles");
|
|
11
10
|
var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
|
|
12
11
|
var _useUtils = require("../useUtils");
|
|
13
12
|
var _useField = require("./useField.utils");
|
|
@@ -17,8 +16,6 @@ const useFieldState = params => {
|
|
|
17
16
|
const utils = (0, _useUtils.useUtils)();
|
|
18
17
|
const localeText = (0, _useUtils.useLocaleText)();
|
|
19
18
|
const adapter = (0, _useUtils.useLocalizationContext)();
|
|
20
|
-
const theme = (0, _styles.useTheme)();
|
|
21
|
-
const isRTL = theme.direction === 'rtl';
|
|
22
19
|
const {
|
|
23
20
|
valueManager,
|
|
24
21
|
fieldValueManager,
|
|
@@ -37,7 +34,6 @@ const useFieldState = params => {
|
|
|
37
34
|
const firstDefaultValue = React.useRef(defaultValue);
|
|
38
35
|
const valueFromTheOutside = valueProp ?? firstDefaultValue.current ?? valueManager.emptyValue;
|
|
39
36
|
const sectionsValueBoundaries = React.useMemo(() => (0, _useField.getSectionsBoundaries)(utils), [utils]);
|
|
40
|
-
const sectionOrder = React.useMemo(() => fieldValueManager.getSectionOrder(utils, localeText, format, isRTL), [fieldValueManager, format, isRTL, localeText, utils]);
|
|
41
37
|
const placeholder = React.useMemo(() => fieldValueManager.getValueStrFromSections(fieldValueManager.getSectionsFromValue(utils, localeText, null, valueManager.emptyValue, format)), [fieldValueManager, format, localeText, utils, valueManager.emptyValue]);
|
|
42
38
|
const [state, setState] = React.useState(() => {
|
|
43
39
|
const sections = fieldValueManager.getSectionsFromValue(utils, localeText, null, valueFromTheOutside, format);
|
|
@@ -225,7 +221,7 @@ const useFieldState = params => {
|
|
|
225
221
|
}));
|
|
226
222
|
React.useEffect(() => {
|
|
227
223
|
if (!valueManager.areValuesEqual(utils, state.value, valueFromTheOutside)) {
|
|
228
|
-
const sections = fieldValueManager.getSectionsFromValue(utils, localeText,
|
|
224
|
+
const sections = fieldValueManager.getSectionsFromValue(utils, localeText, null, valueFromTheOutside, format);
|
|
229
225
|
setState(prevState => (0, _extends2.default)({}, prevState, {
|
|
230
226
|
value: valueFromTheOutside,
|
|
231
227
|
referenceValue: fieldValueManager.updateReferenceValue(utils, valueFromTheOutside, prevState.referenceValue),
|
|
@@ -252,7 +248,6 @@ const useFieldState = params => {
|
|
|
252
248
|
updateSectionValue,
|
|
253
249
|
updateValueFromValueStr,
|
|
254
250
|
setTempAndroidValueStr,
|
|
255
|
-
sectionOrder,
|
|
256
251
|
sectionsValueBoundaries
|
|
257
252
|
};
|
|
258
253
|
};
|
|
@@ -34,13 +34,12 @@ const usePickerValue = ({
|
|
|
34
34
|
} = props;
|
|
35
35
|
const utils = (0, _useUtils.useUtils)();
|
|
36
36
|
const adapter = (0, _useUtils.useLocalizationContext)();
|
|
37
|
-
const [
|
|
37
|
+
const [value, setValue] = (0, _utils.unstable_useControlled)({
|
|
38
38
|
controlled: inValue,
|
|
39
39
|
default: defaultValue ?? valueManager.emptyValue,
|
|
40
40
|
name: 'usePickerValue',
|
|
41
41
|
state: 'value'
|
|
42
42
|
});
|
|
43
|
-
const value = React.useMemo(() => valueManager.cleanValue(utils, rawValue), [valueManager, utils, rawValue]);
|
|
44
43
|
const [selectedSections, setSelectedSections] = (0, _utils.unstable_useControlled)({
|
|
45
44
|
controlled: selectedSectionsProp,
|
|
46
45
|
default: null,
|
|
@@ -90,7 +89,7 @@ const usePickerValue = ({
|
|
|
90
89
|
}
|
|
91
90
|
}
|
|
92
91
|
});
|
|
93
|
-
if (
|
|
92
|
+
if (!params.skipOnChangeCall && !valueManager.areValuesEqual(utils, dateState.committed, params.value)) {
|
|
94
93
|
setValue(params.value);
|
|
95
94
|
if (onChange) {
|
|
96
95
|
const context = {
|
|
@@ -135,18 +134,14 @@ const usePickerValue = ({
|
|
|
135
134
|
// Reset all date in state to the empty value and close picker.
|
|
136
135
|
setDate({
|
|
137
136
|
value: valueManager.emptyValue,
|
|
138
|
-
action: 'acceptAndClose'
|
|
139
|
-
// force `onChange` in cases like input (value) === `Invalid date`
|
|
140
|
-
forceOnChangeCall: !valueManager.areValuesEqual(utils, value, valueManager.emptyValue)
|
|
137
|
+
action: 'acceptAndClose'
|
|
141
138
|
});
|
|
142
139
|
});
|
|
143
140
|
const handleAccept = (0, _useEventCallback.default)(() => {
|
|
144
141
|
// Set all date in state to equal the current draft value and close picker.
|
|
145
142
|
setDate({
|
|
146
143
|
value: dateState.draft,
|
|
147
|
-
action: 'acceptAndClose'
|
|
148
|
-
// force `onChange` in cases like input (value) === `Invalid date`
|
|
149
|
-
forceOnChangeCall: !valueManager.areValuesEqual(utils, dateState.committed, dateState.draft)
|
|
144
|
+
action: 'acceptAndClose'
|
|
150
145
|
});
|
|
151
146
|
});
|
|
152
147
|
const handleDismiss = (0, _useEventCallback.default)(() => {
|
|
@@ -239,8 +234,9 @@ const usePickerValue = ({
|
|
|
239
234
|
selectedSections,
|
|
240
235
|
onSelectedSectionsChange: handleFieldSelectedSectionsChange
|
|
241
236
|
};
|
|
237
|
+
const viewValue = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
|
|
242
238
|
const viewResponse = {
|
|
243
|
-
value:
|
|
239
|
+
value: viewValue,
|
|
244
240
|
onChange: handleChange,
|
|
245
241
|
onClose: handleClose,
|
|
246
242
|
open: isOpen,
|
|
@@ -257,7 +253,7 @@ const usePickerValue = ({
|
|
|
257
253
|
return Array.isArray(testedValue) ? validationResponse.every(v => v === null) : validationResponse === null;
|
|
258
254
|
};
|
|
259
255
|
const layoutResponse = (0, _extends2.default)({}, actions, {
|
|
260
|
-
value:
|
|
256
|
+
value: viewValue,
|
|
261
257
|
onChange: handleChangeAndCommit,
|
|
262
258
|
isValid
|
|
263
259
|
});
|
package/node/internals/index.js
CHANGED
|
@@ -75,6 +75,12 @@ Object.defineProperty(exports, "applyDefaultDate", {
|
|
|
75
75
|
return _dateUtils.applyDefaultDate;
|
|
76
76
|
}
|
|
77
77
|
});
|
|
78
|
+
Object.defineProperty(exports, "areDatesEqual", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _dateUtils.areDatesEqual;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
78
84
|
Object.defineProperty(exports, "buildDeprecatedPropsWarning", {
|
|
79
85
|
enumerable: true,
|
|
80
86
|
get: function () {
|
|
@@ -111,12 +117,6 @@ Object.defineProperty(exports, "getActiveElement", {
|
|
|
111
117
|
return _utils.getActiveElement;
|
|
112
118
|
}
|
|
113
119
|
});
|
|
114
|
-
Object.defineProperty(exports, "getSectionOrder", {
|
|
115
|
-
enumerable: true,
|
|
116
|
-
get: function () {
|
|
117
|
-
return _useField.getSectionOrder;
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
120
|
Object.defineProperty(exports, "onSpaceOrEnter", {
|
|
121
121
|
enumerable: true,
|
|
122
122
|
get: function () {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.replaceInvalidDateByNull = exports.findClosestEnabledDate = exports.clamp = exports.applyDefaultDate = void 0;
|
|
6
|
+
exports.replaceInvalidDateByNull = exports.findClosestEnabledDate = exports.clamp = exports.areDatesEqual = exports.applyDefaultDate = void 0;
|
|
7
7
|
const findClosestEnabledDate = ({
|
|
8
8
|
date,
|
|
9
9
|
disableFuture,
|
|
@@ -73,4 +73,11 @@ const applyDefaultDate = (utils, value, defaultValue) => {
|
|
|
73
73
|
}
|
|
74
74
|
return value;
|
|
75
75
|
};
|
|
76
|
-
exports.applyDefaultDate = applyDefaultDate;
|
|
76
|
+
exports.applyDefaultDate = applyDefaultDate;
|
|
77
|
+
const areDatesEqual = (utils, a, b) => {
|
|
78
|
+
if (!utils.isValid(a) && a != null && !utils.isValid(b) && b != null) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
return utils.isEqual(a, b);
|
|
82
|
+
};
|
|
83
|
+
exports.areDatesEqual = areDatesEqual;
|
|
@@ -10,7 +10,7 @@ const singleItemValueManager = {
|
|
|
10
10
|
emptyValue: null,
|
|
11
11
|
getTodayValue: utils => utils.date(),
|
|
12
12
|
cleanValue: _dateUtils.replaceInvalidDateByNull,
|
|
13
|
-
areValuesEqual:
|
|
13
|
+
areValuesEqual: _dateUtils.areDatesEqual,
|
|
14
14
|
isSameError: (a, b) => a === b,
|
|
15
15
|
defaultErrorState: null
|
|
16
16
|
};
|
|
@@ -35,7 +35,6 @@ const singleItemFieldValueManager = {
|
|
|
35
35
|
})
|
|
36
36
|
}),
|
|
37
37
|
parseValueStr: (valueStr, referenceValue, parseDate) => parseDate(valueStr.trim(), referenceValue),
|
|
38
|
-
hasError: error => error != null
|
|
39
|
-
getSectionOrder: (utils, localeText, format, isRTL) => (0, _useField.getSectionOrder)((0, _useField.splitFormatIntoSections)(utils, localeText, format, null), isRTL)
|
|
38
|
+
hasError: error => error != null
|
|
40
39
|
};
|
|
41
40
|
exports.singleItemFieldValueManager = singleItemFieldValueManager;
|
package/node/locales/faIR.js
CHANGED
|
@@ -32,28 +32,25 @@ const faIRPickers = {
|
|
|
32
32
|
minutesClockNumberText: minutes => `${minutes} دقیقه ها`,
|
|
33
33
|
secondsClockNumberText: seconds => `${seconds} ثانیه ها`,
|
|
34
34
|
// Calendar labels
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
calendarWeekNumberHeaderLabel: 'عدد هفته',
|
|
36
|
+
calendarWeekNumberHeaderText: '#',
|
|
37
|
+
calendarWeekNumberAriaLabelText: weekNumber => `هفته ${weekNumber}`,
|
|
38
|
+
calendarWeekNumberText: weekNumber => `${weekNumber}`,
|
|
40
39
|
// Open picker labels
|
|
41
40
|
openDatePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `تاریخ را انتخاب کنید، تاریخ انتخاب شده ${utils.format(value, 'fullDate')} می باشد` : 'تاریخ را انتخاب کنید',
|
|
42
41
|
openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `ساعت را انتخاب کنید، ساعت انتخاب شده ${utils.format(value, 'fullTime')} می باشد` : 'ساعت را انتخاب کنید',
|
|
43
42
|
// Table labels
|
|
44
43
|
timeTableLabel: 'انتخاب تاریخ',
|
|
45
|
-
dateTableLabel: 'انتخاب ساعت'
|
|
46
|
-
|
|
44
|
+
dateTableLabel: 'انتخاب ساعت',
|
|
47
45
|
// Field section placeholders
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
46
|
+
fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
|
|
47
|
+
fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
|
|
48
|
+
fieldDayPlaceholder: () => 'DD',
|
|
49
|
+
fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
|
|
50
|
+
fieldHoursPlaceholder: () => 'hh',
|
|
51
|
+
fieldMinutesPlaceholder: () => 'mm',
|
|
52
|
+
fieldSecondsPlaceholder: () => 'ss',
|
|
53
|
+
fieldMeridiemPlaceholder: () => 'aa'
|
|
56
54
|
};
|
|
57
|
-
|
|
58
55
|
const faIR = (0, _getPickersLocalization.getPickersLocalization)(faIRPickers);
|
|
59
56
|
exports.faIR = faIR;
|
package/node/locales/nlNL.js
CHANGED
|
@@ -22,22 +22,20 @@ const nlNLPickers = {
|
|
|
22
22
|
okButtonLabel: 'OK',
|
|
23
23
|
todayButtonLabel: 'Vandaag',
|
|
24
24
|
// Toolbar titles
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
datePickerToolbarTitle: 'Selecteer datum',
|
|
26
|
+
dateTimePickerToolbarTitle: 'Selecteer datum & tijd',
|
|
27
|
+
timePickerToolbarTitle: 'Selecteer tijd',
|
|
28
|
+
dateRangePickerToolbarTitle: 'Selecteer datumbereik',
|
|
30
29
|
// Clock labels
|
|
31
30
|
clockLabelText: (view, time, adapter) => `Selecteer ${view}. ${time === null ? 'Geen tijd geselecteerd' : `Geselecteerde tijd is ${adapter.format(time, 'fullTime')}`}`,
|
|
32
31
|
hoursClockNumberText: hours => `${hours} uren`,
|
|
33
32
|
minutesClockNumberText: minutes => `${minutes} minuten`,
|
|
34
33
|
secondsClockNumberText: seconds => `${seconds} seconden`,
|
|
35
34
|
// Calendar labels
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
calendarWeekNumberHeaderLabel: 'Weeknummer',
|
|
36
|
+
calendarWeekNumberHeaderText: '#',
|
|
37
|
+
calendarWeekNumberAriaLabelText: weekNumber => `Week ${weekNumber}`,
|
|
38
|
+
calendarWeekNumberText: weekNumber => `${weekNumber}`,
|
|
41
39
|
// Open picker labels
|
|
42
40
|
openDatePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Kies datum, geselecteerde datum is ${utils.format(value, 'fullDate')}` : 'Kies datum',
|
|
43
41
|
openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Kies tijd, geselecteerde tijd is ${utils.format(value, 'fullTime')}` : 'Kies tijd',
|
package/node/locales/plPL.js
CHANGED
|
@@ -22,22 +22,20 @@ const plPLPickers = {
|
|
|
22
22
|
okButtonLabel: 'Zatwierdź',
|
|
23
23
|
todayButtonLabel: 'Dzisiaj',
|
|
24
24
|
// Toolbar titles
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
datePickerToolbarTitle: 'Wybierz datę',
|
|
26
|
+
dateTimePickerToolbarTitle: 'Wybierz datę i czas',
|
|
27
|
+
timePickerToolbarTitle: 'Wybierz czas',
|
|
28
|
+
dateRangePickerToolbarTitle: 'Wybierz zakres dat',
|
|
30
29
|
// Clock labels
|
|
31
30
|
clockLabelText: (view, time, adapter) => `Select ${view}. ${time === null ? 'Nie wybrano czasu' : `Wybrany czas to ${adapter.format(time, 'fullTime')}`}`,
|
|
32
31
|
hoursClockNumberText: hours => `${hours} godzin`,
|
|
33
32
|
minutesClockNumberText: minutes => `${minutes} minut`,
|
|
34
33
|
secondsClockNumberText: seconds => `${seconds} sekund`,
|
|
35
34
|
// Calendar labels
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
calendarWeekNumberHeaderLabel: 'Numer tygodnia',
|
|
36
|
+
calendarWeekNumberHeaderText: '#',
|
|
37
|
+
calendarWeekNumberAriaLabelText: weekNumber => `Tydzień ${weekNumber}`,
|
|
38
|
+
calendarWeekNumberText: weekNumber => `${weekNumber}`,
|
|
41
39
|
// Open picker labels
|
|
42
40
|
openDatePickerDialogue: (value, utils) => value != null && utils.isValid(value) ? `Wybierz datę, obecnie wybrana data to ${utils.format(value, 'fullDate')}` : 'Wybierz datę',
|
|
43
41
|
openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Wybierz czas, obecnie wybrany czas to ${utils.format(value, 'fullTime')}` : 'Wybierz czas',
|
|
@@ -96,7 +96,7 @@ const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
|
|
|
96
96
|
(0, _chai.expect)(onAccept.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
|
|
97
97
|
(0, _chai.expect)(onClose.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
|
|
98
98
|
});
|
|
99
|
-
it('should not select
|
|
99
|
+
it('should not select input content after closing on mobile', () => {
|
|
100
100
|
if (pickerParams.variant !== 'mobile') {
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
@@ -112,8 +112,7 @@ const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
|
|
|
112
112
|
} else {
|
|
113
113
|
textbox = (0, _pickersUtils.getTextbox)();
|
|
114
114
|
}
|
|
115
|
-
(0, _chai.expect)(textbox.
|
|
116
|
-
(0, _chai.expect)(textbox.selectionEnd).to.be.equal(0);
|
|
115
|
+
(0, _chai.expect)(textbox.scrollLeft).to.be.equal(0);
|
|
117
116
|
});
|
|
118
117
|
it('should call onChange, onClose and onAccept when selecting a value and `props.closeOnSelect` is true', () => {
|
|
119
118
|
const onChange = (0, _sinon.spy)();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-date-pickers",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.3",
|
|
4
4
|
"description": "The community edition of the date picker components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"directory": "packages/x-date-pickers"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@babel/runtime": "^7.
|
|
36
|
+
"@babel/runtime": "^7.21.0",
|
|
37
37
|
"@date-io/core": "^2.16.0",
|
|
38
38
|
"@date-io/date-fns": "^2.16.0",
|
|
39
39
|
"@date-io/date-fns-jalali": "^2.16.0",
|
|
@@ -87,7 +87,7 @@ export const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
|
|
|
87
87
|
expect(onAccept.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
|
|
88
88
|
expect(onClose.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
|
|
89
89
|
});
|
|
90
|
-
it('should not select
|
|
90
|
+
it('should not select input content after closing on mobile', () => {
|
|
91
91
|
if (pickerParams.variant !== 'mobile') {
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
@@ -103,8 +103,7 @@ export const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
|
|
|
103
103
|
} else {
|
|
104
104
|
textbox = getTextbox();
|
|
105
105
|
}
|
|
106
|
-
expect(textbox.
|
|
107
|
-
expect(textbox.selectionEnd).to.be.equal(0);
|
|
106
|
+
expect(textbox.scrollLeft).to.be.equal(0);
|
|
108
107
|
});
|
|
109
108
|
it('should call onChange, onClose and onAccept when selecting a value and `props.closeOnSelect` is true', () => {
|
|
110
109
|
const onChange = spy();
|