81 lines
3.3 KiB
JavaScript
81 lines
3.3 KiB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
import * as React from 'react';
|
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
import useControlled from '@mui/utils/useControlled';
|
|
import { useUtils } from './useUtils';
|
|
/**
|
|
* Hooks making sure that:
|
|
* - The value returned by `onChange` always have the timezone of `props.value` or `props.defaultValue` if defined
|
|
* - The value rendered is always the one from `props.timezone` if defined
|
|
*/
|
|
export var useValueWithTimezone = function useValueWithTimezone(_ref) {
|
|
var _ref2, _ref3;
|
|
var timezoneProp = _ref.timezone,
|
|
valueProp = _ref.value,
|
|
defaultValue = _ref.defaultValue,
|
|
onChange = _ref.onChange,
|
|
valueManager = _ref.valueManager;
|
|
var utils = useUtils();
|
|
var firstDefaultValue = React.useRef(defaultValue);
|
|
var inputValue = (_ref2 = valueProp != null ? valueProp : firstDefaultValue.current) != null ? _ref2 : valueManager.emptyValue;
|
|
var inputTimezone = React.useMemo(function () {
|
|
return valueManager.getTimezone(utils, inputValue);
|
|
}, [utils, valueManager, inputValue]);
|
|
var setInputTimezone = useEventCallback(function (newValue) {
|
|
if (inputTimezone == null) {
|
|
return newValue;
|
|
}
|
|
return valueManager.setTimezone(utils, inputTimezone, newValue);
|
|
});
|
|
var timezoneToRender = (_ref3 = timezoneProp != null ? timezoneProp : inputTimezone) != null ? _ref3 : 'default';
|
|
var valueWithTimezoneToRender = React.useMemo(function () {
|
|
return valueManager.setTimezone(utils, timezoneToRender, inputValue);
|
|
}, [valueManager, utils, timezoneToRender, inputValue]);
|
|
var handleValueChange = useEventCallback(function (newValue) {
|
|
var newValueWithInputTimezone = setInputTimezone(newValue);
|
|
for (var _len = arguments.length, otherParams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
otherParams[_key - 1] = arguments[_key];
|
|
}
|
|
onChange == null || onChange.apply(void 0, [newValueWithInputTimezone].concat(otherParams));
|
|
});
|
|
return {
|
|
value: valueWithTimezoneToRender,
|
|
handleValueChange: handleValueChange,
|
|
timezone: timezoneToRender
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Wrapper around `useControlled` and `useValueWithTimezone`
|
|
*/
|
|
export var useControlledValueWithTimezone = function useControlledValueWithTimezone(_ref4) {
|
|
var name = _ref4.name,
|
|
timezoneProp = _ref4.timezone,
|
|
valueProp = _ref4.value,
|
|
defaultValue = _ref4.defaultValue,
|
|
onChangeProp = _ref4.onChange,
|
|
valueManager = _ref4.valueManager;
|
|
var _useControlled = useControlled({
|
|
name: name,
|
|
state: 'value',
|
|
controlled: valueProp,
|
|
default: defaultValue != null ? defaultValue : valueManager.emptyValue
|
|
}),
|
|
_useControlled2 = _slicedToArray(_useControlled, 2),
|
|
valueWithInputTimezone = _useControlled2[0],
|
|
setValue = _useControlled2[1];
|
|
var onChange = useEventCallback(function (newValue) {
|
|
setValue(newValue);
|
|
for (var _len2 = arguments.length, otherParams = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
otherParams[_key2 - 1] = arguments[_key2];
|
|
}
|
|
onChangeProp == null || onChangeProp.apply(void 0, [newValue].concat(otherParams));
|
|
});
|
|
return useValueWithTimezone({
|
|
timezone: timezoneProp,
|
|
value: valueWithInputTimezone,
|
|
defaultValue: undefined,
|
|
onChange: onChange,
|
|
valueManager: valueManager
|
|
});
|
|
}; |