diff --git a/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte b/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte index eb51c5d2..e6c1e89c 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte @@ -96,7 +96,7 @@ }); -
+
{#each table.getHeaderGroups() as headerGroup (headerGroup.id)} - + {#each headerGroup.headers as header (header.id)} {@const colId = header.column.id} {#each table.getRowModel().rows as row (row.id)} { if (onRowClick) { @@ -208,7 +209,7 @@ {/each} {:else} - + No hay resultados. @@ -217,7 +218,7 @@ {#if hasMore} - +
{#if loading} diff --git a/frontend/src/lib/config/shortcuts/dashboard/invoices/list.ts b/frontend/src/lib/config/shortcuts/dashboard/invoices/list.ts index 85d88179..6db05b7c 100644 --- a/frontend/src/lib/config/shortcuts/dashboard/invoices/list.ts +++ b/frontend/src/lib/config/shortcuts/dashboard/invoices/list.ts @@ -27,7 +27,7 @@ export const obtenerAtajosListaFacturas = (acciones: { }): ShortcutDef[] => [ { key: 'Alt+V', description: 'Ver Temporales', action: acciones.irTemporal }, { key: 'Alt+F', description: 'Ver Definitivas', action: acciones.irDefinitiva }, - { key: 'Alt+N', description: 'Ver Nacionales', action: acciones.irNacional }, + { key: 'Alt+Q', description: 'Ver Nacionales', action: acciones.irNacional }, { key: 'Alt+Z', description: 'Ver Cambio Régimen', action: acciones.irCambioRegimen }, { key: 'Alt+L', description: 'Ver Exportaciones', action: acciones.irExportacion }, { key: 'Alt+Y', description: 'Ver Reparaciones', action: acciones.irReparacion }, diff --git a/frontend/src/lib/config/shortcuts/dashboard/pedimentos/list.ts b/frontend/src/lib/config/shortcuts/dashboard/pedimentos/list.ts index 84fe8028..9c635bd3 100644 --- a/frontend/src/lib/config/shortcuts/dashboard/pedimentos/list.ts +++ b/frontend/src/lib/config/shortcuts/dashboard/pedimentos/list.ts @@ -5,6 +5,8 @@ export const obtenerAtajosListaPedimento = (acciones: { manejarActualizar: () => void; manejarEditar: () => void; manejarEliminar: () => void; + irATabla: () => void; + irAAcciones: () => void; }): ShortcutDef[] => [ { key: 'Alt+Shift+N', @@ -25,5 +27,17 @@ export const obtenerAtajosListaPedimento = (acciones: { key: 'Alt+Shift+D', description: 'Eliminar Seleccionado', action: acciones.manejarEliminar + }, + { + key: 'Alt+Shift+T', + description: 'Ir a tabla de pedimentos', + action: acciones.irATabla, + skipDefaultFocusAfter: true + }, + { + key: 'Alt+Shift+A', + description: 'Ir a acciones (barra inferior)', + action: acciones.irAAcciones, + skipDefaultFocusAfter: true } ]; diff --git a/frontend/src/routes/dashboard/pedimentos/+page.svelte b/frontend/src/routes/dashboard/pedimentos/+page.svelte index 0fedc396..a6c421d9 100644 --- a/frontend/src/routes/dashboard/pedimentos/+page.svelte +++ b/frontend/src/routes/dashboard/pedimentos/+page.svelte @@ -230,13 +230,52 @@ let filters = $state({ } // Keyboard Shortcuts + /** Teclado: foco en la primera fila de datos de la tabla */ + function focusFirstPedimentoTableRow() { + if (!browser) return; + const row = document.querySelector( + '[data-pedimento-list-table] tbody tr[data-pedimento-data-row][tabindex="0"]' + ); + if (row) { + row.focus(); + setTimeout(() => row.scrollIntoView({ behavior: 'smooth', block: 'nearest' }), 50); + return; + } + toast.info('No hay filas en la tabla'); + } + + /** Teclado: foco en el primer control habilitado de la barra de acciones fija */ + function focusPedimentoListFooterActions() { + if (!browser) return; + const footer = document.getElementById('pedimento-list-footer'); + if (!footer) return; + const candidates = footer.querySelectorAll( + 'button, a[href], input:not([type="hidden"]), select, textarea, [tabindex]:not([tabindex="-1"])' + ); + for (const el of candidates) { + if (el.offsetParent === null && el.getClientRects().length === 0) continue; + if (el.hasAttribute('disabled')) continue; + if ((el as HTMLButtonElement).disabled) continue; + el.focus(); + setTimeout(() => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' }), 50); + return; + } + try { + footer.focus(); + } catch { + /* ignore */ + } + } + useShortcuts( 'Pedimentos', obtenerAtajosListaPedimento({ manejarCrear: handleCreateClick, manejarActualizar: reloadData, manejarEditar: handleEditSelected, - manejarEliminar: handleDelete + manejarEliminar: handleDelete, + irATabla: focusFirstPedimentoTableRow, + irAAcciones: focusPedimentoListFooterActions }) ); @@ -535,6 +574,7 @@ let filters = $state({