fix: version real en pie del menu + logo abajo-izquierda

El pie del menu lateral mostraba el texto fijo "v0.1.0" en vez de la version real (se lee ahora
de package.json via import JSON de Vite). El logo de LinkedCorp se mueve del encabezado del menu
al pie, sobre el numero de version, en modo expandido y compacto.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-09-15 13:08:55 -05:00
parent 937762322e
commit 7ba4a89d49
7 changed files with 39 additions and 19 deletions
+8
View File
@@ -1,5 +1,13 @@
# Changelog - project.linkedcorp.net # Changelog - project.linkedcorp.net
## [1.14.1] - 2026-09-15
### Fixed
- El pie del menú lateral mostraba siempre el texto fijo "v0.1.0" en vez de la versión real de la
app (se lee ahora de `package.json` del frontend).
### Changed
- El logo de LinkedCorp en el menú lateral pasa de la parte superior a la parte inferior izquierda,
justo encima del número de versión.
## [1.14.0] - 2026-09-15 ## [1.14.0] - 2026-09-15
### Added ### Added
- Arrastrar con el mouse para reordenar: actividades (dentro de un proyecto) y tareas (dentro de - Arrastrar con el mouse para reordenar: actividades (dentro de un proyecto) y tareas (dentro de
+10
View File
@@ -384,6 +384,16 @@ iRedMail):
- Backend + frontend reconstruidos y reiniciados (PID confirmado en ambos), `sort_order` - Backend + frontend reconstruidos y reiniciados (PID confirmado en ambos), `sort_order`
verificado en produccion, bundle nuevo verificado contra `https://project.linkedcorp.net`. verificado en produccion, bundle nuevo verificado contra `https://project.linkedcorp.net`.
## Actualizacion v1.14.1 (2026-09-15) — version real en el pie del menu + logo abajo
- Reportado por el usuario: el pie del menu lateral mostraba el texto fijo "v0.1.0" sin importar
la version real desplegada. Corregido leyendo la version desde `frontend/package.json` (import
JSON nativo de Vite).
- El logo de LinkedCorp se movio del encabezado del menu (arriba) al pie (abajo a la izquierda),
justo encima del numero de version, en modo expandido y compacto.
- Sin migracion (solo frontend). Frontend reconstruido y reiniciado (PID confirmado), verificado
contra `https://project.linkedcorp.net`.
## Comandos utiles ## Comandos utiles
```bash ```bash
+1 -1
View File
@@ -1 +1 @@
1.14.0 1.14.1
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "project-linkedcorp-backend", "name": "project-linkedcorp-backend",
"version": "1.14.0", "version": "1.14.1",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/server.js", "main": "src/server.js",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "project-linkedcorp-frontend", "name": "project-linkedcorp-frontend",
"private": true, "private": true,
"version": "1.14.0", "version": "1.14.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+11 -8
View File
@@ -5,6 +5,7 @@ import { useAuth } from '../context/auth-context.jsx';
import logoDark from '../assets/logoLinkedCorpTxt.png'; import logoDark from '../assets/logoLinkedCorpTxt.png';
import logoLight from '../assets/logoLinkedCorpTxtBlack.png'; import logoLight from '../assets/logoLinkedCorpTxtBlack.png';
import logoIcon from '../assets/logoLinked1.png'; import logoIcon from '../assets/logoLinked1.png';
import pkg from '../../package.json';
const ITEMS = [ const ITEMS = [
{ to: '/', icon: LayoutDashboard, labelKey: 'nav_dashboard', end: true }, { to: '/', icon: LayoutDashboard, labelKey: 'nav_dashboard', end: true },
@@ -21,13 +22,6 @@ export function NavigationView({ mode }) {
const items = ITEMS.filter((item) => !item.superadminOnly || user?.roleCode === 'superadmin'); const items = ITEMS.filter((item) => !item.superadminOnly || user?.roleCode === 'superadmin');
return ( return (
<nav className={`nav-view ${mode}`}> <nav className={`nav-view ${mode}`}>
<div className="nav-header">
{compact ? (
<img src={logoIcon} alt={t('appName')} className="nav-logo-icon" />
) : (
<img src={theme === 'light' ? logoLight : logoDark} alt={t('appName')} className="nav-logo-full" />
)}
</div>
<div className="nav-items"> <div className="nav-items">
{items.map((item) => ( {items.map((item) => (
<NavLink key={item.to} to={item.to} end={item.end} className={({ isActive }) => `nav-item ${isActive ? 'active' : ''}`}> <NavLink key={item.to} to={item.to} end={item.end} className={({ isActive }) => `nav-item ${isActive ? 'active' : ''}`}>
@@ -36,7 +30,16 @@ export function NavigationView({ mode }) {
</NavLink> </NavLink>
))} ))}
</div> </div>
{mode !== 'compact' && <div className="nav-footer">v0.1.0</div>} <div className="nav-footer">
{compact ? (
<img src={logoIcon} alt={t('appName')} className="nav-logo-icon-footer" />
) : (
<>
<img src={theme === 'light' ? logoLight : logoDark} alt={t('appName')} className="nav-logo-full-footer" />
<span className="nav-version">v{pkg.version}</span>
</>
)}
</div>
</nav> </nav>
); );
} }
+7 -8
View File
@@ -47,13 +47,6 @@ button { font-family: inherit; }
} }
.nav-view.compact { width: 80px; } .nav-view.compact { width: 80px; }
.nav-view.hidden { width: 0; overflow: hidden; border-right: none; } .nav-view.hidden { width: 0; overflow: hidden; border-right: none; }
.nav-header {
display: flex; align-items: center; gap: 10px;
padding: 14px 12px; border-bottom: 1px solid rgb(var(--line));
min-height: 84px;
}
.nav-logo-icon { width: 56px; height: 56px; flex: none; object-fit: contain; }
.nav-logo-full { height: 52px; width: auto; max-width: 100%; object-fit: contain; }
.nav-items { flex: 1; overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 2px; } .nav-items { flex: 1; overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 2px; }
.nav-item { .nav-item {
display: flex; align-items: center; gap: 12px; display: flex; align-items: center; gap: 12px;
@@ -65,7 +58,13 @@ button { font-family: inherit; }
.nav-item svg { flex: none; width: 18px; height: 18px; } .nav-item svg { flex: none; width: 18px; height: 18px; }
.nav-item:hover { background: rgb(var(--field)); color: rgb(var(--body)); } .nav-item:hover { background: rgb(var(--field)); color: rgb(var(--body)); }
.nav-item.active { background: rgb(var(--accent) / .16); color: rgb(var(--accent)); font-weight: 600; } .nav-item.active { background: rgb(var(--accent) / .16); color: rgb(var(--accent)); font-weight: 600; }
.nav-footer { padding: 10px 12px; border-top: 1px solid rgb(var(--line)); font-size: .68rem; color: rgb(var(--muted)); } .nav-footer {
display: flex; flex-direction: column; align-items: flex-start; gap: 6px;
padding: 12px; border-top: 1px solid rgb(var(--line)); font-size: .68rem; color: rgb(var(--muted));
}
.nav-view.compact .nav-footer { align-items: center; }
.nav-logo-icon-footer { width: 40px; height: 40px; flex: none; object-fit: contain; }
.nav-logo-full-footer { height: 36px; width: auto; max-width: 100%; object-fit: contain; }
.content-column { flex: 1; display: flex; flex-direction: column; min-width: 0; } .content-column { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.topbar { .topbar {