diff --git a/src/components/admin/ParkForm.tsx b/src/components/admin/ParkForm.tsx index 9bf62eb3..d224916f 100644 --- a/src/components/admin/ParkForm.tsx +++ b/src/components/admin/ParkForm.tsx @@ -9,6 +9,7 @@ import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { PhotoUpload } from '@/components/upload/PhotoUpload'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; +import { DatePicker } from '@/components/ui/date-picker'; import { toast } from '@/hooks/use-toast'; import { MapPin, Save, X } from 'lucide-react'; @@ -218,11 +219,13 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }: {/* Dates */}
- - Opening Date + setValue('opening_date', date ? date.toISOString().split('T')[0] : '')} + placeholder="Select opening date" + disableFuture={true} + fromYear={1800} />
diff --git a/src/components/admin/RideForm.tsx b/src/components/admin/RideForm.tsx index 79d728fd..892adce7 100644 --- a/src/components/admin/RideForm.tsx +++ b/src/components/admin/RideForm.tsx @@ -9,6 +9,7 @@ import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { PhotoUpload } from '@/components/upload/PhotoUpload'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; +import { DatePicker } from '@/components/ui/date-picker'; import { toast } from '@/hooks/use-toast'; import { Zap, Save, X } from 'lucide-react'; @@ -279,11 +280,13 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: {/* Dates */}
- - Opening Date + setValue('opening_date', date ? date.toISOString().split('T')[0] : '')} + placeholder="Select opening date" + disableFuture={true} + fromYear={1800} />
diff --git a/src/components/reviews/ReviewForm.tsx b/src/components/reviews/ReviewForm.tsx index 39fa1e90..fa1c09ba 100644 --- a/src/components/reviews/ReviewForm.tsx +++ b/src/components/reviews/ReviewForm.tsx @@ -7,6 +7,7 @@ import { Button } from '@/components/ui/button'; import { Textarea } from '@/components/ui/textarea'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; +import { DatePicker } from '@/components/ui/date-picker'; import { Star, Send } from 'lucide-react'; import { useAuth } from '@/hooks/useAuth'; import { supabase } from '@/integrations/supabase/client'; @@ -45,6 +46,7 @@ export function ReviewForm({ handleSubmit, reset, setValue, + watch, formState: { errors } @@ -146,8 +148,13 @@ export function ReviewForm({ {/* Visit Date */}
- - + + setValue('visit_date', date ? date.toISOString().split('T')[0] : '')} + placeholder="Select visit date" + disableFuture={true} + />
{/* Wait Time (for rides) */} diff --git a/src/components/ui/date-picker.tsx b/src/components/ui/date-picker.tsx new file mode 100644 index 00000000..f2a267c5 --- /dev/null +++ b/src/components/ui/date-picker.tsx @@ -0,0 +1,83 @@ +import * as React from "react"; +import { format } from "date-fns"; +import { CalendarIcon } from "lucide-react"; + +import { cn } from "@/lib/utils"; +import { Button } from "@/components/ui/button"; +import { Calendar } from "@/components/ui/calendar"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; + +export interface DatePickerProps { + date?: Date; + onSelect?: (date: Date | undefined) => void; + placeholder?: string; + disabled?: boolean; + className?: string; + disableFuture?: boolean; + disablePast?: boolean; + fromYear?: number; + toYear?: number; +} + +export function DatePicker({ + date, + onSelect, + placeholder = "Pick a date", + disabled = false, + className, + disableFuture = false, + disablePast = false, + fromYear, + toYear, +}: DatePickerProps) { + const [open, setOpen] = React.useState(false); + + const handleSelect = (selectedDate: Date | undefined) => { + onSelect?.(selectedDate); + setOpen(false); + }; + + const getDisabledDates = (date: Date) => { + const now = new Date(); + if (disableFuture && date > now) return true; + if (disablePast && date < now) return true; + return false; + }; + + return ( + + + + + + + + + ); +} \ No newline at end of file