+ {#if card.href && !card.disabled}
+
+
-
-
- {#if card.highlightBadges}
-
- {#each card.highlightBadges as badge (badge.label)}
- {#if badge.variant === 'solid'}
- {badge.label}
- {:else}
-
- {badge.label}
-
- {/if}
- {/each}
+
+ {:else}
+
+
+
): string {
const textoComVariaveis = renderizarTemplate(template, variaveis);
- // Remove quaisquer tags HTML que possam ter sido inseridas por engano
- const textoPuro = textoComVariaveis.replace(/<[^>]*>/g, '');
- return textoPuro;
+ // Remove todas as tags HTML (incluindo quebras de linha HTML)
+ let textoPuro = textoComVariaveis.replace(/<[^>]*>/g, '');
+ // Converte entidades HTML comuns para texto normal
+ textoPuro = textoPuro
+ .replace(/ /g, ' ')
+ .replace(/&/g, '&')
+ .replace(/</g, '<')
+ .replace(/>/g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, "'")
+ .replace(/'/g, "'")
+ .replace(/&[a-zA-Z0-9#]+;/g, ''); // Remove outras entidades HTML
+ // Normaliza espaços múltiplos (mas preserva quebras de linha reais)
+ textoPuro = textoPuro.replace(/[ \t]+/g, ' ').replace(/[ \t]*\n[ \t]*/g, '\n');
+ return textoPuro.trim();
}
// Função para mostrar mensagens
@@ -726,9 +740,10 @@
});
if (conversaId) {
+ // Para chat, sempre remover HTML dos templates
const mensagem =
usarTemplate && templateSelecionado
- ? renderizarTemplate(templateSelecionado.corpo, {
+ ? renderizarTemplateChatLocal(templateSelecionado.corpo, {
nome: destinatario.nome,
matricula: destinatario.matricula || ''
})
@@ -1999,6 +2014,7 @@
Para enviar emails, certifique-se de configurar o SMTP em Configurações de Email.
+
+
- {/if}
-
-
- {#if card.href && !card.disabled}
-
- {card.ctaLabel}
-
- {:else}
-
- {/if}
-
-
+
+
+ {/if}
{/each}
diff --git a/apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte b/apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte
index c78b1cc..02672b5 100644
--- a/apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte
+++ b/apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte
@@ -21,6 +21,7 @@
enviadoPor: Id<'usuarios'>;
criadoEm: number;
enviadoEm: number | undefined;
+ erroDetalhes?: string;
destinatarioInfo: Doc<'usuarios'> | null;
templateInfo: Doc<'templatesMensagens'> | null;
}
@@ -55,10 +56,11 @@
const emailIdsArray = $derived(
Array.from(emailIdsRastreados).map((id) => id as Id<'notificacoesEmail'>)
);
- // Usar função para evitar execução quando array está vazio
- const emailsStatusQuery = useQuery(api.email.buscarEmailsPorIds, () =>
+ // Usar $derived para calcular argumentos da query condicionalmente
+ const emailsStatusArgs = $derived(
emailIdsArray.length === 0 ? 'skip' : { emailIds: emailIdsArray }
);
+ const emailsStatusQuery = useQuery(api.email.buscarEmailsPorIds, emailsStatusArgs);
// Queries para agendamentos
const agendamentosEmailQuery = useQuery(api.email.listarAgendamentosEmail, {});
@@ -248,9 +250,21 @@
variaveis: Record