Files
Iliyan Angelov 306b20e24a Frontend start
2025-09-14 00:54:48 +03:00

63 lines
1.8 KiB
JavaScript

import * as React from 'react';
import { useValidation } from './useValidation';
import { useLocalizationContext } from '../useUtils';
import { parseNonNullablePickerDate } from '../../utils/date-utils';
export const validateDate = ({
props,
value,
adapter
}) => {
const now = adapter.utils.date();
const date = adapter.utils.date(value);
const minDate = parseNonNullablePickerDate(adapter.utils, props.minDate, adapter.defaultDates.minDate);
const maxDate = parseNonNullablePickerDate(adapter.utils, props.maxDate, adapter.defaultDates.maxDate);
if (date === null) {
return null;
}
switch (true) {
case !adapter.utils.isValid(value):
return 'invalidDate';
case Boolean(props.shouldDisableDate && props.shouldDisableDate(date)):
return 'shouldDisableDate';
case Boolean(props.disableFuture && adapter.utils.isAfterDay(date, now)):
return 'disableFuture';
case Boolean(props.disablePast && adapter.utils.isBeforeDay(date, now)):
return 'disablePast';
case Boolean(minDate && adapter.utils.isBeforeDay(date, minDate)):
return 'minDate';
case Boolean(maxDate && adapter.utils.isAfterDay(date, maxDate)):
return 'maxDate';
default:
return null;
}
};
export const useIsDayDisabled = ({
shouldDisableDate,
minDate,
maxDate,
disableFuture,
disablePast
}) => {
const adapter = useLocalizationContext();
return React.useCallback(day => validateDate({
adapter,
value: day,
props: {
shouldDisableDate,
minDate,
maxDate,
disableFuture,
disablePast
}
}) !== null, [adapter, shouldDisableDate, minDate, maxDate, disableFuture, disablePast]);
};
export const isSameDateError = (a, b) => a === b;
export const useDateValidation = props => useValidation(props, validateDate, isSameDateError);