import { useMemo, useState } from 'react' import { FeatureCallout } from '../components/FeatureState.jsx' import { visitRepository } from '../repositories/visitRepository.js' const tabs = [ { label: 'Fila ativa', value: 'ativa' }, { label: 'Em atendimento', value: 'atendimento' }, { label: 'Finalizadas', value: 'finalizadas' }, ] const cardClass = 'rounded-2xl border border-[#404040] bg-[#262626] shadow-sm' export function VisitsPage({ navigate }) { const careQueue = useMemo(() => visitRepository.getCareQueue(), []) const stages = useMemo(() => visitRepository.getStages(), []) const [activeTab, setActiveTab] = useState('ativa') const visibleQueue = useMemo(() => { if (activeTab === 'finalizadas') { return careQueue.filter((item) => isFinalizedStatus(item.status)) } if (activeTab === 'atendimento') { return careQueue.filter((item) => !isFinalizedStatus(item.status) && !isWaitingDoctorStatus(item.status)) } return careQueue.filter((item) => !isFinalizedStatus(item.status)) }, [activeTab, careQueue]) const summary = [ { label: 'Na fila', value: careQueue.filter((item) => !isFinalizedStatus(item.status)).length, tone: 'text-[#3b82f6]' }, { label: 'Alta prioridade', value: careQueue.filter((item) => item.priority === 'Alta').length, tone: 'text-red-400' }, { label: 'Finalizadas', value: careQueue.filter((item) => isFinalizedStatus(item.status)).length, tone: 'text-emerald-400' }, ] return (

Consultas

Fila de atendimento, triagem e acompanhamento clínico local.

{summary.map((item) => (

{item.label}

{item.value}

))}
{tabs.map((tab) => ( ))}

{visibleQueue.length} registros no filtro atual

{visibleQueue.map((item) => (

{item.reason}

))} {visibleQueue.length === 0 ? (

Fila vazia

Nenhuma consulta caiu neste estado. Troque de aba para ver a fila mockada.

) : null}
{stages.map((stage, index) => (

Etapa {index + 1}

{stage.title}

{stage.description}

))}
) } function Info({ label, value }) { return (

{label}

{value}

) } function PriorityPill({ priority }) { const className = priority === 'Alta' ? 'bg-red-500/20 text-red-400' : priority === 'Baixa' ? 'bg-emerald-500/20 text-emerald-400' : 'bg-amber-500/20 text-amber-400' return {priority} } function isFinalizedStatus(status) { return normalizeStatus(status) === 'finalizada' } function isWaitingDoctorStatus(status) { return normalizeStatus(status) === 'aguardando_medico' } function normalizeStatus(status) { return String(status || '') .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() .trim() .replace(/[^a-z0-9]+/g, '_') .replace(/^_+|_+$/g, '') }