Skip to main content

⌨️ KeyboardShortcutsService – Guía de uso

KeyboardShortcutsService es un servicio inyectable que proporciona una manera centralizada y eficiente de gestionar atajos de teclado globales en toda la aplicación. Permite registrar y desregistrar combinaciones de teclas para ejecutar acciones específicas, optimizando el rendimiento al operar fuera de la zona de Angular.


📁 Inyección del Servicio​

El servicio está provisto en root (providedIn: 'root'), por lo que no necesitas añadirlo a ningún providers de módulo o componente. Simplemente inyéctalo en el constructor de tu componente o servicio.

// En tu componente.ts (o servicio)
import { Component, OnDestroy, OnInit, inject } from '@angular/core';
import { KeyboardShortcutsService } from '@alpura/commons';

@Component({
selector: 'app-mi-componente',
template: `...`,
})
export class MiComponente implements OnInit, OnDestroy {
private shortcutsService = inject(KeyboardShortcutsService);

constructor() {}

ngOnInit(): void {
// Lógica para registrar atajos
}

ngOnDestroy(): void {
// Lógica para limpiar atajos
}
}

🚀 Uso Principal: Atajos Fijos​

El servicio expone una lista de atajos predefinidos y estandarizados para acciones comunes en la aplicación.

Atajos Disponibles (KeyboardShortcutsService.SHORTCUTS)​

ClaveAtajoAcción Común
NEWalt+nCrear un nuevo elemento
ACCEPTalt+aAceptar o guardar
CANCELalt+qCancelar o limpiar
SEARCHalt+bRealizar una búsqueda
HELPalt+hMostrar ayuda
EXPORT_WORDalt+wExportar a Word
EXPORT_EXCELalt+eExportar a Excel
EXPORT_PDFalt+pExportar a PDF
DOWNLOADalt+dDescargar un archivo
TOGGLE_OPTIONalt+tAlternar una opción
SENDalt+sEnviar datos

registerFixedShortcuts(callbacks)​

Este es el método principal para usar los atajos predefinidos. Recibe un objeto donde cada clave es el nombre de un atajo fijo y su valor es la función (callback) a ejecutar.

Ejemplo:​

// Dentro de tu componente
ngOnInit(): void {
this.shortcutsService.registerFixedShortcuts({
NEW: (combo) => this.crearNuevoItem(combo),
SEARCH: (combo) => this.buscarItems(combo),
EXPORT_EXCEL: () => this.exportarDatos(),
});
}

crearNuevoItem(combo: string) {
console.log(`Atajo '${combo}' presionado. Iniciando creación...`);
// Lógica para crear un nuevo item
}

buscarItems(combo: string) {
console.log(`Atajo '${combo}' presionado. Buscando...`);
// Lógica para buscar
}

exportarDatos() {
console.log('Exportando a Excel...');
// Lógica de exportación
}

🛠️ Atajos Personalizados​

registerCustomShortcut(options)​

Si necesitas un atajo que no está en la lista de fijos, puedes registrarlo con este método.

Importante: El servicio lanzará un error si intentas registrar una combinación de teclas que ya está definida como un atajo fijo.

Ejemplo:​

// Registrando el atajo 'ctrl+i' para imprimir
this.shortcutsService.registerCustomShortcut({
modifier: 'ctrl',
key: 'i',
callback: (combo) => {
console.log(`Atajo personalizado '${combo}' activado.`);
window.print();
},
});

🧹 Gestión del Ciclo de Vida (¡Muy Importante!)​

Para evitar fugas de memoria y comportamientos inesperados (como que un atajo siga funcionando después de que el componente se haya destruido), siempre debes limpiar los atajos que registraste.

unregisterShortcut(shortcutKey)​

Elimina un atajo fijo específico.

unregisterAllFixedShortcuts()​

Elimina todos los atajos registrados. Este es el método más común y seguro para usar en ngOnDestroy.

Ejemplo de limpieza:​

// En tu componente
ngOnDestroy(): void {
// Esto desregistra todos los atajos que este componente pudo haber registrado.
this.shortcutsService.unregisterAllFixedShortcuts();
console.log('Atajos de teclado limpiados.');
}

📬 Soporte​

Para dudas o mantenimiento del servicio KeyboardShortcutsService, contactar al equipo de arquitectura.