/** * Organization Settings Page * * Manage organization details */ 'use client'; import { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { organizationsApi } from '@/lib/api'; export default function OrganizationSettingsPage() { const queryClient = useQueryClient(); const [isEditing, setIsEditing] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); const { data: organization, isLoading } = useQuery({ queryKey: ['organization', 'current'], queryFn: () => organizationsApi.getCurrent(), }); const [formData, setFormData] = useState({ name: '', contactEmail: '', contactPhone: '', address: { street: '', city: '', postalCode: '', country: '', }, }); const updateMutation = useMutation({ mutationFn: (data: typeof formData) => organizationsApi.update(organization?.id || '', data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['organization'] }); setSuccess('Organization updated successfully'); setIsEditing(false); setTimeout(() => setSuccess(''), 3000); }, onError: (err: any) => { setError(err.response?.data?.message || 'Failed to update organization'); }, }); const handleEdit = () => { if (organization) { setFormData({ name: organization.name, contactEmail: organization.contactEmail, contactPhone: organization.contactPhone, address: organization.address, }); setIsEditing(true); setError(''); setSuccess(''); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); updateMutation.mutate(formData); }; const handleCancel = () => { setIsEditing(false); setError(''); }; if (isLoading) { return (
); } if (!organization) { return (

Organization not found

); } return (

Organization Settings

Manage your organization information

{success && (
{success}
)} {error && (
{error}
)}

Organization Details

{!isEditing && ( )}
{/* Basic Info */}
{isEditing ? ( setFormData({ ...formData, name: e.target.value })} className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.name}

)}

{organization.type.replace('_', ' ')}

{isEditing ? ( setFormData({ ...formData, contactEmail: e.target.value })} className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.contactEmail}

)}
{isEditing ? ( setFormData({ ...formData, contactPhone: e.target.value })} className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.contactPhone}

)}
{/* Address */}

Address

{isEditing ? ( setFormData({ ...formData, address: { ...formData.address, street: e.target.value, }, }) } className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.address.street}

)}
{isEditing ? ( setFormData({ ...formData, address: { ...formData.address, city: e.target.value, }, }) } className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.address.city}

)}
{isEditing ? ( setFormData({ ...formData, address: { ...formData.address, postalCode: e.target.value, }, }) } className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.address.postalCode}

)}
{isEditing ? ( setFormData({ ...formData, address: { ...formData.address, country: e.target.value, }, }) } className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm px-3 py-2 border" required /> ) : (

{organization.address.country}

)}
{isEditing && (
)}
); }