fix(principal): integra auth, agenda e laudos com a api

This commit is contained in:
EdilbertoC
2026-04-28 10:22:54 -03:00
parent d576fb9784
commit 7199c107f2
20 changed files with 1121 additions and 331 deletions

View File

@@ -18,6 +18,7 @@ const statusConfig = {
const emptyMessage = {
patient: '',
phone: '',
channel: 'whatsapp',
template: 'Lembrete 48h',
content: '',
@@ -79,6 +80,7 @@ export function MessagesPage() {
function openTemplate(template) {
setComposer({
patient: '',
phone: '',
channel: template.channel,
template: template.name,
content: template.content,
@@ -86,13 +88,33 @@ export function MessagesPage() {
setComposerOpen(true)
}
function submitMessage(event) {
async function submitMessage(event) {
event.preventDefault()
if (!composer.patient.trim()) {
return
}
let smsSent = false
if (composer.channel === 'sms') {
if (!composer.phone.trim()) {
alert('Informe o telefone para enviar SMS.')
return
}
try {
await communicationRepository.sendSms({
patientName: composer.patient.trim(),
phone: composer.phone.trim(),
content: composer.content,
})
smsSent = true
} catch (e) {
alert('Falha ao disparar SMS: ' + e.message)
}
}
setMessages((current) => [
{
id: `local-${Date.now()}`,
@@ -100,7 +122,7 @@ export function MessagesPage() {
channel: composer.channel,
template: composer.template.trim() || 'Mensagem avulsa',
sentAt: 'Agora',
status: 'pendente',
status: composer.channel === 'sms' ? (smsSent ? 'entregue' : 'falha') : 'pendente',
response: '',
},
...current,
@@ -300,6 +322,7 @@ export function MessagesPage() {
onClick={() => {
setComposer({
patient: campaign.count,
phone: '',
channel: 'whatsapp',
template: campaign.title,
content: campaign.desc,
@@ -470,6 +493,17 @@ function MessageComposer({ draft, onChange, onClose, onSubmit, templates }) {
</DarkField>
</div>
{draft.channel === 'sms' ? (
<DarkField label="Telefone">
<input
className={inputClass}
onChange={(event) => update('phone', event.target.value)}
placeholder="(81) 99999-9999"
value={draft.phone}
/>
</DarkField>
) : null}
<DarkField label="Template">
<select className={inputClass} onChange={(event) => applyTemplate(event.target.value)} value={draft.template}>
<option value="Mensagem avulsa">Mensagem avulsa</option>