import React, { useEffect, useState, useCallback } from 'react' import { Link } from 'react-router-dom' import { ContractCreateModal } from './ContractCreateModal' interface ContractSummary { id: string name: string description?: string contract_type: string phase: string status: string file_count: number task_count: number repository_count: number created_at: string // Red team fields red_team_enabled?: boolean } export function ContractList() { const [contracts, setContracts] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [showCreateModal, setShowCreateModal] = useState(false) const fetchContracts = useCallback(async () => { try { setLoading(true) const response = await fetch('/api/v1/contracts') if (!response.ok) { throw new Error(`Failed to fetch contracts: ${response.statusText}`) } const data = await response.json() setContracts(data.contracts || []) } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error') } finally { setLoading(false) } }, []) useEffect(() => { fetchContracts() }, [fetchContracts]) if (loading) { return (
Loading contracts...
) } if (error) { return (
Error: {error}
) } return (

Contracts

{contracts.length === 0 ? (

No contracts found

) : (
    {contracts.map((contract) => (
  • {contract.name} {contract.red_team_enabled && ( 🔍 )}

    {contract.description &&

    {contract.description}

    }
    Phase: {contract.phase} Status: {contract.status} Files: {contract.file_count} Tasks: {contract.task_count}
  • ))}
)} setShowCreateModal(false)} onCreated={fetchContracts} />
) }