import React, { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { Search, Download, ExternalLink } from "lucide-react"; import { Card, CardHeader, CardTitle, CardContent, Button, Input, Badge, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, } from "@/components/ui"; import { useHistoryStore } from "@/stores/historyStore"; import { DOMAINS } from "@/lib/domainPrompts"; export default function History() { const navigate = useNavigate(); const { issues, isLoading, searchQuery, loadIssues, searchIssues, setSearchQuery } = useHistoryStore(); const [statusFilter, setStatusFilter] = useState(""); const [domainFilter, setDomainFilter] = useState(""); const [sortField, setSortField] = useState<"created_at" | "title" | "severity">("created_at"); const [sortAsc, setSortAsc] = useState(false); useEffect(() => { loadIssues({ status: statusFilter || undefined, domain: domainFilter || undefined, }); }, [statusFilter, domainFilter, loadIssues]); const handleSearch = () => { if (searchQuery.trim()) { searchIssues(searchQuery.trim()); } else { loadIssues({ status: statusFilter || undefined, domain: domainFilter || undefined }); } }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") handleSearch(); }; const toggleSort = (field: typeof sortField) => { if (sortField === field) { setSortAsc(!sortAsc); } else { setSortField(field); setSortAsc(false); } }; const sorted = [...issues].sort((a, b) => { let cmp = 0; switch (sortField) { case "title": cmp = a.title.localeCompare(b.title); break; case "severity": cmp = a.severity.localeCompare(b.severity); break; case "created_at": default: cmp = new Date(a.created_at).getTime() - new Date(b.created_at).getTime(); } return sortAsc ? cmp : -cmp; }); const sortIndicator = (field: typeof sortField) => sortField === field ? (sortAsc ? " ↑" : " ↓") : ""; return (
| toggleSort("title")} > Title{sortIndicator("title")} | Domain | toggleSort("severity")} > Severity{sortIndicator("severity")} | Status | toggleSort("created_at")} > Created{sortIndicator("created_at")} | Actions |
|---|---|---|---|---|---|
| {issue.title} | {issue.domain} |
|
|
{new Date(issue.created_at).toLocaleDateString()} |
|