Added Statistics calculation
Statistics now show calculated values
This commit is contained in:
parent
fe87374e47
commit
fc0f69dacb
2147 changed files with 141321 additions and 39 deletions
2
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useOrientation.d.ts
generated
vendored
Normal file
2
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useOrientation.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
import { DateOrTimeViewWithMeridiem, PickerOrientation } from "../../../models/index.js";
|
||||
export declare function useOrientation(views: readonly DateOrTimeViewWithMeridiem[], customOrientation: PickerOrientation | undefined): PickerOrientation;
|
||||
43
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useOrientation.js
generated
vendored
Normal file
43
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useOrientation.js
generated
vendored
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
"use strict";
|
||||
'use client';
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
||||
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.useOrientation = useOrientation;
|
||||
var React = _interopRequireWildcard(require("react"));
|
||||
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
||||
var _utils = require("../../../utils/utils");
|
||||
function getOrientation() {
|
||||
if (typeof window === 'undefined') {
|
||||
return 'portrait';
|
||||
}
|
||||
if (window.screen && window.screen.orientation && window.screen.orientation.angle) {
|
||||
return Math.abs(window.screen.orientation.angle) === 90 ? 'landscape' : 'portrait';
|
||||
}
|
||||
|
||||
// Support IOS safari
|
||||
if (window.orientation) {
|
||||
return Math.abs(Number(window.orientation)) === 90 ? 'landscape' : 'portrait';
|
||||
}
|
||||
return 'portrait';
|
||||
}
|
||||
function useOrientation(views, customOrientation) {
|
||||
const [orientation, setOrientation] = React.useState(getOrientation);
|
||||
(0, _useEnhancedEffect.default)(() => {
|
||||
const eventHandler = () => {
|
||||
setOrientation(getOrientation());
|
||||
};
|
||||
window.addEventListener('orientationchange', eventHandler);
|
||||
return () => {
|
||||
window.removeEventListener('orientationchange', eventHandler);
|
||||
};
|
||||
}, []);
|
||||
if ((0, _utils.arrayIncludes)(views, ['hours', 'minutes', 'seconds'])) {
|
||||
// could not display 13:34:44 in landscape mode
|
||||
return 'portrait';
|
||||
}
|
||||
return customOrientation ?? orientation;
|
||||
}
|
||||
21
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useValueAndOpenStates.d.ts
generated
vendored
Normal file
21
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useValueAndOpenStates.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import * as React from 'react';
|
||||
import { DateOrTimeViewWithMeridiem, PickerValidValue, PickerValueManager } from "../../../models/index.js";
|
||||
import { PickerSelectionState, UsePickerProps, UsePickerState } from "../usePicker.types.js";
|
||||
import { InferError } from "../../../../models/index.js";
|
||||
import { SetValueActionOptions } from "../../../components/PickerProvider.js";
|
||||
import { Validator } from "../../../../validation/index.js";
|
||||
export declare function useValueAndOpenStates<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>>(parameters: UsePickerDateStateParameters<TValue, TView, TExternalProps>): {
|
||||
timezone: string;
|
||||
state: UsePickerState<TValue>;
|
||||
setValue: (newValue: TValue, options?: SetValueActionOptions<InferError<TExternalProps>>) => void;
|
||||
setValueFromView: (newValue: TValue, selectionState?: PickerSelectionState) => void;
|
||||
setOpen: (action: React.SetStateAction<boolean>) => void;
|
||||
value: TValue;
|
||||
viewValue: TValue;
|
||||
};
|
||||
interface UsePickerDateStateParameters<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>> {
|
||||
props: TExternalProps;
|
||||
valueManager: PickerValueManager<TValue, InferError<TExternalProps>>;
|
||||
validator: Validator<TValue, InferError<TExternalProps>, TExternalProps>;
|
||||
}
|
||||
export {};
|
||||
201
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useValueAndOpenStates.js
generated
vendored
Normal file
201
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/hooks/useValueAndOpenStates.js
generated
vendored
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
"use strict";
|
||||
'use client';
|
||||
|
||||
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.useValueAndOpenStates = useValueAndOpenStates;
|
||||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
||||
var React = _interopRequireWildcard(require("react"));
|
||||
var _warning = require("@mui/x-internals/warning");
|
||||
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
||||
var _useControlledValue = require("../../useControlledValue");
|
||||
var _usePickerAdapter = require("../../../../hooks/usePickerAdapter");
|
||||
var _validation = require("../../../../validation");
|
||||
function useValueAndOpenStates(parameters) {
|
||||
const {
|
||||
props,
|
||||
valueManager,
|
||||
validator
|
||||
} = parameters;
|
||||
const {
|
||||
value: valueProp,
|
||||
defaultValue: defaultValueProp,
|
||||
onChange,
|
||||
referenceDate,
|
||||
timezone: timezoneProp,
|
||||
onAccept,
|
||||
closeOnSelect,
|
||||
open: openProp,
|
||||
onOpen,
|
||||
onClose
|
||||
} = props;
|
||||
const {
|
||||
current: defaultValue
|
||||
} = React.useRef(defaultValueProp);
|
||||
const {
|
||||
current: isValueControlled
|
||||
} = React.useRef(valueProp !== undefined);
|
||||
const {
|
||||
current: isOpenControlled
|
||||
} = React.useRef(openProp !== undefined);
|
||||
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
if (props.renderInput != null) {
|
||||
(0, _warning.warnOnce)(['MUI X: The `renderInput` prop has been removed in version 6.0 of the Date and Time Pickers.', 'You can replace it with the `textField` component slot in most cases.', 'For more information, please have a look at the migration guide (https://mui.com/x/migration/migration-pickers-v5/#input-renderer-required-in-v5).']);
|
||||
}
|
||||
}
|
||||
|
||||
/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
React.useEffect(() => {
|
||||
if (isValueControlled !== (valueProp !== undefined)) {
|
||||
console.error([`MUI X: A component is changing the ${isValueControlled ? '' : 'un'}controlled value of a Picker to be ${isValueControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled value` + 'for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
|
||||
}
|
||||
}, [valueProp]);
|
||||
React.useEffect(() => {
|
||||
if (!isValueControlled && defaultValue !== defaultValueProp) {
|
||||
console.error([`MUI X: A component is changing the defaultValue of an uncontrolled Picker after being initialized. ` + `To suppress this warning opt to use a controlled value.`].join('\n'));
|
||||
}
|
||||
}, [JSON.stringify(defaultValue)]);
|
||||
}
|
||||
/* eslint-enable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
|
||||
|
||||
const {
|
||||
timezone,
|
||||
value,
|
||||
handleValueChange
|
||||
} = (0, _useControlledValue.useControlledValue)({
|
||||
name: 'a picker component',
|
||||
timezone: timezoneProp,
|
||||
value: valueProp,
|
||||
defaultValue,
|
||||
referenceDate,
|
||||
onChange,
|
||||
valueManager
|
||||
});
|
||||
const [state, setState] = React.useState(() => ({
|
||||
open: false,
|
||||
lastExternalValue: value,
|
||||
clockShallowValue: undefined,
|
||||
lastCommittedValue: value,
|
||||
hasBeenModifiedSinceMount: false
|
||||
}));
|
||||
const {
|
||||
getValidationErrorForNewValue
|
||||
} = (0, _validation.useValidation)({
|
||||
props,
|
||||
validator,
|
||||
timezone,
|
||||
value,
|
||||
onError: props.onError
|
||||
});
|
||||
const setOpen = (0, _useEventCallback.default)(action => {
|
||||
const newOpen = typeof action === 'function' ? action(state.open) : action;
|
||||
if (!isOpenControlled) {
|
||||
setState(prevState => (0, _extends2.default)({}, prevState, {
|
||||
open: newOpen
|
||||
}));
|
||||
}
|
||||
if (newOpen && onOpen) {
|
||||
onOpen();
|
||||
}
|
||||
if (!newOpen) {
|
||||
onClose?.();
|
||||
}
|
||||
});
|
||||
const setValue = (0, _useEventCallback.default)((newValue, options) => {
|
||||
const {
|
||||
changeImportance = 'accept',
|
||||
skipPublicationIfPristine = false,
|
||||
validationError,
|
||||
shortcut,
|
||||
shouldClose = changeImportance === 'accept'
|
||||
} = options ?? {};
|
||||
let shouldFireOnChange;
|
||||
let shouldFireOnAccept;
|
||||
if (!skipPublicationIfPristine && !isValueControlled && !state.hasBeenModifiedSinceMount) {
|
||||
// If the value is not controlled and the value has never been modified before,
|
||||
// Then clicking on any value (including the one equal to `defaultValue`) should call `onChange` and `onAccept`
|
||||
shouldFireOnChange = true;
|
||||
shouldFireOnAccept = changeImportance === 'accept';
|
||||
} else {
|
||||
shouldFireOnChange = !valueManager.areValuesEqual(adapter, newValue, value);
|
||||
shouldFireOnAccept = changeImportance === 'accept' && !valueManager.areValuesEqual(adapter, newValue, state.lastCommittedValue);
|
||||
}
|
||||
setState(prevState => (0, _extends2.default)({}, prevState, {
|
||||
// We reset the shallow value whenever we fire onChange.
|
||||
clockShallowValue: shouldFireOnChange ? undefined : prevState.clockShallowValue,
|
||||
lastCommittedValue: shouldFireOnAccept ? newValue : prevState.lastCommittedValue,
|
||||
hasBeenModifiedSinceMount: true
|
||||
}));
|
||||
let cachedContext = null;
|
||||
const getContext = () => {
|
||||
if (!cachedContext) {
|
||||
cachedContext = {
|
||||
validationError: validationError == null ? getValidationErrorForNewValue(newValue) : validationError
|
||||
};
|
||||
if (shortcut) {
|
||||
cachedContext.shortcut = shortcut;
|
||||
}
|
||||
}
|
||||
return cachedContext;
|
||||
};
|
||||
if (shouldFireOnChange) {
|
||||
handleValueChange(newValue, getContext());
|
||||
}
|
||||
if (shouldFireOnAccept && onAccept) {
|
||||
onAccept(newValue, getContext());
|
||||
}
|
||||
if (shouldClose) {
|
||||
setOpen(false);
|
||||
}
|
||||
});
|
||||
|
||||
// If `prop.value` changes, we update the state to reflect the new value
|
||||
if (value !== state.lastExternalValue) {
|
||||
setState(prevState => (0, _extends2.default)({}, prevState, {
|
||||
lastExternalValue: value,
|
||||
clockShallowValue: undefined,
|
||||
hasBeenModifiedSinceMount: true
|
||||
}));
|
||||
}
|
||||
const setValueFromView = (0, _useEventCallback.default)((newValue, selectionState = 'partial') => {
|
||||
// TODO: Expose a new method (private?) like `setView` that only updates the clock shallow value.
|
||||
if (selectionState === 'shallow') {
|
||||
setState(prev => (0, _extends2.default)({}, prev, {
|
||||
clockShallowValue: newValue,
|
||||
hasBeenModifiedSinceMount: true
|
||||
}));
|
||||
return;
|
||||
}
|
||||
setValue(newValue, {
|
||||
changeImportance: selectionState === 'finish' && closeOnSelect ? 'accept' : 'set'
|
||||
});
|
||||
});
|
||||
|
||||
// It is required to update inner state in useEffect in order to avoid situation when
|
||||
// Our component is not mounted yet, but `open` state is set to `true` (for example initially opened)
|
||||
React.useEffect(() => {
|
||||
if (isOpenControlled) {
|
||||
if (openProp === undefined) {
|
||||
throw new Error('You must not mix controlling and uncontrolled mode for `open` prop');
|
||||
}
|
||||
setState(prevState => (0, _extends2.default)({}, prevState, {
|
||||
open: openProp
|
||||
}));
|
||||
}
|
||||
}, [isOpenControlled, openProp]);
|
||||
const viewValue = React.useMemo(() => valueManager.cleanValue(adapter, state.clockShallowValue === undefined ? value : state.clockShallowValue), [adapter, valueManager, state.clockShallowValue, value]);
|
||||
return {
|
||||
timezone,
|
||||
state,
|
||||
setValue,
|
||||
setValueFromView,
|
||||
setOpen,
|
||||
value,
|
||||
viewValue
|
||||
};
|
||||
}
|
||||
2
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/index.d.ts
generated
vendored
Normal file
2
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
export { usePicker } from "./usePicker.js";
|
||||
export type { UsePickerProps, UsePickerBaseProps, UsePickerParameters, PickerSelectionState, PickerViewsRendererProps, PickerViewRendererLookup, PickerRendererInterceptorProps, PickerViewRenderer, UsePickerNonStaticProps } from "./usePicker.types.js";
|
||||
12
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/index.js
generated
vendored
Normal file
12
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "usePicker", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _usePicker.usePicker;
|
||||
}
|
||||
});
|
||||
var _usePicker = require("./usePicker");
|
||||
16
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.d.ts
generated
vendored
Normal file
16
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import { UsePickerParameters, UsePickerProps, UsePickerReturnValue } from "./usePicker.types.js";
|
||||
import { DateOrTimeViewWithMeridiem, PickerValidValue } from "../../models/index.js";
|
||||
export declare const usePicker: <TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>>({
|
||||
ref,
|
||||
props,
|
||||
valueManager,
|
||||
valueType,
|
||||
variant,
|
||||
validator,
|
||||
onPopperExited,
|
||||
autoFocusView,
|
||||
rendererInterceptor: RendererInterceptor,
|
||||
localeText,
|
||||
viewContainerRole,
|
||||
getStepNavigation
|
||||
}: UsePickerParameters<TValue, TView, TExternalProps>) => UsePickerReturnValue<TValue>;
|
||||
323
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.js
generated
vendored
Normal file
323
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.js
generated
vendored
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
"use strict";
|
||||
'use client';
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
||||
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.usePicker = void 0;
|
||||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
||||
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
||||
var React = _interopRequireWildcard(require("react"));
|
||||
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
||||
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
||||
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
||||
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
||||
var _usePickerAdapter = require("../../../hooks/usePickerAdapter");
|
||||
var _useReduceAnimations = require("../useReduceAnimations");
|
||||
var _timeUtils = require("../../utils/time-utils");
|
||||
var _useViews = require("../useViews");
|
||||
var _useOrientation = require("./hooks/useOrientation");
|
||||
var _useValueAndOpenStates = require("./hooks/useValueAndOpenStates");
|
||||
var _jsxRuntime = require("react/jsx-runtime");
|
||||
const _excluded = ["className", "sx"];
|
||||
const usePicker = ({
|
||||
ref,
|
||||
props,
|
||||
valueManager,
|
||||
valueType,
|
||||
variant,
|
||||
validator,
|
||||
onPopperExited,
|
||||
autoFocusView,
|
||||
rendererInterceptor: RendererInterceptor,
|
||||
localeText,
|
||||
viewContainerRole,
|
||||
getStepNavigation
|
||||
}) => {
|
||||
const {
|
||||
// View props
|
||||
views,
|
||||
view: viewProp,
|
||||
openTo,
|
||||
onViewChange,
|
||||
viewRenderers,
|
||||
reduceAnimations: reduceAnimationsProp,
|
||||
orientation: orientationProp,
|
||||
disableOpenPicker,
|
||||
closeOnSelect,
|
||||
// Form props
|
||||
disabled,
|
||||
readOnly,
|
||||
// Field props
|
||||
formatDensity,
|
||||
enableAccessibleFieldDOMStructure,
|
||||
selectedSections,
|
||||
onSelectedSectionsChange,
|
||||
format,
|
||||
label,
|
||||
// Other props
|
||||
autoFocus,
|
||||
name
|
||||
} = props;
|
||||
const {
|
||||
className,
|
||||
sx
|
||||
} = props,
|
||||
propsToForwardToView = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
||||
|
||||
/**
|
||||
* TODO: Improve how we generate the aria-label and aria-labelledby attributes.
|
||||
*/
|
||||
const labelId = (0, _useId.default)();
|
||||
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
||||
const reduceAnimations = (0, _useReduceAnimations.useReduceAnimations)(reduceAnimationsProp);
|
||||
const orientation = (0, _useOrientation.useOrientation)(views, orientationProp);
|
||||
const {
|
||||
current: initialView
|
||||
} = React.useRef(openTo ?? null);
|
||||
|
||||
/**
|
||||
* Refs
|
||||
*/
|
||||
const [triggerElement, triggerRef] = React.useState(null);
|
||||
const popupRef = React.useRef(null);
|
||||
const fieldRef = React.useRef(null);
|
||||
const rootRefObject = React.useRef(null);
|
||||
const rootRef = (0, _useForkRef.default)(ref, rootRefObject);
|
||||
const {
|
||||
timezone,
|
||||
state,
|
||||
setOpen,
|
||||
setValue,
|
||||
setValueFromView,
|
||||
value,
|
||||
viewValue
|
||||
} = (0, _useValueAndOpenStates.useValueAndOpenStates)({
|
||||
props,
|
||||
valueManager,
|
||||
validator
|
||||
});
|
||||
const {
|
||||
view,
|
||||
setView,
|
||||
defaultView,
|
||||
focusedView,
|
||||
setFocusedView,
|
||||
setValueAndGoToNextView,
|
||||
goToNextStep,
|
||||
hasNextStep,
|
||||
hasSeveralSteps
|
||||
} = (0, _useViews.useViews)({
|
||||
view: viewProp,
|
||||
views,
|
||||
openTo,
|
||||
onChange: setValueFromView,
|
||||
onViewChange,
|
||||
autoFocus: autoFocusView,
|
||||
getStepNavigation
|
||||
});
|
||||
const clearValue = (0, _useEventCallback.default)(() => setValue(valueManager.emptyValue));
|
||||
const setValueToToday = (0, _useEventCallback.default)(() => setValue(valueManager.getTodayValue(adapter, timezone, valueType)));
|
||||
const acceptValueChanges = (0, _useEventCallback.default)(() => setValue(value));
|
||||
const cancelValueChanges = (0, _useEventCallback.default)(() => setValue(state.lastCommittedValue, {
|
||||
skipPublicationIfPristine: true
|
||||
}));
|
||||
const dismissViews = (0, _useEventCallback.default)(() => {
|
||||
setValue(value, {
|
||||
skipPublicationIfPristine: true
|
||||
});
|
||||
});
|
||||
const {
|
||||
hasUIView,
|
||||
viewModeLookup,
|
||||
timeViewsCount
|
||||
} = React.useMemo(() => views.reduce((acc, viewForReduce) => {
|
||||
const viewMode = viewRenderers[viewForReduce] == null ? 'field' : 'UI';
|
||||
acc.viewModeLookup[viewForReduce] = viewMode;
|
||||
if (viewMode === 'UI') {
|
||||
acc.hasUIView = true;
|
||||
if ((0, _timeUtils.isTimeView)(viewForReduce)) {
|
||||
acc.timeViewsCount += 1;
|
||||
}
|
||||
}
|
||||
return acc;
|
||||
}, {
|
||||
hasUIView: false,
|
||||
viewModeLookup: {},
|
||||
timeViewsCount: 0
|
||||
}), [viewRenderers, views]);
|
||||
const currentViewMode = viewModeLookup[view];
|
||||
const getCurrentViewMode = (0, _useEventCallback.default)(() => currentViewMode);
|
||||
const [popperView, setPopperView] = React.useState(currentViewMode === 'UI' ? view : null);
|
||||
if (popperView !== view && viewModeLookup[view] === 'UI') {
|
||||
setPopperView(view);
|
||||
}
|
||||
(0, _useEnhancedEffect.default)(() => {
|
||||
// Handle case of Date Time Picker without time renderers
|
||||
if (currentViewMode === 'field' && state.open) {
|
||||
setOpen(false);
|
||||
setTimeout(() => {
|
||||
fieldRef?.current?.setSelectedSections(view);
|
||||
// focusing the input before the range selection is done
|
||||
// calling it outside of timeout results in an inconsistent behavior between Safari And Chrome
|
||||
fieldRef?.current?.focusField(view);
|
||||
});
|
||||
}
|
||||
}, [view]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
(0, _useEnhancedEffect.default)(() => {
|
||||
if (!state.open) {
|
||||
return;
|
||||
}
|
||||
let newView = view;
|
||||
|
||||
// If the current view is a field view, go to the last popper view
|
||||
if (currentViewMode === 'field' && popperView != null) {
|
||||
newView = popperView;
|
||||
}
|
||||
|
||||
// If the current view is not the default view and both are UI views
|
||||
if (newView !== defaultView && viewModeLookup[newView] === 'UI' && viewModeLookup[defaultView] === 'UI') {
|
||||
newView = defaultView;
|
||||
}
|
||||
if (newView !== view) {
|
||||
setView(newView);
|
||||
}
|
||||
setFocusedView(newView, true);
|
||||
}, [state.open]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
const ownerState = React.useMemo(() => ({
|
||||
isPickerValueEmpty: valueManager.areValuesEqual(adapter, value, valueManager.emptyValue),
|
||||
isPickerOpen: state.open,
|
||||
isPickerDisabled: props.disabled ?? false,
|
||||
isPickerReadOnly: props.readOnly ?? false,
|
||||
pickerOrientation: orientation,
|
||||
pickerVariant: variant
|
||||
}), [adapter, valueManager, value, state.open, orientation, variant, props.disabled, props.readOnly]);
|
||||
const triggerStatus = React.useMemo(() => {
|
||||
if (disableOpenPicker || !hasUIView) {
|
||||
return 'hidden';
|
||||
}
|
||||
if (disabled || readOnly) {
|
||||
return 'disabled';
|
||||
}
|
||||
return 'enabled';
|
||||
}, [disableOpenPicker, hasUIView, disabled, readOnly]);
|
||||
const wrappedGoToNextStep = (0, _useEventCallback.default)(goToNextStep);
|
||||
const defaultActionBarActions = React.useMemo(() => {
|
||||
if (closeOnSelect && !hasSeveralSteps) {
|
||||
return [];
|
||||
}
|
||||
return ['cancel', 'nextOrAccept'];
|
||||
}, [closeOnSelect, hasSeveralSteps]);
|
||||
const actionsContextValue = React.useMemo(() => ({
|
||||
setValue,
|
||||
setOpen,
|
||||
clearValue,
|
||||
setValueToToday,
|
||||
acceptValueChanges,
|
||||
cancelValueChanges,
|
||||
setView,
|
||||
goToNextStep: wrappedGoToNextStep
|
||||
}), [setValue, setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges, setView, wrappedGoToNextStep]);
|
||||
const contextValue = React.useMemo(() => (0, _extends2.default)({}, actionsContextValue, {
|
||||
value,
|
||||
timezone,
|
||||
open: state.open,
|
||||
views,
|
||||
view: popperView,
|
||||
initialView,
|
||||
disabled: disabled ?? false,
|
||||
readOnly: readOnly ?? false,
|
||||
autoFocus: autoFocus ?? false,
|
||||
variant,
|
||||
orientation,
|
||||
popupRef,
|
||||
reduceAnimations,
|
||||
triggerRef,
|
||||
triggerStatus,
|
||||
hasNextStep,
|
||||
fieldFormat: format ?? '',
|
||||
name,
|
||||
label,
|
||||
rootSx: sx,
|
||||
rootRef,
|
||||
rootClassName: className
|
||||
}), [actionsContextValue, value, rootRef, variant, orientation, reduceAnimations, disabled, readOnly, format, className, name, label, sx, triggerStatus, hasNextStep, timezone, state.open, popperView, views, initialView, autoFocus]);
|
||||
const privateContextValue = React.useMemo(() => ({
|
||||
dismissViews,
|
||||
ownerState,
|
||||
hasUIView,
|
||||
getCurrentViewMode,
|
||||
rootRefObject,
|
||||
labelId,
|
||||
triggerElement,
|
||||
viewContainerRole,
|
||||
defaultActionBarActions,
|
||||
onPopperExited
|
||||
}), [dismissViews, ownerState, hasUIView, getCurrentViewMode, labelId, triggerElement, viewContainerRole, defaultActionBarActions, onPopperExited]);
|
||||
const fieldPrivateContextValue = React.useMemo(() => ({
|
||||
formatDensity,
|
||||
enableAccessibleFieldDOMStructure,
|
||||
selectedSections,
|
||||
onSelectedSectionsChange,
|
||||
fieldRef
|
||||
}), [formatDensity, enableAccessibleFieldDOMStructure, selectedSections, onSelectedSectionsChange, fieldRef]);
|
||||
const isValidContextValue = testedValue => {
|
||||
const error = validator({
|
||||
adapter,
|
||||
value: testedValue,
|
||||
timezone,
|
||||
props
|
||||
});
|
||||
return !valueManager.hasError(error);
|
||||
};
|
||||
const renderCurrentView = () => {
|
||||
if (popperView == null) {
|
||||
return null;
|
||||
}
|
||||
const renderer = viewRenderers[popperView];
|
||||
if (renderer == null) {
|
||||
return null;
|
||||
}
|
||||
const rendererProps = (0, _extends2.default)({}, propsToForwardToView, {
|
||||
views,
|
||||
timezone,
|
||||
value: viewValue,
|
||||
onChange: setValueAndGoToNextView,
|
||||
view: popperView,
|
||||
onViewChange: setView,
|
||||
showViewSwitcher: timeViewsCount > 1,
|
||||
timeViewsCount
|
||||
}, viewContainerRole === 'tooltip' ? {
|
||||
focusedView: null,
|
||||
onFocusedViewChange: () => {}
|
||||
} : {
|
||||
focusedView,
|
||||
onFocusedViewChange: setFocusedView
|
||||
});
|
||||
if (RendererInterceptor) {
|
||||
return /*#__PURE__*/(0, _jsxRuntime.jsx)(RendererInterceptor, {
|
||||
viewRenderers: viewRenderers,
|
||||
popperView: popperView,
|
||||
rendererProps: rendererProps
|
||||
});
|
||||
}
|
||||
return renderer(rendererProps);
|
||||
};
|
||||
return {
|
||||
providerProps: {
|
||||
localeText,
|
||||
contextValue,
|
||||
privateContextValue,
|
||||
actionsContextValue,
|
||||
fieldPrivateContextValue,
|
||||
isValidContextValue
|
||||
},
|
||||
renderCurrentView,
|
||||
ownerState
|
||||
};
|
||||
};
|
||||
exports.usePicker = usePicker;
|
||||
187
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.types.d.ts
generated
vendored
Normal file
187
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.types.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
import { SxProps } from '@mui/system';
|
||||
import { Theme } from '@mui/material/styles';
|
||||
import { InferError, OnErrorProps, PickerChangeHandlerContext, PickerOwnerState, PickerValidDate, PickerValueType, TimezoneProps } from "../../../models/index.js";
|
||||
import { DateOrTimeViewWithMeridiem, FormProps, PickerOrientation, PickerRangeValue, PickerValidValue, PickerValueManager, PickerVariant } from "../../models/index.js";
|
||||
import { Validator } from "../../../validation/index.js";
|
||||
import { UseViewsOptions } from "../useViews.js";
|
||||
import { PickerProviderProps } from "../../components/PickerProvider.js";
|
||||
import { PickersInputLocaleText } from "../../../locales/index.js";
|
||||
import { PickerFieldPrivateContextValue } from "../useNullableFieldPrivateContext.js";
|
||||
import { CreateStepNavigationReturnValue } from "../../utils/createStepNavigation.js";
|
||||
/**
|
||||
* Props common to all Picker headless implementations.
|
||||
* Those props are exposed on all the Pickers.
|
||||
*/
|
||||
export interface UsePickerBaseProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerProps<TValue, TView, TError, any>> extends OnErrorProps<TValue, TError>, Omit<UseViewsOptions<any, TView>, 'onChange' | 'onFocusedViewChange' | 'focusedView' | 'getStepNavigation'>, TimezoneProps, FormProps {
|
||||
/**
|
||||
* The selected value.
|
||||
* Used when the component is controlled.
|
||||
*/
|
||||
value?: TValue;
|
||||
/**
|
||||
* The default value.
|
||||
* Used when the component is not controlled.
|
||||
*/
|
||||
defaultValue?: TValue;
|
||||
/**
|
||||
* Callback fired when the value changes.
|
||||
* @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.
|
||||
* @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.
|
||||
* @param {TValue} value The new value.
|
||||
* @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.
|
||||
*/
|
||||
onChange?: (value: TValue, context: PickerChangeHandlerContext<TError>) => void;
|
||||
/**
|
||||
* Callback fired when the value is accepted.
|
||||
* @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.
|
||||
* @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.
|
||||
* @param {TValue} value The value that was just accepted.
|
||||
* @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.
|
||||
*/
|
||||
onAccept?: (value: TValue, context: PickerChangeHandlerContext<TError>) => void;
|
||||
/**
|
||||
* If `null`, the section will only have field editing.
|
||||
* If `undefined`, internally defined view will be used.
|
||||
*/
|
||||
viewRenderers: PickerViewRendererLookup<TValue, TView, TExternalProps>;
|
||||
/**
|
||||
* The date used to generate the new value when both `value` and `defaultValue` are empty.
|
||||
* @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
|
||||
*/
|
||||
referenceDate?: TValue extends PickerRangeValue ? TValue | PickerValidDate : PickerValidDate;
|
||||
/**
|
||||
* Force rendering in particular orientation.
|
||||
*/
|
||||
orientation?: PickerOrientation;
|
||||
/**
|
||||
* If `true`, disable heavy animations.
|
||||
* @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
|
||||
*/
|
||||
reduceAnimations?: boolean;
|
||||
}
|
||||
/**
|
||||
* Props used to handle the value of non-static Pickers.
|
||||
*/
|
||||
export interface UsePickerNonStaticProps extends Omit<PickerFieldPrivateContextValue, 'fieldRef'> {
|
||||
/**
|
||||
* If `true`, the Picker will close after submitting the full date.
|
||||
* @default false
|
||||
*/
|
||||
closeOnSelect?: boolean;
|
||||
/**
|
||||
* Control the popup or dialog open state.
|
||||
* @default false
|
||||
*/
|
||||
open?: boolean;
|
||||
/**
|
||||
* Callback fired when the popup requests to be closed.
|
||||
* Use in controlled mode (see `open`).
|
||||
*/
|
||||
onClose?: () => void;
|
||||
/**
|
||||
* Callback fired when the popup requests to be opened.
|
||||
* Use in controlled mode (see `open`).
|
||||
*/
|
||||
onOpen?: () => void;
|
||||
/**
|
||||
* Format of the date when rendered in the input(s).
|
||||
* Defaults to localized format based on the used `views`.
|
||||
*/
|
||||
format?: string;
|
||||
/**
|
||||
* If `true`, the button to open the Picker will not be rendered (it will only render the field).
|
||||
* @deprecated Use the [field component](https://mui.com/x/react-date-pickers/fields/) instead.
|
||||
* @default false
|
||||
*/
|
||||
disableOpenPicker?: boolean;
|
||||
/**
|
||||
* The label content.
|
||||
*/
|
||||
label?: React.ReactNode;
|
||||
/**
|
||||
* Pass a ref to the `input` element.
|
||||
*/
|
||||
inputRef?: React.Ref<HTMLInputElement>;
|
||||
/**
|
||||
* Name attribute used by the `input` element in the Field.
|
||||
*/
|
||||
name?: string;
|
||||
}
|
||||
export interface UsePickerProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerProps<TValue, TView, TError, any>> extends UsePickerBaseProps<TValue, TView, TError, TExternalProps>, UsePickerNonStaticProps {
|
||||
referenceDate?: TValue extends PickerRangeValue ? TValue | PickerValidDate : PickerValidDate;
|
||||
className?: string;
|
||||
sx?: SxProps<Theme>;
|
||||
}
|
||||
export interface UsePickerParameters<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>> {
|
||||
ref: React.ForwardedRef<HTMLDivElement> | undefined;
|
||||
localeText: PickersInputLocaleText | undefined;
|
||||
variant: PickerVariant;
|
||||
valueManager: PickerValueManager<TValue, InferError<TExternalProps>>;
|
||||
valueType: PickerValueType;
|
||||
validator: Validator<TValue, InferError<TExternalProps>, TExternalProps>;
|
||||
autoFocusView: boolean;
|
||||
viewContainerRole: 'dialog' | 'tooltip' | null;
|
||||
/**
|
||||
* A function that intercepts the regular Picker rendering.
|
||||
* Can be used to consume the provided `viewRenderers` and render a custom component wrapping them.
|
||||
* @param {PickerViewRendererLookup<TValue, TView, TExternalProps>} viewRenderers The `viewRenderers` provided to the Picker component.
|
||||
* @param {TView} popperView The current Picker view.
|
||||
* @param {any} rendererProps All the props being passed down to the renderer.
|
||||
* @returns {React.ReactNode} A React node that will be rendered instead of the default renderer.
|
||||
*/
|
||||
rendererInterceptor?: React.JSXElementConstructor<PickerRendererInterceptorProps<TValue, TView, TExternalProps>>;
|
||||
props: TExternalProps;
|
||||
getStepNavigation: CreateStepNavigationReturnValue;
|
||||
onPopperExited?: () => void;
|
||||
}
|
||||
export interface UsePickerReturnValue<TValue extends PickerValidValue> {
|
||||
ownerState: PickerOwnerState;
|
||||
renderCurrentView: () => React.ReactNode;
|
||||
providerProps: Omit<PickerProviderProps<TValue>, 'children'>;
|
||||
}
|
||||
export type PickerSelectionState = 'partial' | 'shallow' | 'finish';
|
||||
export interface UsePickerState<TValue extends PickerValidValue> {
|
||||
/**
|
||||
* Whether the Picker is open.
|
||||
*/
|
||||
open: boolean;
|
||||
/**
|
||||
* Last value returned by `useControlledValue`.
|
||||
*/
|
||||
lastExternalValue: TValue;
|
||||
/**
|
||||
* Date currently displayed on the views if we are dragging the cursor in the Clock component.
|
||||
*/
|
||||
clockShallowValue: TValue | undefined;
|
||||
/**
|
||||
* Last value committed (the last value for which `shouldCommitValue` returned `true`).
|
||||
* If `onAccept` is defined, it's the value that was passed on the last call to this callback.
|
||||
*/
|
||||
lastCommittedValue: TValue;
|
||||
/**
|
||||
* If we never modified the value since the mount of the component,
|
||||
* Then we might want to apply some custom logic.
|
||||
*
|
||||
* For example, when the component is not controlled and `defaultValue` is defined.
|
||||
* Then clicking on "Accept", "Today" or "Clear" should fire `onAccept` with `defaultValue`, but clicking on "Cancel" or dismissing the Picker should not.
|
||||
*/
|
||||
hasBeenModifiedSinceMount: boolean;
|
||||
}
|
||||
export interface PickerViewsRendererBaseExternalProps extends Omit<UsePickerProps<any, any, any, any>, 'openTo' | 'viewRenderers' | 'onChange'> {}
|
||||
export type PickerViewsRendererProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps> = Omit<TExternalProps, 'className' | 'sx'> & {
|
||||
value: TValue;
|
||||
onChange: (value: TValue, selectionState?: PickerSelectionState) => void;
|
||||
view: TView;
|
||||
views: readonly TView[];
|
||||
focusedView: TView | null;
|
||||
onFocusedViewChange: (viewToFocus: TView, hasFocus: boolean) => void;
|
||||
showViewSwitcher: boolean;
|
||||
timeViewsCount: number;
|
||||
};
|
||||
export type PickerViewRenderer<TValue extends PickerValidValue, TExternalProps extends PickerViewsRendererBaseExternalProps> = (props: PickerViewsRendererProps<TValue, any, TExternalProps>) => React.ReactNode;
|
||||
export type PickerViewRendererLookup<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps> = Record<TView, PickerViewRenderer<TValue, TExternalProps> | null>;
|
||||
export interface PickerRendererInterceptorProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, TExternalProps>> {
|
||||
viewRenderers: PickerViewRendererLookup<TValue, TView, TExternalProps>;
|
||||
popperView: TView;
|
||||
rendererProps: PickerViewsRendererProps<TValue, TView, TExternalProps>;
|
||||
}
|
||||
5
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.types.js
generated
vendored
Normal file
5
node_modules/@mui/x-date-pickers/internals/hooks/usePicker/usePicker.types.js
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue