import { useState } from 'react' import { useMutation, useQueryClient } from '@tanstack/react-query' import { sitesApi, type SiteResponse, type SiteCreate, type SiteUpdate } from '@/lib/api' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Button } from '@/components/ui/button' interface SiteFormDialogProps { open: boolean onOpenChange: (open: boolean) => void tenantId: string site?: SiteResponse | null } export function SiteFormDialog({ open, onOpenChange, tenantId, site }: SiteFormDialogProps) { const queryClient = useQueryClient() const isEdit = !!site const [name, setName] = useState(site?.name ?? '') const [address, setAddress] = useState(site?.address ?? '') const [latitude, setLatitude] = useState(site?.latitude != null ? String(site.latitude) : '') const [longitude, setLongitude] = useState(site?.longitude != null ? String(site.longitude) : '') const [elevation, setElevation] = useState(site?.elevation != null ? String(site.elevation) : '') const [notes, setNotes] = useState(site?.notes ?? '') const createMutation = useMutation({ mutationFn: (data: SiteCreate) => sitesApi.create(tenantId, data), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ['sites', tenantId] }) onOpenChange(false) }, }) const updateMutation = useMutation({ mutationFn: (data: SiteUpdate) => sitesApi.update(tenantId, site!.id, data), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ['sites', tenantId] }) onOpenChange(false) }, }) const isPending = createMutation.isPending || updateMutation.isPending function handleSubmit(e: React.FormEvent) { e.preventDefault() const data = { name: name.trim(), address: address.trim() || null, latitude: latitude ? parseFloat(latitude) : null, longitude: longitude ? parseFloat(longitude) : null, elevation: elevation ? parseFloat(elevation) : null, notes: notes.trim() || null, } if (isEdit) { updateMutation.mutate(data) } else { createMutation.mutate(data) } } return ( {isEdit ? 'Edit Site' : 'Create Site'} {isEdit ? 'Update site details.' : 'Add a new site to organize devices by physical location.'}
setName(e.target.value)} placeholder="Main Office" required />
setAddress(e.target.value)} placeholder="123 Main St, City, State" />
setLatitude(e.target.value)} placeholder="-33.8688" />
setLongitude(e.target.value)} placeholder="151.2093" />
setElevation(e.target.value)} placeholder="58" />