import { useState } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { AutocompleteSearch } from '@/components/search/AutocompleteSearch'; import { supabase } from '@/lib/supabaseClient'; import { toast } from 'sonner'; import { getErrorMessage } from '@/lib/errorHandler'; import { Calendar } from '@/components/ui/calendar'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { Calendar as CalendarIcon } from 'lucide-react'; import { format } from 'date-fns'; import { cn } from '@/lib/utils'; interface AddRideCreditDialogProps { userId: string; open: boolean; onOpenChange: (open: boolean) => void; onSuccess: (newCreditId: string) => void; } export function AddRideCreditDialog({ userId, open, onOpenChange, onSuccess }: AddRideCreditDialogProps) { const [selectedRideId, setSelectedRideId] = useState(''); const [selectedRideName, setSelectedRideName] = useState(''); const [firstRideDate, setFirstRideDate] = useState(undefined); const [rideCount, setRideCount] = useState(1); const [submitting, setSubmitting] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedRideId) { toast.error('Please select a ride'); return; } try { setSubmitting(true); // Check if credit already exists const { data: existing } = await supabase .from('user_ride_credits') .select('id') .eq('user_id', userId) .eq('ride_id', selectedRideId) .maybeSingle(); if (existing) { toast.error('You already have a credit for this ride'); return; } const { data, error } = await supabase .from('user_ride_credits') .insert({ user_id: userId, ride_id: selectedRideId, first_ride_date: firstRideDate ? format(firstRideDate, 'yyyy-MM-dd') : null, ride_count: rideCount }) .select('id') .single(); if (error) throw error; toast.success('Ride credit added!'); handleReset(); onSuccess(data.id); // Pass the new ID onOpenChange(false); } catch (error: unknown) { toast.error(getErrorMessage(error)); } finally { setSubmitting(false); } }; const handleReset = () => { setSelectedRideId(''); setSelectedRideName(''); setFirstRideDate(undefined); setRideCount(1); }; return ( { if (!newOpen) { handleReset(); } onOpenChange(newOpen); }} > Add Ride Credit Log a ride you've experienced
{!selectedRideId ? ( { if (result.type === 'ride') { setSelectedRideId(result.id); setSelectedRideName(result.title); } }} types={['ride']} placeholder="Search rides..." className="w-full" /> ) : (

{selectedRideName}

Selected ride

)}
date > new Date()} />
setRideCount(parseInt(e.target.value) || 1)} />
); }