import { useEffect, useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { api, ApiError, type ApiResponse } from '../lib/api'; import PageHeader from '../components/ui/PageHeader'; import SearchableSelect from '../components/ui/SearchableSelect'; import { useAuthStore } from '../stores/authStore'; import type { PracticeDomain } from '../types'; /** * حوزهٔ فعالیت کلینیک. * * تخصصِ پزشکی نیست — آن برچسبی است برای سایت عمومی. این یک کلید پیکربندی است که * تعیین می‌کند کدام workflow درمان صدا زده شود، پس کدش پایدار می‌ماند و فقط ادمین * پلتفرم می‌تواند حوزهٔ تازه بسازد. */ export default function PracticeDomainSettingsPage() { const qc = useQueryClient(); // محیط جاری با `db_uuid` شناخته می‌شود؛ همان uuid کلینیک است. const clinicUuid = useAuthStore((s) => s.context?.db_uuid ?? null); const { data: domainsData, isLoading } = useQuery({ queryKey: ['practice-domains'], queryFn: () => api.get>('/api/v1/practice-domains'), staleTime: 300_000, }); const { data: clinicData } = useQuery({ queryKey: ['clinic-practice-domain', clinicUuid], queryFn: () => api.get>( `/api/v1/clinic/${clinicUuid}`, ), enabled: !!clinicUuid, }); const current = clinicData?.data?.data?.practice_domain ?? null; const [selected, setSelected] = useState(null); useEffect(() => setSelected(current?.uuid ?? null), [current]); const save = useMutation({ mutationFn: (uuid: string | null) => api.patch>( `/api/v1/clinic/${clinicUuid}`, { practice_domain_uuid: uuid ?? '' }, ), onSuccess: () => { toast.success('حوزهٔ فعالیت ذخیره شد'); qc.invalidateQueries({ queryKey: ['clinic-practice-domain', clinicUuid] }); }, onError: (e) => toast.error(e instanceof ApiError ? e.message : 'ذخیرهٔ حوزهٔ فعالیت ناموفق بود'), }); const domains = domainsData?.data ?? []; const options = domains.map((d) => ({ value: d.uuid, label: d.name })); const chosen = domains.find((d) => d.uuid === selected) ?? null; return ( <>

حوزهٔ فعالیت تعیین می‌کند سیستم چه فرآیند درمانی برای کلینیک شما اجرا کند. این با «تخصص» فرق دارد: تخصص برچسبی است که در سایت عمومی دیده می‌شود، این یک تنظیم است. انتخاب‌نکردنش خطا نیست و کلینیک مثل امروز کار می‌کند.

{isLoading ? ( در حال بارگذاری... ) : ( <> setSelected(v === null ? null : String(v))} placeholder="حوزه‌ای انتخاب نشده" isClearable ariaLabel="حوزهٔ فعالیت کلینیک" /> {chosen && !chosen.has_workflow && ( برای این حوزه هنوز فرآیند اختصاصی تعریف نشده است؛ رفتار پیش‌فرض اعمال می‌شود. )} )}
); }