/** * Carrier Management Page */ import React, { useState, useEffect } from 'react'; import { Carrier, CarrierStatus, CreateCarrierInput, UpdateCarrierInput } from '@/types/carrier'; import { CarrierForm } from '@/components/admin/CarrierForm'; export const CarrierManagement: React.FC = () => { const [carriers, setCarriers] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [showForm, setShowForm] = useState(false); const [editingCarrier, setEditingCarrier] = useState(null); useEffect(() => { fetchCarriers(); }, []); const fetchCarriers = async () => { setLoading(true); setError(null); try { const response = await fetch('/api/v1/carriers', { headers: { Authorization: `Bearer ${localStorage.getItem('accessToken')}`, }, }); if (!response.ok) throw new Error('Failed to fetch carriers'); const data = await response.json(); setCarriers(data); } catch (err: any) { setError(err.message); } finally { setLoading(false); } }; const handleCreate = async (data: CreateCarrierInput) => { const response = await fetch('/api/v1/carriers', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${localStorage.getItem('accessToken')}`, }, body: JSON.stringify(data), }); if (!response.ok) throw new Error('Failed to create carrier'); await fetchCarriers(); setShowForm(false); }; const handleUpdate = async (data: UpdateCarrierInput) => { if (!editingCarrier) return; const response = await fetch(`/api/v1/carriers/${editingCarrier.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${localStorage.getItem('accessToken')}`, }, body: JSON.stringify(data), }); if (!response.ok) throw new Error('Failed to update carrier'); await fetchCarriers(); setEditingCarrier(null); setShowForm(false); }; const handleDelete = async (carrierId: string) => { if (!confirm('Are you sure you want to delete this carrier?')) return; try { const response = await fetch(`/api/v1/carriers/${carrierId}`, { method: 'DELETE', headers: { Authorization: `Bearer ${localStorage.getItem('accessToken')}`, }, }); if (!response.ok) throw new Error('Failed to delete carrier'); await fetchCarriers(); } catch (err: any) { alert(`Error: ${err.message}`); } }; const handleToggleStatus = async (carrier: Carrier) => { const newStatus = carrier.status === CarrierStatus.ACTIVE ? CarrierStatus.INACTIVE : CarrierStatus.ACTIVE; try { await handleUpdate({ status: newStatus }); } catch (err: any) { alert(`Error: ${err.message}`); } }; return (
{/* Header */}

Carrier Management

Manage carrier integrations and configurations

{/* Error */} {error && (

{error}

)} {/* Form Modal */} {showForm && (

{editingCarrier ? 'Edit Carrier' : 'Add New Carrier'}

{ setShowForm(false); setEditingCarrier(null); }} />
)} {/* Carriers Grid */} {loading ? (
Loading carriers...
) : carriers.length === 0 ? (

No carriers configured

Get started by adding your first carrier integration

) : (
{carriers.map(carrier => (
{/* Header */}

{carrier.name}

SCAC: {carrier.scac}

{carrier.status.toUpperCase()}
{/* Details */}
Priority: {carrier.priority}
Rate Limit: {carrier.rateLimit || 'N/A'} req/min
Timeout: {carrier.timeout || 'N/A'} ms
{/* Actions */}
))}
)}
); };