rsuite
Version:
A suite of react components
70 lines (68 loc) • 2.58 kB
JavaScript
'use client';
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
exports.disableTime = disableTime;
exports.useIsDateTimeDisabled = useIsDateTimeDisabled;
var _react = require("react");
var _pick = _interopRequireDefault(require("lodash/pick"));
var _getHours = require("date-fns/getHours");
var _getMinutes = require("date-fns/getMinutes");
var _getSeconds = require("date-fns/getSeconds");
var _types = require("./types");
const HOURS_PATTERN = /(Hours?)/;
const MINUTES_PATTERN = /(Minutes?)/;
const SECONDS_PATTERN = /(Seconds?)/;
/**
* Verify that the time is valid.
*
* @param props - The calendar props.
* @param date - The date to check.
* @returns Whether the time is disabled.
*
* @deprecated Use {@link useIsDateTimeDisabled} which handles PlainDateTime instead.
*/
function disableTime(props, date) {
if (!date) {
return false;
}
const disabledTimeProps = [_types.TimeProp.DisabledHours, _types.TimeProp.DisabledMinutes, _types.TimeProp.DisabledSeconds, _types.TimeProp.ShouldDisableHour, _types.TimeProp.ShouldDisableMinute, _types.TimeProp.ShouldDisableSecond];
const calendarProps = (0, _pick.default)(props, disabledTimeProps);
const mapProps = new Map(Object.entries(calendarProps));
return Array.from(mapProps.keys()).some(key => {
if (HOURS_PATTERN.test(key)) {
return mapProps.get(key)?.((0, _getHours.getHours)(date), date);
}
if (MINUTES_PATTERN.test(key)) {
return mapProps.get(key)?.((0, _getMinutes.getMinutes)(date), date);
}
if (SECONDS_PATTERN.test(key)) {
return mapProps.get(key)?.((0, _getSeconds.getSeconds)(date), date);
}
return false;
});
}
var _default = exports.default = disableTime;
/**
* Whether a datetime is allowed, based on the `hide*` and `disabled*` props.
*/
function useIsDateTimeDisabled(timeDropdownProps) {
return (0, _react.useCallback)(dateTime => {
const calendarProps = timeDropdownProps;
const mapProps = new Map(Object.entries(calendarProps));
const date = (0, _pick.default)(dateTime, ['year', 'month', 'day']);
return Array.from(mapProps.keys()).some(key => {
if (HOURS_PATTERN.test(key)) {
return mapProps.get(key)?.(dateTime.hour, date);
}
if (MINUTES_PATTERN.test(key)) {
return mapProps.get(key)?.(dateTime.minute, date);
}
if (SECONDS_PATTERN.test(key)) {
return mapProps.get(key)?.(dateTime.second, date);
}
return false;
});
}, [timeDropdownProps]);
}