From ca74bdb31ea262e5be2671c389e622fea18c2d87 Mon Sep 17 00:00:00 2001 From: Suryansh Anand Date: Thu, 16 Jan 2025 22:35:50 +0530 Subject: [PATCH] fix: ensure the new date is always between max and min dates --- example/src/DatePickerExample.jsx | 4 +- .../src/components/DatePicker/DatePicker.tsx | 40 +++++++++++-------- .../src/components/DatePicker/parseDate.ts | 15 +++++++ 3 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 packages/core/src/components/DatePicker/parseDate.ts diff --git a/example/src/DatePickerExample.jsx b/example/src/DatePickerExample.jsx index 85ad7a23a..97cadc7dc 100644 --- a/example/src/DatePickerExample.jsx +++ b/example/src/DatePickerExample.jsx @@ -113,8 +113,8 @@ function DatePickerExample({ theme }) { label="Date with minimum and maximum" placeholder="Select a date..." type="solid" - minimumDate={new Date("April 10, 2023")} - maximumDate={new Date("May 10, 2023")} + minimumDate={new Date("2023-04-10")} + maximumDate={new Date("2023-05-10")} />
diff --git a/packages/core/src/components/DatePicker/DatePicker.tsx b/packages/core/src/components/DatePicker/DatePicker.tsx index b190a43b0..9affae205 100644 --- a/packages/core/src/components/DatePicker/DatePicker.tsx +++ b/packages/core/src/components/DatePicker/DatePicker.tsx @@ -34,6 +34,7 @@ import { paddingStyleNames, positionStyleNames, } from "../../utilities"; +import { parseDate } from "./parseDate"; const AnimatedText = Animated.createAnimatedComponent(Text); @@ -399,6 +400,29 @@ const DatePicker: React.FC> = ({ type === "solid" ? { marginHorizontal: 12 } : {}, ]; + React.useEffect(() => { + const currentDate = parseDate(value); + + if (!currentDate) return; + + const minDate = parseDate(minimumDate); + const maxDate = parseDate(maximumDate); + + let newDate = currentDate; + + if (minDate && currentDate < minDate) { + newDate = minDate; + } + if (maxDate && currentDate > maxDate) { + newDate = maxDate; + } + + if (newDate !== currentDate) { + setValue(newDate); + onDateChange(newDate); + } + }, [value, minimumDate, maximumDate, onDateChange]); + const Picker = (