import type { Metadata } from "next"; import Link from "next/link"; import { Suspense } from "react"; import { tripService } from "@/server/services/trip.service"; import { TripCard } from "@/features/trip/components/trip-card"; import { TripFilter } from "@/features/trip/components/trip-filter"; import { siteConfig } from "@/lib/site"; import { categoryLabel, isActivityCategory } from "@/lib/activity-category"; interface TripsPageProps { searchParams: Promise<{ q?: string; from?: string; to?: string; category?: string; }>; } export async function generateMetadata({ searchParams, }: TripsPageProps): Promise { const { q, category: categoryParam } = await searchParams; const category = isActivityCategory(categoryParam) ? categoryParam : undefined; const categoryName = category ? categoryLabel(category) : null; const title = q ? `Cari Teman Trip "${q}" — Gabung Bareng` : categoryName ? `Cari Teman ${categoryName} — Daftar Open Trip Aktif` : "Cari Teman Trip & Aktivitas — Daftar Open Trip Aktif"; const description = q ? `Hasil pencarian "${q}" di ${siteConfig.name}. Temukan teman seperjalanan, lihat trip & organizer terverifikasi, langsung gabung.` : categoryName ? `Daftar open trip ${categoryName.toLowerCase()} di ${siteConfig.name}. Pilih trip, kenal calon teman seperjalanan, dan gabung bareng — grup kecil & organizer terverifikasi.` : `Daftar open trip aktif di ${siteConfig.name} — hiking, camping, snorkeling, city trip, dan aktivitas bareng lainnya. Pilih trip, kenal calon teman seperjalanan, dan gabung bareng — grup kecil & organizer terverifikasi.`; return { title, description, alternates: { canonical: "/trips" }, openGraph: { title, description, url: "/trips" }, }; } export default async function TripsPage({ searchParams }: TripsPageProps) { const params = await searchParams; const category = isActivityCategory(params.category) ? params.category : undefined; const hasFilters = Boolean(params.q || params.from || params.to || category); const filters = { q: params.q, from: params.from, to: params.to, category, }; const [trips, allTrips] = await Promise.all([ tripService.getOpenTrips(filters), hasFilters ? tripService.getOpenTrips() : null, ]); const totalCount = hasFilters ? allTrips!.length : trips.length; return (

{category ? `Cari Teman ${categoryLabel(category)}` : "Cari Teman Trip & Aktivitas"}

{hasFilters ? `${trips.length} dari ${totalCount} trip ditemukan` : `${trips.length} trip tersedia — pilih, kenalan, lalu gabung`}

+ Buat Trip
{/* Filter */}
{trips.length === 0 ? (
{hasFilters ? "🔍" : "🏕️"}

{hasFilters ? "Tidak ada trip yang cocok" : "Belum ada trip tersedia"}

{hasFilters ? "Coba ubah kata kunci atau rentang tanggal pencarian" : "Jadilah yang pertama membuat open trip di sini!"}

{!hasFilters && ( Buat Trip Baru )}
) : (
{trips.map((trip) => ( ))}
)}
); }