From 882feff12f5ae1931079723ec9037166fa0c2067 Mon Sep 17 00:00:00 2001 From: Alexandre Fauquette Date: Wed, 24 Aug 2022 20:13:54 +0200 Subject: [PATCH] scripts --- .../src/DateRangePicker/DateRangePicker.tsx | 1 + .../DateRangePickerViewDesktop.tsx | 6 ++++++ .../DesktopDateRangePicker.tsx | 1 + .../MobileDateRangePicker.tsx | 1 + .../StaticDateRangePicker.tsx | 1 + .../validation/useDateRangeValidation.ts | 20 +++++++++++++++++-- .../src/CalendarPicker/CalendarPicker.tsx | 1 + .../src/DatePicker/DatePicker.tsx | 1 + .../src/DateTimePicker/DateTimePicker.tsx | 1 + .../DesktopDatePicker/DesktopDatePicker.tsx | 1 + .../DesktopDateTimePicker.tsx | 1 + .../src/MobileDatePicker/MobileDatePicker.tsx | 1 + .../MobileDateTimePicker.tsx | 1 + .../src/StaticDatePicker/StaticDatePicker.tsx | 1 + .../StaticDateTimePicker.tsx | 1 + .../src/internals/hooks/validation/models.ts | 3 ++- 16 files changed, 39 insertions(+), 3 deletions(-) diff --git a/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePicker.tsx b/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePicker.tsx index f0f6ae127af7..9b526c6a9e51 100644 --- a/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePicker.tsx @@ -380,6 +380,7 @@ DateRangePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerViewDesktop.tsx b/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerViewDesktop.tsx index 2c0ddde98c4c..3f2aabc62c61 100644 --- a/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerViewDesktop.tsx +++ b/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerViewDesktop.tsx @@ -113,6 +113,7 @@ export function DateRangePickerViewDesktop(props: DesktopDateRangeCalenda onSelectedDaysChange, renderDay = (_, dateRangeProps) => , rightArrowButtonText: rightArrowButtonTextProp, + shouldDisableDate, ...other } = props; @@ -174,6 +175,10 @@ export function DateRangePickerViewDesktop(props: DesktopDateRangeCalenda changeMonth(utils.getPreviousMonth(currentMonth)); }, [changeMonth, currentMonth, utils]); + const wrappedShouldDisableDate = + shouldDisableDate && + ((dayToTest: TDate) => shouldDisableDate?.(dayToTest, currentlySelectingRangeEnd)); + return ( {getCalendarsArray(calendars).map((_, index) => { @@ -197,6 +202,7 @@ export function DateRangePickerViewDesktop(props: DesktopDateRangeCalenda {...other} + shouldDisableDate={wrappedShouldDisableDate} minDate={minDate} maxDate={maxDate} disablePast={disablePast} diff --git a/packages/x-date-pickers-pro/src/DesktopDateRangePicker/DesktopDateRangePicker.tsx b/packages/x-date-pickers-pro/src/DesktopDateRangePicker/DesktopDateRangePicker.tsx index 75c1b2b43fbd..4896751183d2 100644 --- a/packages/x-date-pickers-pro/src/DesktopDateRangePicker/DesktopDateRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/DesktopDateRangePicker/DesktopDateRangePicker.tsx @@ -409,6 +409,7 @@ DesktopDateRangePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers-pro/src/MobileDateRangePicker/MobileDateRangePicker.tsx b/packages/x-date-pickers-pro/src/MobileDateRangePicker/MobileDateRangePicker.tsx index 4469c90153bd..9995f9bc3f40 100644 --- a/packages/x-date-pickers-pro/src/MobileDateRangePicker/MobileDateRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/MobileDateRangePicker/MobileDateRangePicker.tsx @@ -401,6 +401,7 @@ MobileDateRangePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers-pro/src/StaticDateRangePicker/StaticDateRangePicker.tsx b/packages/x-date-pickers-pro/src/StaticDateRangePicker/StaticDateRangePicker.tsx index 18c638121208..2b8b2d08cd26 100644 --- a/packages/x-date-pickers-pro/src/StaticDateRangePicker/StaticDateRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/StaticDateRangePicker/StaticDateRangePicker.tsx @@ -381,6 +381,7 @@ StaticDateRangePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers-pro/src/internal/hooks/validation/useDateRangeValidation.ts b/packages/x-date-pickers-pro/src/internal/hooks/validation/useDateRangeValidation.ts index c9b1c372dc42..4b4a7d416429 100644 --- a/packages/x-date-pickers-pro/src/internal/hooks/validation/useDateRangeValidation.ts +++ b/packages/x-date-pickers-pro/src/internal/hooks/validation/useDateRangeValidation.ts @@ -27,9 +27,25 @@ export const validateDateRange: Validator !!shouldDisableDate?.(day, 'start'), + }, + }), + validateDate({ + adapter, + value: end, + props: { + ...otherProps, + shouldDisableDate: (day) => !!shouldDisableDate?.(day, 'end'), + }, + }), ]; if (dateValidations[0] || dateValidations[1]) { diff --git a/packages/x-date-pickers/src/CalendarPicker/CalendarPicker.tsx b/packages/x-date-pickers/src/CalendarPicker/CalendarPicker.tsx index 412bbc79990b..17ddc8bb0678 100644 --- a/packages/x-date-pickers/src/CalendarPicker/CalendarPicker.tsx +++ b/packages/x-date-pickers/src/CalendarPicker/CalendarPicker.tsx @@ -623,6 +623,7 @@ CalendarPicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/DatePicker/DatePicker.tsx b/packages/x-date-pickers/src/DatePicker/DatePicker.tsx index 42f37cc7b2db..12e5432c299e 100644 --- a/packages/x-date-pickers/src/DatePicker/DatePicker.tsx +++ b/packages/x-date-pickers/src/DatePicker/DatePicker.tsx @@ -359,6 +359,7 @@ DatePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/DateTimePicker/DateTimePicker.tsx b/packages/x-date-pickers/src/DateTimePicker/DateTimePicker.tsx index 721b296c89a9..6141a3a227cb 100644 --- a/packages/x-date-pickers/src/DateTimePicker/DateTimePicker.tsx +++ b/packages/x-date-pickers/src/DateTimePicker/DateTimePicker.tsx @@ -423,6 +423,7 @@ DateTimePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/DesktopDatePicker/DesktopDatePicker.tsx b/packages/x-date-pickers/src/DesktopDatePicker/DesktopDatePicker.tsx index 8921901b3f44..952addb52a62 100644 --- a/packages/x-date-pickers/src/DesktopDatePicker/DesktopDatePicker.tsx +++ b/packages/x-date-pickers/src/DesktopDatePicker/DesktopDatePicker.tsx @@ -376,6 +376,7 @@ DesktopDatePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx b/packages/x-date-pickers/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx index 8f76bad82c6b..6c69f2d01bad 100644 --- a/packages/x-date-pickers/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx +++ b/packages/x-date-pickers/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx @@ -446,6 +446,7 @@ DesktopDateTimePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/MobileDatePicker/MobileDatePicker.tsx b/packages/x-date-pickers/src/MobileDatePicker/MobileDatePicker.tsx index 18ec172f87aa..d29794c115b2 100644 --- a/packages/x-date-pickers/src/MobileDatePicker/MobileDatePicker.tsx +++ b/packages/x-date-pickers/src/MobileDatePicker/MobileDatePicker.tsx @@ -369,6 +369,7 @@ MobileDatePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/MobileDateTimePicker/MobileDateTimePicker.tsx b/packages/x-date-pickers/src/MobileDateTimePicker/MobileDateTimePicker.tsx index 8d98200c4f41..dc2e92a7864a 100644 --- a/packages/x-date-pickers/src/MobileDateTimePicker/MobileDateTimePicker.tsx +++ b/packages/x-date-pickers/src/MobileDateTimePicker/MobileDateTimePicker.tsx @@ -437,6 +437,7 @@ MobileDateTimePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/StaticDatePicker/StaticDatePicker.tsx b/packages/x-date-pickers/src/StaticDatePicker/StaticDatePicker.tsx index a329be21987f..9989fa6d0201 100644 --- a/packages/x-date-pickers/src/StaticDatePicker/StaticDatePicker.tsx +++ b/packages/x-date-pickers/src/StaticDatePicker/StaticDatePicker.tsx @@ -347,6 +347,7 @@ StaticDatePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/StaticDateTimePicker/StaticDateTimePicker.tsx b/packages/x-date-pickers/src/StaticDateTimePicker/StaticDateTimePicker.tsx index 928403e28485..f205f064dcc0 100644 --- a/packages/x-date-pickers/src/StaticDateTimePicker/StaticDateTimePicker.tsx +++ b/packages/x-date-pickers/src/StaticDateTimePicker/StaticDateTimePicker.tsx @@ -422,6 +422,7 @@ StaticDateTimePicker.propTypes = { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ shouldDisableDate: PropTypes.func, diff --git a/packages/x-date-pickers/src/internals/hooks/validation/models.ts b/packages/x-date-pickers/src/internals/hooks/validation/models.ts index 76e88bf22ca3..552239d1e95e 100644 --- a/packages/x-date-pickers/src/internals/hooks/validation/models.ts +++ b/packages/x-date-pickers/src/internals/hooks/validation/models.ts @@ -30,9 +30,10 @@ export interface DayValidationProps { * Disable specific date. @DateIOType * @template TDate * @param {TDate} day The date to test. + * @param {'start' | 'end'} position The date to test. * @returns {boolean} Returns `true` if the date should be disabled. */ - shouldDisableDate?: (day: TDate) => boolean; + shouldDisableDate?: (day: TDate, position?: 'start' | 'end') => boolean; } /**