2026-01-16 20:55:40 +00:00
|
|
|
import { renderDashboard } from './DashboardPage.js';
|
2026-01-23 18:53:02 +00:00
|
|
|
import { renderFacturasPage } from './Facturas.js';
|
2026-02-02 16:58:52 +00:00
|
|
|
import { renderCreateInvoicePage } from './CreateInvoicePage.js';
|
2026-02-06 18:27:48 +00:00
|
|
|
import { renderClientesPage } from './ClientesPage.js';
|
2026-01-16 20:55:40 +00:00
|
|
|
|
2026-01-16 20:22:14 +00:00
|
|
|
// Registry of all pages available in the application
|
|
|
|
|
export const pagesRegistry = [
|
|
|
|
|
{
|
|
|
|
|
route: 'dashboard',
|
|
|
|
|
name: 'Dashboard',
|
2026-02-11 12:56:28 +00:00
|
|
|
icon: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>',
|
2026-01-16 20:55:40 +00:00
|
|
|
requiresAuth: true,
|
|
|
|
|
showInSidebar: true,
|
|
|
|
|
render: renderDashboard
|
2026-01-16 20:22:14 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
route: 'invoices',
|
|
|
|
|
name: 'Facturas',
|
2026-02-11 12:56:28 +00:00
|
|
|
icon: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>',
|
2026-01-16 20:55:40 +00:00
|
|
|
requiresAuth: true,
|
|
|
|
|
showInSidebar: true,
|
2026-01-23 18:53:02 +00:00
|
|
|
render: renderFacturasPage
|
2026-01-16 20:22:14 +00:00
|
|
|
},
|
2026-02-02 16:58:52 +00:00
|
|
|
{
|
|
|
|
|
route: 'create-invoice',
|
|
|
|
|
name: 'Nueva Factura',
|
2026-02-03 15:55:40 +00:00
|
|
|
icon: '+',
|
2026-02-02 16:58:52 +00:00
|
|
|
requiresAuth: true,
|
|
|
|
|
showInSidebar: false, // No mostrar en sidebar
|
|
|
|
|
render: renderCreateInvoicePage
|
|
|
|
|
},
|
2026-01-16 20:22:14 +00:00
|
|
|
{
|
|
|
|
|
route: 'clients',
|
|
|
|
|
name: 'Clientes',
|
2026-02-11 12:56:28 +00:00
|
|
|
icon: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>',
|
2026-01-16 20:55:40 +00:00
|
|
|
requiresAuth: true,
|
|
|
|
|
showInSidebar: true,
|
2026-02-06 18:27:48 +00:00
|
|
|
render: renderClientesPage
|
2026-01-16 20:22:14 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
route: 'settings',
|
|
|
|
|
name: 'Configuración',
|
2026-02-11 12:56:28 +00:00
|
|
|
icon: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>',
|
2026-01-16 20:55:40 +00:00
|
|
|
requiresAuth: true,
|
|
|
|
|
showInSidebar: true,
|
|
|
|
|
render: () => {
|
|
|
|
|
const div = document.createElement('div');
|
|
|
|
|
div.innerHTML = '<h1>Configuración</h1><p>Página en construcción...</p>';
|
|
|
|
|
return div;
|
|
|
|
|
}
|
2026-01-16 20:22:14 +00:00
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// Get pages that the user can access
|
|
|
|
|
export function getAvailablePages(isAuthenticated) {
|
|
|
|
|
if (!isAuthenticated) {
|
|
|
|
|
return [];
|
|
|
|
|
}
|
2026-01-16 20:55:40 +00:00
|
|
|
// Filter pages based on authentication requirement and sidebar visibility
|
|
|
|
|
return pagesRegistry.filter(page => {
|
|
|
|
|
if (page.requiresAuth && !isAuthenticated) return false;
|
|
|
|
|
return page.showInSidebar;
|
|
|
|
|
});
|
2026-01-16 20:22:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get page by route
|
|
|
|
|
export function getPageByRoute(route) {
|
|
|
|
|
return pagesRegistry.find(page => page.route === route);
|
|
|
|
|
}
|