"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { upsertTripReviewAction } from "@/features/review/actions"; type ReviewUser = { id: string; name: string; image: string | null }; export type TripReviewItem = { id: string; rating: number; comment: string | null; createdAt: Date; user: ReviewUser; }; interface TripReviewSectionProps { tripId: string; reviews: TripReviewItem[]; averageRating: number | null; canReview: boolean; myReview: { rating: number; comment: string | null } | null; } export function TripReviewSection({ tripId, reviews, averageRating, canReview, myReview, }: TripReviewSectionProps) { const router = useRouter(); const [rating, setRating] = useState(myReview?.rating ?? 5); const [comment, setComment] = useState(myReview?.comment ?? ""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); setLoading(true); const fd = new FormData(); fd.set("tripId", tripId); fd.set("rating", String(rating)); fd.set("comment", comment); const result = await upsertTripReviewAction(fd); setLoading(false); if (result.error) { setError(result.error); } else { router.refresh(); } } return (

Ulasan peserta

{averageRating != null && reviews.length > 0 && (

{averageRating} /5 ยท {reviews.length} ulasan

)}
{reviews.length === 0 && !canReview && (

Belum ada ulasan. Peserta bisa menulis ulasan setelah trip selesai.

)} {reviews.length > 0 && ( )} {canReview && (

{myReview ? "Ubah ulasan kamu untuk trip ini." : "Bagikan pengalamanmu setelah trip selesai."}

{error && (
{error}
)}
{[1, 2, 3, 4, 5].map((n) => ( ))}