"use client";
import { useState } from "react";
import { useRouter } from "next/navigation";
import Link from "next/link";
import { joinTripAction, cancelJoinAction } from "@/features/trip/actions";
interface JoinTripButtonProps {
tripId: string;
isLoggedIn: boolean;
isOrganizer: boolean;
isJoined: boolean;
isFull: boolean;
tripStatus: string;
/** Tanggal berangkat sudah lewat (hari kalender UTC) */
isDeparturePast?: boolean;
}
export function JoinTripButton({
tripId,
isLoggedIn,
isOrganizer,
isJoined,
isFull,
tripStatus,
isDeparturePast,
}: JoinTripButtonProps) {
const router = useRouter();
const [loading, setLoading] = useState(false);
const [error, setError] = useState("");
if (!isLoggedIn) {
return (
Login untuk Join Trip
);
}
if (isOrganizer) {
return (
Kamu adalah organizer trip ini
);
}
if (isJoined && isDeparturePast) {
return (
Kamu terdaftar di trip ini. Setelah tanggal berangkat lewat,{" "}
pembatalan ditutup
. Jika trip sudah selesai, isi ulasan di bagian bawah halaman.
);
}
if (isDeparturePast && !isJoined) {
return (
Trip sudah lewat tanggal berangkat
);
}
if (tripStatus !== "OPEN" && !isJoined) {
return (
Trip tidak tersedia untuk pendaftaran
);
}
async function handleJoin() {
setLoading(true);
setError("");
const result = await joinTripAction(tripId);
setLoading(false);
if (result.error) {
setError(result.error);
} else {
router.refresh();
}
}
async function handleCancel() {
setLoading(true);
setError("");
const result = await cancelJoinAction(tripId);
setLoading(false);
if (result.error) {
setError(result.error);
} else {
router.refresh();
}
}
return (
{error && (
{error}
)}
{isJoined ? (
) : (
)}
);
}