"use client"; import { useState, useEffect } from "react"; import { Plus, FileText, Star } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { fetchPerformanceReviews, deletePerformanceReview, } from "@/lib/supabase/performance-actions"; import type { PerformanceReview } from "@/lib/supabase/performance-types"; import PageSkeleton from "./PageSkeleton"; const REVIEW_STATUS_LABELS: Record = { draft: "Draft", completed: "Completed", }; const REVIEW_STATUS_COLORS: Record = { draft: "bg-gray-100 text-gray-600 border-gray-200", completed: "bg-emerald-100 text-emerald-700 border-emerald-200", }; const RATING_LABELS: Record = { 1: "Below expectations", 2: "Needs improvement", 3: "Meets expectations", 4: "Exceeds expectations", 5: "Outstanding", }; export default function PerformanceListPage({ onNew }: { onNew: () => void }) { const [reviews, setReviews] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { let cancelled = false; fetchPerformanceReviews() .then((r) => { if (!cancelled) setReviews(r); }) .catch(() => {}) .finally(() => { if (!cancelled) setLoading(false); }); return () => { cancelled = true; }; }, []); const handleDelete = async (id: string) => { const result = await deletePerformanceReview(id); if (result.success) setReviews((prev) => prev.filter((r) => r.id !== id)); }; if (loading) return ; return (

Performance

Review cycles and employee feedback

{reviews.length === 0 ? (

No performance reviews yet

Create your first review cycle to get started

) : (
{reviews.map((r) => ( ))}
Employee Reviewer Period Rating Status

{r.employee_name}

{r.reviewer_name} {new Date(r.period_start + "T00:00:00").toLocaleDateString("en-AU", { month: "short", year: "numeric" })} — {new Date(r.period_end + "T00:00:00").toLocaleDateString("en-AU", { month: "short", year: "numeric" })} {r.overall_rating ? (
{[1, 2, 3, 4, 5].map((s) => ( ))} {r.overall_rating}/5
) : ( )}
{REVIEW_STATUS_LABELS[r.status] || r.status} {r.status === "draft" && ( )}
)}
); }