'use client' import { useState } from 'react' import { createClient } from '@/lib/supabase/client' import { toast } from 'sonner' import type { TablesInsert, TablesUpdate } from '@/types/database' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import type { AreaLead } from '../types' // ─── Area Lead Modal ─────────────────────────────────────────────────────────── export function AreaLeadModal({ lead, onClose, onSaved, spaceId, }: { lead: AreaLead | null onClose: () => void onSaved: (l: AreaLead) => void spaceId: string }) { const isEdit = !!lead const [areaName, setAreaName] = useState(lead?.area_name ?? '') const [memberName, setMemberName] = useState(lead?.lead_handle ?? '') const [contactInfo, setContactInfo] = useState(lead?.description ?? '') const [saving, setSaving] = useState(false) async function handleSave(e: React.FormEvent) { e.preventDefault() if (!areaName.trim() || !memberName.trim()) return setSaving(true) const supabase = createClient() let result if (isEdit) { result = await supabase.from('area_leads').update({ area_name: areaName.trim(), lead_handle: memberName.trim(), description: contactInfo.trim() || null, // TODO(types): remove `as never` after regenerating types/database.ts (missing FK relationship metadata) } satisfies TablesUpdate<'area_leads'> as never).eq('id', lead.id).select('*').single() } else { result = await supabase.from('area_leads').insert({ space_id: spaceId, area_name: areaName.trim(), lead_handle: memberName.trim(), description: contactInfo.trim() || null, // TODO(types): remove `as never` after regenerating types/database.ts (missing FK relationship metadata) } satisfies TablesInsert<'area_leads'> as never).select('*').single() } setSaving(false) if (result.error) { toast.error(result.error.message); return } toast.success(isEdit ? 'Area lead updated' : 'Area lead added') onSaved(result.data as AreaLead) onClose() } return ( { if (!o) onClose() }}> {isEdit ? 'Edit Area Lead' : 'Add Area Lead'}
setAreaName(e.target.value)} className="w-full bg-background border border-border rounded px-3 py-2 font-sans text-sm text-foreground focus:outline-none focus:border-primary transition" placeholder="e.g. Woodshop" required />
setMemberName(e.target.value)} className="w-full bg-background border border-border rounded px-3 py-2 font-sans text-sm text-foreground focus:outline-none focus:border-primary transition" placeholder="e.g. Alice Smith" required />
setContactInfo(e.target.value)} className="w-full bg-background border border-border rounded px-3 py-2 font-sans text-sm text-foreground focus:outline-none focus:border-primary transition" placeholder="e.g. alice@example.com or Slack @alice" />
) }