import { useEffect, useState } from 'react' import { X } from 'lucide-react' import { useTranslation } from '../../i18n' import { journeyApi } from '../../api/client' import { useToast } from '../shared/Toast' import { pickGradient } from '../../pages/journeyDetail/JourneyDetailPage.helpers' export function AddTripDialog({ journeyId, existingTripIds, onClose, onAdded }: { journeyId: number existingTripIds: number[] onClose: () => void onAdded: () => void }) { const { t } = useTranslation() const [trips, setTrips] = useState<{ id: number; title: string; destination?: string; start_date?: string; end_date?: string }[]>([]) const [search, setSearch] = useState('') const [adding, setAdding] = useState(null) const toast = useToast() useEffect(() => { journeyApi.availableTrips().then(d => setTrips(d.trips || [])).catch(() => {}) }, []) const filtered = trips.filter(trip => { if (existingTripIds.includes(trip.id)) return false if (!search) return true const q = search.toLowerCase() return trip.title.toLowerCase().includes(q) || (trip.destination || '').toLowerCase().includes(q) }) const handleAdd = async (tripId: number) => { setAdding(tripId) try { await journeyApi.addTrip(journeyId, tripId) toast.success(t('journey.trips.tripLinked')) onAdded() } catch { toast.error(t('journey.trips.linkFailed')) } finally { setAdding(null) } } return (

{t('journey.trips.linkTrip')}

setSearch(e.target.value)} placeholder={t('journey.trips.searchPlaceholder')} className="w-full px-3 py-2 border border-zinc-200 dark:border-zinc-700 rounded-lg text-[13px] bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white outline-none focus:border-zinc-400 dark:focus:border-zinc-500" />
{filtered.length === 0 && (

{t('journey.trips.noTripsAvailable')}

)} {filtered.map(trip => (
{trip.title}
{(trip.destination || trip.start_date) && (
{trip.destination}{trip.destination && trip.start_date ? ' ยท ' : ''}{trip.start_date}
)}
))}
) }