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"; interface TripsPageProps { searchParams: Promise<{ q?: string; from?: string; to?: string }>; } export async function generateMetadata({ searchParams, }: TripsPageProps): Promise { const { q } = await searchParams; const title = q ? `Cari Teman Trip "${q}" — Pendakian Bareng` : "Cari Teman Pendakian — Daftar Open Trip Aktif"; const description = q ? `Hasil pencarian "${q}" di ${siteConfig.name}. Temukan teman pendakian, lihat trip & organizer terverifikasi, langsung gabung.` : `Daftar open trip pendakian aktif di ${siteConfig.name}. 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 hasFilters = params.q || params.from || params.to; const filters = { q: params.q, from: params.from, to: params.to, }; const [trips, allTrips] = await Promise.all([ tripService.getOpenTrips(filters), hasFilters ? tripService.getOpenTrips() : null, ]); const totalCount = hasFilters ? allTrips!.length : trips.length; return (

Cari Teman Pendakian

{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 pendakian!"}

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