From 4358eb20dee32ee7bf1a61423340087676871ce1 Mon Sep 17 00:00:00 2001 From: Shni Date: Tue, 14 Oct 2025 23:54:37 -0500 Subject: [PATCH] =?UTF-8?q?feat:=20Pre-renderizar=20la=20navegaci=C3=B3n?= =?UTF-8?q?=20del=20dashboard=20para=20mejorar=20el=20rendimiento=20y=20ev?= =?UTF-8?q?itar=20promesas=20no=20resueltas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/server.ts | 22 ++++++++++++++++++++++ src/server/views/layouts/layout.ejs | 7 ++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/server/server.ts b/src/server/server.ts index 85c8aa7..420b7a8 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -521,6 +521,26 @@ const renderTemplate = async ( const defaultTitle = `${ locals.appName ?? pkg.name ?? "Amayo Bot" } | Guía Completa`; + // If the caller requested the dashboard nav, render it here and pass the + // resulting HTML string to the layout to avoid printing unresolved Promises + // in the template (EJS include/await differences across environments). + let dashboardNavHtml: string | null = null; + try { + if (locals.useDashboardNav) { + const partialPath = path.join(viewsDir, "partials", "dashboard_nav.ejs"); + // Render partial with same locals (async) + dashboardNavHtml = await ejs.renderFile( + partialPath, + { ...locals }, + { async: true } + ); + } + } catch (err) { + // If rendering the partial fails, log and continue — layout will handle missing nav. + console.warn("Failed rendering dashboard_nav partial:", err); + dashboardNavHtml = null; + } + const html = await ejs.renderFile( layoutFile, { @@ -543,6 +563,8 @@ const renderTemplate = async ( typeof locals.useDashboardNav !== "undefined" ? locals.useDashboardNav : false, + // Pre-rendered partial HTML (if produced above) + dashboardNav: dashboardNavHtml, ...locals, title: locals.title ?? defaultTitle, body: pageBody, diff --git a/src/server/views/layouts/layout.ejs b/src/server/views/layouts/layout.ejs index db3ff51..f210acc 100644 --- a/src/server/views/layouts/layout.ejs +++ b/src/server/views/layouts/layout.ejs @@ -22,7 +22,12 @@ <% if (useDashboardNav) { %> - <%- include('../partials/dashboard_nav') %> + <%# If the server pre-rendered the dashboard nav it will be available as dashboardNav (string) %> + <% if (typeof dashboardNav !== 'undefined' && dashboardNav) { %> + <%- dashboardNav %> + <% } else { %> + <%- include('../partials/dashboard_nav') %> + <% } %> <% } else if (!hideNavbar) { %> <%- include('../partials/navbar', { appName }) %> <% } %>