/** * Carrier Form Component for Create/Edit */ import React, { useState } from 'react'; import { Eye, EyeOff } from 'lucide-react'; import { Carrier, CarrierStatus, CreateCarrierInput, UpdateCarrierInput } from '@/types/carrier'; interface CarrierFormProps { carrier?: Carrier; onSubmit: (data: CreateCarrierInput | UpdateCarrierInput) => Promise; onCancel: () => void; } export const CarrierForm: React.FC = ({ carrier, onSubmit, onCancel }) => { const [formData, setFormData] = useState({ name: carrier?.name || '', scac: carrier?.scac || '', status: carrier?.status || CarrierStatus.ACTIVE, apiEndpoint: carrier?.apiEndpoint || '', apiKey: carrier?.apiKey || '', priority: carrier?.priority?.toString() || '1', rateLimit: carrier?.rateLimit?.toString() || '100', timeout: carrier?.timeout?.toString() || '5000', }); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); const [showApiKey, setShowApiKey] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSubmitting(true); setError(null); try { await onSubmit({ name: formData.name, scac: formData.scac, status: formData.status, apiEndpoint: formData.apiEndpoint || undefined, apiKey: formData.apiKey || undefined, priority: parseInt(formData.priority), rateLimit: parseInt(formData.rateLimit), timeout: parseInt(formData.timeout), }); } catch (err: any) { setError(err.message || 'An error occurred'); } finally { setSubmitting(false); } }; return (
{error && (

{error}

)}
{/* Name */}
setFormData({ ...formData, name: e.target.value })} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* SCAC */}
setFormData({ ...formData, scac: e.target.value.toUpperCase() })} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* Status */}
{/* Priority */}
setFormData({ ...formData, priority: e.target.value })} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* API Endpoint */}
setFormData({ ...formData, apiEndpoint: e.target.value })} placeholder="https://api.carrier.com/v1" className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* API Key */}
setFormData({ ...formData, apiKey: e.target.value })} placeholder="Enter API key" className="w-full px-3 py-2 pr-10 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* Rate Limit */}
setFormData({ ...formData, rateLimit: e.target.value })} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* Timeout */}
setFormData({ ...formData, timeout: e.target.value })} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* Actions */}
); };