diff --git a/CHANGELOG.md b/CHANGELOG.md index 0125632..00073aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog - project.linkedcorp.net +## [2.17.1] - 2026-10-20 +### Added +- Proyectos → listado: checkbox "Ocultar proyectos 100%" (desmarcado por defecto). La elección + se recuerda en el navegador, aunque se cierre sesión. + ## [2.17.0] - 2026-10-20 ### Added - Equipos → detalle: pestaña **Usuarios** (después de General) con el usuario que tiene sesión diff --git a/VERSION b/VERSION index d76bd2b..3f8eb71 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.17.0 +2.17.1 diff --git a/backend/package.json b/backend/package.json index b27a535..6956f3e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "project-linkedcorp-backend", - "version": "2.17.0", + "version": "2.17.1", "private": true, "type": "module", "main": "src/server.js", diff --git a/frontend/package.json b/frontend/package.json index a6a17f7..23397cb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "project-linkedcorp-frontend", "private": true, - "version": "2.17.0", + "version": "2.17.1", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/i18n/messages.js b/frontend/src/i18n/messages.js index 3ae969c..f52cc57 100644 --- a/frontend/src/i18n/messages.js +++ b/frontend/src/i18n/messages.js @@ -186,6 +186,7 @@ export const messages = { project_updated_at: 'Actualizado', project_deleted_at: 'Eliminado', project_filter_due_soon: 'Solo próximos a vencer (7 días)', + project_filter_hide_completed: 'Ocultar proyectos 100%', nav_recurring_tasks: 'Tareas recurrentes', nav_notes: 'Notas', @@ -668,6 +669,7 @@ export const messages = { project_updated_at: 'Updated', project_deleted_at: 'Deleted', project_filter_due_soon: 'Due soon only (7 days)', + project_filter_hide_completed: 'Hide 100% projects', nav_recurring_tasks: 'Recurring tasks', nav_notes: 'Notes', diff --git a/frontend/src/pages/Proyectos/ProyectosPage.jsx b/frontend/src/pages/Proyectos/ProyectosPage.jsx index a0a92b1..2e7d28b 100644 --- a/frontend/src/pages/Proyectos/ProyectosPage.jsx +++ b/frontend/src/pages/Proyectos/ProyectosPage.jsx @@ -22,6 +22,7 @@ import { DetailPopup } from '../../components/DetailPopup.jsx'; import { SharedWithIcon } from '../../components/SharedWithIcon.jsx'; const CAN_DELETE_ROLES = ['superadmin', 'admin', 'it_manager', 'project_lead']; +const HIDE_COMPLETED_KEY = 'plc_projects_hide_completed'; function flatten(nodes, acc = []) { for (const n of nodes) { acc.push(n); if (n.children?.length) flatten(n.children, acc); } @@ -48,6 +49,14 @@ export default function ProyectosPage() { const [filterStatusId, setFilterStatusId] = useState(''); const [filterPriorityId, setFilterPriorityId] = useState(''); const [filterDueSoon, setFilterDueSoon] = useState(false); + // Persistido en el navegador: se conserva al cerrar sesion o recargar. + const [hideCompleted, setHideCompleted] = useState(() => { + try { return localStorage.getItem(HIDE_COMPLETED_KEY) === '1'; } catch { return false; } + }); + function toggleHideCompleted(checked) { + setHideCompleted(checked); + try { localStorage.setItem(HIDE_COMPLETED_KEY, checked ? '1' : '0'); } catch { /* sin storage: solo en memoria */ } + } const [filterOwnerUserId, setFilterOwnerUserId] = useState(''); // Prueba exploratoria: filtro "ver todos / por usuario" solo para roles que ya ven todos los // proyectos hoy (superadmin/admin/it_manager) -- backend ya soporta ownerUserId, sin cambios. @@ -178,13 +187,16 @@ export default function ProyectosPage() { if (!projects) return