"use client"; import React, { useState } from "react"; import { CheckCircle2, XCircle, Smartphone, AlertCircle } from "lucide-react"; import GlassTable, { TableColumn } from "@/components/ui/GlassTable"; import api, { getApiErrorMessage } from "@/lib/api"; import { toast } from "react-hot-toast"; interface DeviceChangeRequest { id: string; student_id: string; student_name: string; enrollment_number: string; new_device_uuid: string; reason: string | null; status: string; created_at: string; } interface DeviceChangeTableProps { requests: DeviceChangeRequest[]; onActionComplete: () => void; } export default function DeviceChangeTable({ requests, onActionComplete }: DeviceChangeTableProps): React.ReactElement { const [processing, setProcessing] = useState(null); const formatDate = (dateStr: string): string => { try { const date = new Date(dateStr); return date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }); } catch { return dateStr; } }; const formatTime = (dateStr: string): string => { try { const date = new Date(dateStr); return date.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }); } catch { return ""; } }; const handleAction = async (id: string, status: "APPROVED" | "REJECTED"): Promise => { try { setProcessing(id); await api.put(`/teacher/device-changes/${id}/approve`, { status }); toast.success(`Request ${status.toLowerCase()} successfully`); onActionComplete(); } catch (err: unknown) { toast.error(getApiErrorMessage(err, "Action failed")); } finally { setProcessing(null); } }; const columns: TableColumn>[] = [ { key: "student", header: "Student Details", render: (req) => (

{req.student_name}

{req.enrollment_number}

), }, { key: "request", header: "Request Info", render: (req) => (
{req.new_device_uuid.substring(0, 8)}...
{req.reason && (
{req.reason}
)}
), }, { key: "date", header: "Date Submitted", render: (req) => (
{formatDate(req.created_at)}
{formatTime(req.created_at)}
), }, { key: "actions", header: "Actions", render: (req) => (
), }, ]; if (requests.length === 0) { return (

No Pending Requests

All device change requests have been processed. Students can request device changes from their mobile app.

); } return )[]} />; }