import { useEffect, useMemo, useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { activityApi } from "../api/activity"; import { agentsApi } from "../api/agents"; import { issuesApi } from "../api/issues"; import { projectsApi } from "../api/projects"; import { goalsApi } from "../api/goals"; import { useCompany } from "../context/CompanyContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { queryKeys } from "../lib/queryKeys"; import { EmptyState } from "../components/EmptyState"; import { ActivityRow } from "../components/ActivityRow"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { History } from "lucide-react"; import type { Agent } from "@paperclip/shared"; export function Activity() { const { selectedCompanyId } = useCompany(); const { setBreadcrumbs } = useBreadcrumbs(); const [filter, setFilter] = useState("all"); useEffect(() => { setBreadcrumbs([{ label: "Activity" }]); }, [setBreadcrumbs]); const { data, isLoading, error } = useQuery({ queryKey: queryKeys.activity(selectedCompanyId!), queryFn: () => activityApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const { data: agents } = useQuery({ queryKey: queryKeys.agents.list(selectedCompanyId!), queryFn: () => agentsApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const { data: issues } = useQuery({ queryKey: queryKeys.issues.list(selectedCompanyId!), queryFn: () => issuesApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const { data: projects } = useQuery({ queryKey: queryKeys.projects.list(selectedCompanyId!), queryFn: () => projectsApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const { data: goals } = useQuery({ queryKey: queryKeys.goals.list(selectedCompanyId!), queryFn: () => goalsApi.list(selectedCompanyId!), enabled: !!selectedCompanyId, }); const agentMap = useMemo(() => { const map = new Map(); for (const a of agents ?? []) map.set(a.id, a); return map; }, [agents]); const entityNameMap = useMemo(() => { const map = new Map(); for (const i of issues ?? []) map.set(`issue:${i.id}`, i.title); for (const a of agents ?? []) map.set(`agent:${a.id}`, a.name); for (const p of projects ?? []) map.set(`project:${p.id}`, p.name); for (const g of goals ?? []) map.set(`goal:${g.id}`, g.title); return map; }, [issues, agents, projects, goals]); if (!selectedCompanyId) { return ; } const filtered = data && filter !== "all" ? data.filter((e) => e.entityType === filter) : data; const entityTypes = data ? [...new Set(data.map((e) => e.entityType))].sort() : []; return (
{isLoading &&

Loading...

} {error &&

{error.message}

} {filtered && filtered.length === 0 && ( )} {filtered && filtered.length > 0 && (
{filtered.map((event) => ( ))}
)}
); }