feat: add tab navigation and content management for notifications page, allowing users to switch between Enviar Notificação, Gerenciar Templates, and Agendamentos for improved organization and usability

This commit is contained in:
2025-11-30 16:33:52 -03:00
parent 2fb7df8849
commit 4ab151bed7
11 changed files with 1370 additions and 57 deletions

View File

@@ -2,6 +2,7 @@ import { v } from "convex/values";
import { mutation, query, internalMutation, internalQuery, action } from "./_generated/server";
import { internal, api } from "./_generated/api";
import { renderizarTemplate } from "./templatesMensagens";
import { wrapEmailHTML, textToHTML } from "./utils/emailTemplateWrapper";
import type { Doc, Id } from "./_generated/dataModel";
// ========== INTERNAL QUERIES ==========
@@ -221,12 +222,27 @@ export const enviarEmailComTemplate = action({
const tituloRenderizado = renderizarTemplate(template.titulo, variaveisTemplate);
const corpoRenderizado = renderizarTemplate(template.corpo, variaveisTemplate);
// Usar htmlCorpo se disponível, senão gerar do corpo
let corpoHTML = template.htmlCorpo;
if (corpoHTML) {
// Renderizar variáveis no HTML
corpoHTML = renderizarTemplate(corpoHTML, variaveisTemplate);
} else {
// Gerar HTML do corpo renderizado
if (corpoRenderizado.includes("<") && corpoRenderizado.includes(">")) {
corpoHTML = wrapEmailHTML(corpoRenderizado, tituloRenderizado);
} else {
const corpoHTMLFormatado = textToHTML(corpoRenderizado);
corpoHTML = wrapEmailHTML(corpoHTMLFormatado, tituloRenderizado);
}
}
// Enfileirar email via mutation
const emailId: Id<"notificacoesEmail"> = await ctx.runMutation(api.email.enfileirarEmail, {
destinatario: args.destinatario,
destinatarioId: args.destinatarioId,
assunto: tituloRenderizado,
corpo: corpoRenderizado,
corpo: corpoHTML, // Usar HTML completo
templateId: template._id, // template._id sempre existe se template não é null
enviadoPor: args.enviadoPor,
agendadaPara: args.agendadaPara,