"use client"; import { useState, useEffect } from "react"; import { ArrowLeft, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Card, CardContent } from "@/components/ui/card"; import { createPerformanceReview, fetchActiveEmployees } from "@/lib/supabase/performance-actions"; const RATING_LABELS: Record = { 1: "Below expectations", 2: "Needs improvement", 3: "Meets expectations", 4: "Exceeds expectations", 5: "Outstanding", }; export default function PerformanceNewPage({ onBack, onSuccess, }: { onBack: () => void; onSuccess: () => void; }) { const [employees, setEmployees] = useState([]); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [employeeId, setEmployeeId] = useState(""); const [reviewerId, setReviewerId] = useState(""); const [periodStart, setPeriodStart] = useState(""); const [periodEnd, setPeriodEnd] = useState(""); const [rating, setRating] = useState(""); const [strengths, setStrengths] = useState(""); const [improvements, setImprovements] = useState(""); const [goalsNext, setGoalsNext] = useState(""); useEffect(() => { fetchActiveEmployees().then(setEmployees).catch(() => {}); }, []); const handleSubmit = async () => { setError(null); if (!employeeId) { setError("Select an employee"); return; } if (!periodStart || !periodEnd) { setError("Select a review period"); return; } if (periodEnd < periodStart) { setError("End date must be after start date"); return; } setSaving(true); try { const result = await createPerformanceReview({ employee_id: employeeId, reviewer_id: reviewerId || employeeId, period_start: periodStart, period_end: periodEnd, overall_rating: rating ? parseInt(rating, 10) : null, strengths: strengths || null, improvements: improvements || null, goals_next: goalsNext || null, }); if (!result.success) { setError(result.error || "Failed to create review"); return; } onSuccess(); } catch (e: any) { setError(e.message || "An unexpected error occurred"); } finally { setSaving(false); } }; return (

New Performance Review

Evaluate an employee's performance

{error && (
{error}
)}
setPeriodStart(e.target.value)} className="mt-1 w-full border border-gray-200 rounded-lg px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-[#1D9E75]/20 focus:border-[#1D9E75]" />
setPeriodEnd(e.target.value)} min={periodStart} className="mt-1 w-full border border-gray-200 rounded-lg px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-[#1D9E75]/20 focus:border-[#1D9E75]" />
{[1, 2, 3, 4, 5].map((r) => ( ))}