forked from RiseUP/riseup_squad_03
modified: src/App.jsx
modified: src/components/AppShell.jsx modified: src/config/api.js modified: src/config/permissions.js modified: src/data/mockData.js modified: src/hooks/useAgenda.js modified: src/hooks/useAuth.js modified: src/mappers/appointmentMapper.js modified: src/pages/AgendaPage.jsx modified: src/pages/AuthPages.jsx modified: src/pages/HomePage.jsx modified: src/pages/MedicalRecordsPage.jsx modified: src/pages/MessagesPage.jsx modified: src/pages/NotFoundPage.jsx modified: src/pages/PatientsPage.jsx modified: src/pages/ReportsPage.jsx modified: src/pages/TeamPage.jsx modified: src/pages/UsersPage.jsx modified: src/pages/VisitsPage.jsx modified: src/repositories/authRepository.js new file: src/repositories/availabilityRepository.js modified: src/repositories/communicationRepository.js modified: src/repositories/patientRepository.js modified: src/repositories/professionalRepository.js modified: src/repositories/profileRepository.js modified: src/repositories/reportRepository.js modified: src/repositories/repositoryUtils.js modified: src/repositories/settingsRepository.js modified: src/repositories/userRepository.js modified: src/repositories/visitRepository.js
This commit is contained in:
@@ -15,8 +15,8 @@ const statusConfig = {
|
||||
}
|
||||
|
||||
const orderOptions = [
|
||||
{ label: 'Criacao mais recente', value: 'created_at.desc' },
|
||||
{ label: 'Criacao mais antiga', value: 'created_at.asc' },
|
||||
{ label: 'Criação mais recente', value: 'created_at.desc' },
|
||||
{ label: 'Criação mais antiga', value: 'created_at.asc' },
|
||||
{ label: 'Prazo mais proximo', value: 'due_at.asc' },
|
||||
{ label: 'Prazo mais distante', value: 'due_at.desc' },
|
||||
]
|
||||
@@ -80,7 +80,7 @@ export function ReportsPage() {
|
||||
return {
|
||||
id: String(professional.id || ''),
|
||||
createdByValue,
|
||||
name: professional.name || 'Medico(a)',
|
||||
name: professional.name || 'Médico(a)',
|
||||
}
|
||||
})
|
||||
.filter((professional) => {
|
||||
@@ -107,7 +107,7 @@ export function ReportsPage() {
|
||||
() =>
|
||||
reports.map((report) => ({
|
||||
...report,
|
||||
patientName: patientNameById[String(report.patientId || '')] || 'Paciente nao encontrado',
|
||||
patientName: patientNameById[String(report.patientId || '')] || 'Paciente não encontrado',
|
||||
createdByName: professionalNameByCreatedBy[String(report.createdBy || '')] || report.createdBy || 'Sistema',
|
||||
})),
|
||||
[patientNameById, professionalNameByCreatedBy, reports],
|
||||
@@ -146,7 +146,7 @@ export function ReportsPage() {
|
||||
setPage(1)
|
||||
} catch (loadError) {
|
||||
console.error(loadError)
|
||||
setError(loadError.message || 'Erro ao carregar relatorios medicos.')
|
||||
setError(loadError.message || 'Erro ao carregar relatórios médicos.')
|
||||
setReports([])
|
||||
setPage(1)
|
||||
} finally {
|
||||
@@ -238,7 +238,7 @@ export function ReportsPage() {
|
||||
setEditorOpen(false)
|
||||
await loadReports()
|
||||
} catch (saveError) {
|
||||
alert(saveError.message || 'Erro ao salvar relatorio medico.')
|
||||
alert(saveError.message || 'Erro ao salvar relatório médico.')
|
||||
} finally {
|
||||
setSaving(false)
|
||||
}
|
||||
@@ -248,8 +248,8 @@ export function ReportsPage() {
|
||||
<div className="mx-auto max-w-7xl space-y-6 text-[#e5e5e5]">
|
||||
<div className="flex flex-col items-start justify-between gap-4 md:flex-row md:items-center">
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold tracking-tight text-[#e5e5e5]">Relatorios medicos</h1>
|
||||
<p className="mt-1 text-sm text-[#a3a3a3]">Consulta, criacao e edicao de relatorios medicos.</p>
|
||||
<h1 className="text-2xl font-bold tracking-tight text-[#e5e5e5]">Relatórios médicos</h1>
|
||||
<p className="mt-1 text-sm text-[#a3a3a3]">Consulta, criação e edição de relatórios médicos.</p>
|
||||
</div>
|
||||
<button
|
||||
className="inline-flex h-10 items-center justify-center gap-2 rounded-lg bg-[#3b82f6] px-4 text-sm font-medium text-white transition hover:bg-[#2563eb]"
|
||||
@@ -257,7 +257,7 @@ export function ReportsPage() {
|
||||
type="button"
|
||||
>
|
||||
<ReportIcon name="plus" />
|
||||
Novo relatorio
|
||||
Novo relatório
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -324,7 +324,7 @@ export function ReportsPage() {
|
||||
</select>
|
||||
</FilterField>
|
||||
|
||||
<FilterField label="Ordenacao">
|
||||
<FilterField label="Ordenação">
|
||||
<select
|
||||
className={inputClass}
|
||||
onChange={(event) => {
|
||||
@@ -358,14 +358,14 @@ export function ReportsPage() {
|
||||
<th className="w-[18%] px-4 py-3">Solicitante</th>
|
||||
<th className="w-[14%] px-4 py-3">Criado em</th>
|
||||
<th className="w-[10%] px-4 py-3">Status</th>
|
||||
<th className="sticky right-0 w-[8.5rem] bg-[#171717] px-4 py-3 text-right">Acoes</th>
|
||||
<th className="sticky right-0 w-[8.5rem] bg-[#171717] px-4 py-3 text-right">Ações</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="divide-y divide-[#404040] bg-[#262626]">
|
||||
{loading ? (
|
||||
<tr>
|
||||
<td className="px-4 py-8 text-center text-sm text-[#a3a3a3]" colSpan={7}>
|
||||
Carregando relatorios medicos...
|
||||
Carregando relatórios médicos...
|
||||
</td>
|
||||
</tr>
|
||||
) : paginatedReports.length ? (
|
||||
@@ -380,7 +380,7 @@ export function ReportsPage() {
|
||||
) : (
|
||||
<tr>
|
||||
<td className="px-4 py-8 text-center text-sm text-[#a3a3a3]" colSpan={7}>
|
||||
Nenhum relatorio encontrado com os filtros atuais.
|
||||
Nenhum relatório encontrado com os filtros atuais.
|
||||
</td>
|
||||
</tr>
|
||||
)}
|
||||
@@ -391,7 +391,7 @@ export function ReportsPage() {
|
||||
<div className="mt-4 flex flex-col gap-4 border-t border-[#404040] pt-4 sm:flex-row sm:items-center sm:justify-between">
|
||||
<p className="text-xs text-[#a3a3a3]">
|
||||
Mostrando {enrichedReports.length ? startIndex + 1 : 0}-{Math.min(startIndex + ITEMS_PER_PAGE, enrichedReports.length)} de{' '}
|
||||
{enrichedReports.length} relatorios
|
||||
{enrichedReports.length} relatórios
|
||||
</p>
|
||||
<div className="flex items-center gap-2">
|
||||
<PageButton disabled={currentPage === 1} onClick={() => setPage(currentPage - 1)}>
|
||||
@@ -480,7 +480,7 @@ function ReportEditorModal({ editor, onChange, onClose, onSave, patientOptions,
|
||||
>
|
||||
<div className="flex items-center justify-between border-b border-[#404040] px-6 py-4">
|
||||
<h2 className="text-lg font-bold text-[#e5e5e5]">
|
||||
{editor.id ? 'Editar relatorio medico' : 'Novo relatorio medico'}
|
||||
{editor.id ? 'Editar relatório médico' : 'Novo relatório médico'}
|
||||
</h2>
|
||||
<button className="rounded-lg p-1.5 transition hover:bg-[#2a2a2a]" onClick={onClose} type="button">
|
||||
<ReportIcon className="size-4 text-[#a3a3a3]" name="x" />
|
||||
@@ -556,29 +556,29 @@ function ReportEditorModal({ editor, onChange, onClose, onSave, patientOptions,
|
||||
</DarkField>
|
||||
</div>
|
||||
|
||||
<DarkField label="Diagnostico">
|
||||
<DarkField label="Diagnóstico">
|
||||
<textarea
|
||||
className={textareaClass}
|
||||
onChange={(event) => updateField('diagnosis', event.target.value)}
|
||||
placeholder="Diagnostico do relatorio"
|
||||
placeholder="Diagnóstico do relatório"
|
||||
value={editor.diagnosis}
|
||||
/>
|
||||
</DarkField>
|
||||
|
||||
<DarkField label="Conclusao">
|
||||
<DarkField label="Conclusão">
|
||||
<textarea
|
||||
className={textareaClass}
|
||||
onChange={(event) => updateField('conclusion', event.target.value)}
|
||||
placeholder="Conclusao do relatorio"
|
||||
placeholder="Conclusão do relatório"
|
||||
value={editor.conclusion}
|
||||
/>
|
||||
</DarkField>
|
||||
|
||||
<DarkField label="Conteudo HTML">
|
||||
<DarkField label="Conteúdo HTML">
|
||||
<textarea
|
||||
className={`${textareaClass} min-h-72`}
|
||||
onChange={(event) => updateField('contentHtml', event.target.value)}
|
||||
placeholder="<p>Conteudo do relatorio</p>"
|
||||
placeholder="<p>Conteúdo do relatório</p>"
|
||||
value={editor.contentHtml}
|
||||
/>
|
||||
</DarkField>
|
||||
@@ -622,7 +622,7 @@ function ReportEditorModal({ editor, onChange, onClose, onSave, patientOptions,
|
||||
type="button"
|
||||
>
|
||||
<ReportIcon className="size-3.5" name="save" />
|
||||
{saving ? 'Salvando...' : 'Salvar relatorio'}
|
||||
{saving ? 'Salvando...' : 'Salvar relatório'}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -639,8 +639,8 @@ function ReportViewModal({ onClose, report }) {
|
||||
>
|
||||
<div className="flex items-center justify-between border-b border-[#404040] px-6 py-4">
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-[#e5e5e5]">Relatorio medico</h2>
|
||||
<p className="mt-1 text-xs text-[#a3a3a3]">{report.orderNumber || 'Sem numero'} </p>
|
||||
<h2 className="text-lg font-bold text-[#e5e5e5]">Relatório médico</h2>
|
||||
<p className="mt-1 text-xs text-[#a3a3a3]">{report.orderNumber || 'Sem número'} </p>
|
||||
</div>
|
||||
<button className="rounded-lg p-1.5 transition hover:bg-[#2a2a2a]" onClick={onClose} type="button">
|
||||
<ReportIcon className="size-4 text-[#a3a3a3]" name="x" />
|
||||
@@ -663,8 +663,8 @@ function ReportViewModal({ onClose, report }) {
|
||||
</div>
|
||||
|
||||
<div className="mt-4 grid gap-4 md:grid-cols-2">
|
||||
<DetailBlock label="Diagnostico" value={report.diagnosis || '-'} />
|
||||
<DetailBlock label="Conclusao" value={report.conclusion || '-'} />
|
||||
<DetailBlock label="Diagnóstico" value={report.diagnosis || '-'} />
|
||||
<DetailBlock label="Conclusão" value={report.conclusion || '-'} />
|
||||
</div>
|
||||
|
||||
<div className="mt-4 flex flex-wrap gap-3 text-xs text-[#a3a3a3]">
|
||||
@@ -677,14 +677,14 @@ function ReportViewModal({ onClose, report }) {
|
||||
</div>
|
||||
|
||||
<div className="mt-6 rounded-xl border border-[#404040] bg-[#1a1a1a] p-5">
|
||||
<p className="mb-3 text-xs font-semibold uppercase tracking-wide text-[#a3a3a3]">Conteudo HTML</p>
|
||||
<p className="mb-3 text-xs font-semibold uppercase tracking-wide text-[#a3a3a3]">Conteúdo HTML</p>
|
||||
{report.contentHtml ? (
|
||||
<div
|
||||
className="prose prose-invert max-w-none text-sm text-[#e5e5e5]"
|
||||
dangerouslySetInnerHTML={{ __html: report.contentHtml }}
|
||||
/>
|
||||
) : (
|
||||
<p className="text-sm text-[#a3a3a3]">Nenhum conteudo HTML informado.</p>
|
||||
<p className="text-sm text-[#a3a3a3]">Nenhum conteúdo HTML informado.</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user