/** * Shipment Tracking General Tab */ import { useState } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Label } from "@/components/ui/label" import { Switch } from "@/components/ui/switch" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Badge } from "@/components/ui/badge" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/components/ui/command" import { usePro } from "@/contexts/pro-context" import { cn } from "@/lib/utils" import { TrackingSettings, Carrier } from "../../types" import { Check, ChevronsUpDown, Settings, Truck, X } from "lucide-react" interface GeneralTabProps { settings: TrackingSettings carriers: Record updateSetting: (key: K, value: TrackingSettings[K]) => void } export function GeneralTab({ settings, carriers, updateSetting }: GeneralTabProps) { const { isPro } = usePro() const carrierList = Object.entries(carriers) const [importFile, setImportFile] = useState(null) const [isImporting, setIsImporting] = useState(false) const [defaultCarrierOpen, setDefaultCarrierOpen] = useState(false) const [carrierPickerOpen, setCarrierPickerOpen] = useState(false) const enabledCarriers = settings.enabled_carriers || [] const defaultCarrierName = carriers[settings.default_carrier]?.name || 'Select default carrier' const selectedCarrierNames = enabledCarriers .map((id) => carriers[id]?.name) .filter(Boolean) const toggleCarrier = (carrierId: string) => { if (enabledCarriers.includes(carrierId)) { updateSetting('enabled_carriers', enabledCarriers.filter(id => id !== carrierId)) } else { updateSetting('enabled_carriers', [...enabledCarriers, carrierId]) } } const selectDefaultCarrier = (carrierId: string) => { updateSetting('default_carrier', carrierId) setDefaultCarrierOpen(false) } const handleCsvImport = async () => { if (!importFile) return const apiUrl = (window as any).swiftCommerceData?.apiUrl || '/wp-json/swift-commerce/v1' const nonce = (window as any).swiftCommerceData?.restNonce || '' const formData = new FormData() formData.append('file', importFile) setIsImporting(true) try { const response = await fetch(`${apiUrl}/shipment-tracking/import`, { method: 'POST', headers: { 'X-WP-Nonce': nonce, }, body: formData, }) const result = await response.json() if (!response.ok) { throw new Error(result?.message || 'Import failed') } alert(`Imported ${result.imported || 0} tracking rows. Skipped ${result.skipped || 0}.`) setImportFile(null) } catch (error) { alert(error instanceof Error ? error.message : 'Import failed') } finally { setIsImporting(false) } } return (
{/* General Settings */} General Settings Configure basic shipment tracking options
No carrier found. {carrierList.map(([id, carrier]) => ( selectDefaultCarrier(id)} > {carrier.name} ))}

Pre-selected carrier when adding tracking

Mark orders as completed when tracking is added

updateSetting('auto_complete_order', checked)} />
{/* Display Settings */} Display Settings Configure where tracking information appears

Include tracking info in order completion emails

updateSetting('show_in_order_email', checked)} />
{settings.show_in_order_email && (
)}

Display tracking in customer's order view

updateSetting('show_in_my_account', checked)} />
{settings.show_in_my_account && (
)}

Add tracking summaries to admin orders and customer order lists

updateSetting('show_in_orders_list', checked)} />
{/* Shipping Carriers */} Shipping Carriers Search and select carriers available when adding tracking. No carrier found. {carrierList.map(([id, carrier]) => { const isEnabled = enabledCarriers.includes(id) return ( toggleCarrier(id)} > {carrier.name} ) })} {selectedCarrierNames.length > 0 ? (
{enabledCarriers.map((id) => { const carrier = carriers[id] if (!carrier) return null return ( {carrier.name} ) })}
) : (

No carriers enabled yet.

)}
{/* CSV Import */} {isPro && ( CSV Import Bulk add tracking details to existing WooCommerce orders.
setImportFile(event.target.files?.[0] || null)} />

Required headers: order_id, tracking_number. Optional: carrier, date_shipped, estimated_delivery_date, custom_url, send_notification.

)}
) }