import { isRecordChanged } from '../../../../utils/recordChanged'; import { useState } from 'react'; import { Building2, Edit, MapPin, Phone, Plus, Stethoscope, Trash2, Users } from 'lucide-react'; import { useFhirOutsideProviders } from '../../../../hooks'; import type { OutsideProvidersOpening } from '../../../../hooks/useFhirOutsideProviders'; import { useAuthServiceContext } from '../../../../services'; import { OutsideProviderEntry } from '../../../../utils/outsideProviders.ts'; import { Sheet, SheetContent } from '../../../../components/ui/sheet.tsx'; import { Button } from '../../../../components/ui/button.tsx'; import { Skeleton } from '../../../../components/ui/skeleton.tsx'; import OutsideProviderForm from './OutsideProviderForm.tsx'; const OutsideProviders = () => { const { userRole, USER_ROLES } = useAuthServiceContext(); const { loading, saving, error, entries, openEditor, saveEntry, removeEntry } = useFhirOutsideProviders(); const [isFormOpen, setIsFormOpen] = useState(false); const [editingEntry, setEditingEntry] = useState(); // The team version and lifetime the open form was started on; its save is refused against any other. const [opening, setOpening] = useState(); const [removeError, setRemoveError] = useState(); const canEdit = !!userRole && [USER_ROLES.PATIENT, USER_ROLES.RELATED_PERSON].includes(userRole as string); const openAdd = () => { setRemoveError(undefined); setEditingEntry(undefined); setOpening(openEditor()); setIsFormOpen(true); }; const openEdit = (entry: OutsideProviderEntry) => { setRemoveError(undefined); setEditingEntry(entry); setOpening(openEditor()); setIsFormOpen(true); }; const handleRemove = async (entry: OutsideProviderEntry) => { setRemoveError(undefined); try { await removeEntry(entry.localId); } catch (err) { const message = err instanceof Error ? err.message : String(err); setRemoveError(isRecordChanged(err) ? message : message.includes('403') || /forbidden|not authorized/i.test(message) ? "Your account can't save this yet — please contact support." : 'Failed to remove. Please try again.'); } }; return (

Outside Providers

Doctors, clinics, or pharmacies you use outside Akashic.

{canEdit && ( )}
{error ? (

Could not load Outside Providers

Try again later.

) : loading ? (
{[...Array(3)].map((_, index) => (
))}
) : entries.length === 0 ? (

No outside providers yet

List doctors, clinics, or pharmacies you use outside Akashic so your care team has the full picture.

{canEdit && ( )}
) : (
{removeError && (

{removeError}

)} {entries.map(entry => (
{entry.kind === 'practitioner' ? : }

{entry.name}

{entry.specialty && {entry.specialty}} {entry.phone && ( {entry.phone} )} {entry.city && ( {entry.city} )}
{canEdit && (
)}
))}
)} { if (!open && !saving) setIsFormOpen(false); }} > {isFormOpen && ( saveEntry(entry, localId, opening)} onDone={() => setIsFormOpen(false)} /> )}
); }; export default OutsideProviders;