'use client' import { useState } from 'react' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/primitives/dialog' import { Switch } from '@/components/ui/primitives/switch' import { updateProjectAddress, updateProjectPrivacy, deleteProject } from '../lib/projects/actions' import type { Project } from '../lib/projects/types' interface ProjectSettingsDialogProps { project: Project open: boolean onOpenChange: (open: boolean) => void onUpdate?: () => void onDelete?: () => void } export function ProjectSettingsDialog({ project, open, onOpenChange, onUpdate, onDelete, }: ProjectSettingsDialogProps) { const [loading, setLoading] = useState(false) const [isDeleting, setIsDeleting] = useState(false) const [isPrivate, setIsPrivate] = useState(project.is_private) const [address, setAddress] = useState({ street_number: project.address?.street_number || '', route: project.address?.route || '', city: project.address?.city || '', state: project.address?.state || '', postal_code: project.address?.postal_code || '', country: project.address?.country || 'US', }) const handleSave = async () => { setLoading(true) try { // Update privacy if changed if (isPrivate !== project.is_private) { const privacyResult = await updateProjectPrivacy(project.id, isPrivate) if (!privacyResult.success) { alert(`Failed to update privacy: ${privacyResult.error}`) setLoading(false) return } } // Update address if changed and project has an address if (project.address) { const addressChanged = address.street_number !== (project.address.street_number || '') || address.route !== (project.address.route || '') || address.city !== (project.address.city || '') || address.state !== (project.address.state || '') || address.postal_code !== (project.address.postal_code || '') || address.country !== (project.address.country || 'US') if (addressChanged) { const addressResult = await updateProjectAddress(project.id, address) if (!addressResult.success) { alert(`Failed to update address: ${addressResult.error}`) setLoading(false) return } } } onUpdate?.() onOpenChange(false) } catch (error) { alert('Failed to save settings') } finally { setLoading(false) } } const handleDelete = async () => { if (!confirm('Are you sure you want to delete this project? This action cannot be undone.')) { return } setIsDeleting(true) try { const result = await deleteProject(project.id) if (result.success) { onDelete?.() onOpenChange(false) } else { alert(`Failed to delete project: ${result.error}`) } } catch (error) { alert('Failed to delete project') } finally { setIsDeleting(false) } } return ( Project Settings Update project address and privacy settings
{/* Privacy Toggle */}
Privacy
{isPrivate ? 'Only you can view this project' : 'Anyone can view this project'}
Public setIsPrivate(!checked)} />
{/* Address Fields */}

Address

setAddress({ ...address, street_number: e.target.value })} className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm" placeholder="123" />
setAddress({ ...address, route: e.target.value })} className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm" placeholder="Main St" />
setAddress({ ...address, city: e.target.value })} className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm" placeholder="San Francisco" />
setAddress({ ...address, state: e.target.value })} className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm" placeholder="CA" />
setAddress({ ...address, postal_code: e.target.value })} className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm" placeholder="94102" />
setAddress({ ...address, country: e.target.value })} className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm" placeholder="US" />
{/* Danger Zone */}

Danger Zone

Once you delete a project, there is no going back. Please be certain.

) }