From 6884a87e3cf3899fb03e24eaf9d7c7a2b7d81702 Mon Sep 17 00:00:00 2001 From: Dmytro Stanchiev Date: Wed, 8 Apr 2026 01:04:34 -0400 Subject: [PATCH] feat: add Today / Next week / Next month quick selectors to date picker --- src/components/date-time-picker.tsx | 33 ++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/components/date-time-picker.tsx b/src/components/date-time-picker.tsx index d0fc311..8bafc59 100644 --- a/src/components/date-time-picker.tsx +++ b/src/components/date-time-picker.tsx @@ -1,6 +1,14 @@ "use client"; -import { format, isValid, parse, parseISO } from "date-fns"; +import { + addMonths, + addWeeks, + format, + isValid, + parse, + parseISO, + startOfDay, +} from "date-fns"; import { CalendarIcon } from "lucide-react"; import * as React from "react"; import { Calendar } from "@/components/ui/calendar"; @@ -97,6 +105,17 @@ export function DateTimePicker({ onChange(buildValue(base, currentHour, Number(m), allDay)); }; + const handleQuickSelect = (day: Date) => { + onChange(buildValue(day, currentHour, snappedMinute, allDay)); + setOpen(false); + }; + + const quickOptions: { label: string; date: Date }[] = [ + { label: "Today", date: startOfDay(new Date()) }, + { label: "Next week", date: startOfDay(addWeeks(new Date(), 1)) }, + { label: "Next month", date: startOfDay(addMonths(new Date(), 1)) }, + ]; + const displayLabel = parsed ? allDay ? format(parsed, "MMM d, yyyy") @@ -124,6 +143,18 @@ export function DateTimePicker({ +
+ {quickOptions.map(({ label, date }) => ( + + ))} +