import React, { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { ArrowRightIcon, BuildingOffice2Icon, PencilIcon, CheckIcon, XMarkIcon, } from '@heroicons/react/24/outline'; import { toast } from 'sonner'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; import { formatDate } from '../lib/utils'; const HUES_LIST = [256, 205, 162, 295, 272]; interface ClinicDetail { uuid: string; name: string; is_active: boolean; phone: string | null; logo: string | null; doctors_count?: number; created_at?: number; } export default function ClinicDetailPage() { const { uuid } = useParams<{ uuid: string }>(); const navigate = useNavigate(); const qc = useQueryClient(); const [editOpen, setEditOpen] = useState(false); const [editName, setEditName] = useState(''); const [editPhone, setEditPhone] = useState(''); const { data, isLoading } = useQuery({ queryKey: ['clinic-detail', uuid], queryFn: () => api.get>(`/api/v1/clinic/${uuid}`), enabled: !!uuid, }); const clinic: ClinicDetail | undefined = data?.data; useEffect(() => { if (clinic) { setEditName(clinic.name ?? ''); setEditPhone(clinic.phone ?? ''); } }, [clinic]); const toggleMutation = useMutation({ mutationFn: () => api.patch>(`/api/v1/admin/clinic/${uuid}/status`, {}), onSuccess: () => { toast.success('وضعیت کلینیک تغییر کرد'); qc.invalidateQueries({ queryKey: ['clinic-detail', uuid] }); qc.invalidateQueries({ queryKey: ['admin-clinics'] }); }, onError: (err: Error) => toast.error(err.message), }); const updateMutation = useMutation({ mutationFn: (d: { name: string; phone?: string }) => api.patch>(`/api/v1/clinic/${uuid}`, d), onSuccess: () => { toast.success('اطلاعات کلینیک ذخیره شد'); setEditOpen(false); qc.invalidateQueries({ queryKey: ['clinic-detail', uuid] }); qc.invalidateQueries({ queryKey: ['admin-clinics'] }); }, onError: (err: Error) => toast.error(err.message), }); const hue = HUES_LIST[(uuid?.charCodeAt(0) ?? 0) % HUES_LIST.length]; if (isLoading) { return (
{Array.from({ length: 5 }).map((_, i) => (
))}
); } if (!clinic) { return (

کلینیک یافت نشد

); } return (
{/* Header */}

{clinic.name}

جزئیات کلینیک
{/* Main info card */}
{clinic.logo ? ( ) : (
{clinic.name?.[0] ?? '?'}
)}
{clinic.name}
{clinic.is_active ? 'فعال' : 'غیرفعال'}
{clinic.phone} : '—'} /> {clinic.doctors_count !== undefined && ( {clinic.doctors_count} پزشک } /> )} {clinic.created_at && ( )}
{/* Edit modal */} {editOpen && (
setEditOpen(false)}>
e.stopPropagation()}>
ویرایش کلینیک
setEditName(e.target.value)} placeholder="نام کلینیک" />
setEditPhone(e.target.value)} placeholder="مثال: 021-12345678" dir="ltr" />
)}
); } function InfoCard({ label, value }: { label: string; value: React.ReactNode }) { return (
{label}
{value}
); }