'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 { updatePropertyAddress, updatePropertyPrivacy, deleteProperty } from '../lib/properties/actions' import type { Property } from '../lib/properties/types' interface PropertySettingsDialogProps { property: Property open: boolean onOpenChange: (open: boolean) => void onUpdate?: () => void onDelete?: () => void } export function PropertySettingsDialog({ property, open, onOpenChange, onUpdate, onDelete, }: PropertySettingsDialogProps) { const [loading, setLoading] = useState(false) const [isDeleting, setIsDeleting] = useState(false) const [isPrivate, setIsPrivate] = useState(property.is_private) const [address, setAddress] = useState({ street_number: property.address.street_number || '', route: property.address.route || '', city: property.address.city || '', state: property.address.state || '', postal_code: property.address.postal_code || '', country: property.address.country || 'US', }) const handleSave = async () => { setLoading(true) try { // Update privacy if changed if (isPrivate !== property.is_private) { const privacyResult = await updatePropertyPrivacy(property.id, isPrivate) if (!privacyResult.success) { alert(`Failed to update privacy: ${privacyResult.error}`) setLoading(false) return } } // Update address if changed const addressChanged = address.street_number !== (property.address.street_number || '') || address.route !== (property.address.route || '') || address.city !== (property.address.city || '') || address.state !== (property.address.state || '') || address.postal_code !== (property.address.postal_code || '') || address.country !== (property.address.country || 'US') if (addressChanged) { const addressResult = await updatePropertyAddress(property.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 property? This action cannot be undone.')) { return } setIsDeleting(true) try { const result = await deleteProperty(property.id) if (result.success) { onDelete?.() onOpenChange(false) } else { alert(`Failed to delete property: ${result.error}`) } } catch (error) { alert('Failed to delete property') } finally { setIsDeleting(false) } } return ( Property Settings Update property address and privacy settings
{/* Privacy Toggle */}
Privacy
{isPrivate ? 'Only you can view this property' : 'Anyone can view this property'}
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 property, there is no going back. Please be certain.

) }