"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import Image from "next/image"; import { confirmParticipantAction, rejectParticipantAction, } from "@/features/trip/actions"; export interface PendingJoinRequest { id: string; user: { name: string; image: string | null }; /** Peserta sudah menekan "Saya sudah bayar" */ markedPaidAt?: string | Date | null; } interface OrganizerJoinRequestsProps { tripId: string; pending: PendingJoinRequest[]; } export function OrganizerJoinRequests({ tripId, pending, }: OrganizerJoinRequestsProps) { const router = useRouter(); const [loadingId, setLoadingId] = useState(null); const [error, setError] = useState(""); async function run( participantId: string, action: "confirm" | "reject" ) { setLoadingId(participantId); setError(""); const result = action === "confirm" ? await confirmParticipantAction(tripId, participantId) : await rejectParticipantAction(tripId, participantId); setLoadingId(null); if (result.error) { setError(result.error); return; } router.refresh(); } return (

Permintaan join ({pending.length})

Setujui atau tolak siapa yang boleh ikut trip ini.

{error && (

{error}

)}
); }