diff --git a/CHANGELOG.md b/CHANGELOG.md index 17ab0be..b68ea6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,9 @@ ### Added - **Soporte Dinámico para Plugins (`PluginService`, `PluginsComponent`, `PluginSettingsComponent`)**: - Incorporada infraestructura agnóstica para descubrimiento y gestión de plugins desacoplados a través de `/api/plugins`. - - Inyección dinámica de comandos personalizados en la consola de comandos (`execute-command`) según los plugins instalados. - - Generador dinámico de formularios de configuración basados en esquemas JSON (`app-plugin-settings`) con soporte para textos, números, selectores, casillas y scripts. + - Agrupación ordenada de comandos de plugins en submenús dedicados en la consola de comandos (`execute-command`), organizados por plugin para mantener el menú limpio. + - Comprobación y filtrado dinámico de compatibilidad por Sistema Operativo (`os: ['windows']`), deshabilitando automáticamente los comandos en puestos con sistemas incompatibles. + - Generador dinámico de formularios de configuración basados en esquemas JSON (`app-plugin-settings`) con botón de autogeneración y actualización reactiva de scripts según los parámetros seleccionados. - Soporte de insignias de estado (badges) contextuales por cliente en las vistas de mosaico y lista de equipos (`groups.component`). - Nuevo elemento condicional "Plugins" en el menú lateral (`sidebar`), visible únicamente cuando existen plugins activos en el sistema. - Comportamiento 100% neutro e idéntico a 1.15.0 si no hay plugins instalados. diff --git a/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.html b/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.html index 119a584..03ef622 100644 --- a/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.html +++ b/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.html @@ -27,4 +27,27 @@ {{ command.translationKey ? (command.translationKey | translate) : (command.label || command.slug) }} } + + @if (pluginGroups.length > 0) { + + @for (group of pluginGroups; track group.plugin.name) { + + + + @for (cmd of group.commands; track cmd.slug) { + + } + + } + } \ No newline at end of file diff --git a/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts b/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts index a3b2574..768155b 100644 --- a/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts +++ b/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts @@ -65,14 +65,15 @@ export class ExecuteCommandComponent implements OnInit { this.baseUrl = this.configService.apiUrl; } + pluginGroups: any[] = []; + ngOnInit(): void { this.clientData = this.clientData || []; const allowed = this.getAllowedCommandsByRole(); this.arrayCommands = this.arrayCommands.filter(c => allowed.includes(c.slug)); - // Punto de anclaje para comandos aportados por plugins - const pluginCmds = this.pluginService.getCommands(); - this.arrayCommands = [...this.arrayCommands, ...pluginCmds]; + // Punto de anclaje para grupos de comandos aportados por plugins + this.pluginGroups = this.pluginService.getPluginGroups(); this.updateCommandStates(); } @@ -162,6 +163,14 @@ export class ExecuteCommandComponent implements OnInit { return command; }); + + if (this.pluginGroups && this.pluginGroups.length > 0) { + for (const group of this.pluginGroups) { + for (const cmd of group.commands) { + cmd.disabled = !hasClients || !this.pluginService.isCommandSupportedForClients(cmd, this.clientData); + } + } + } } onCommandSelect(action: any): void { diff --git a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.css b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.css index 3e9a8ba..d42aac9 100644 --- a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.css +++ b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.css @@ -194,7 +194,7 @@ border-top: 1px solid #e2e8f0; } -.btn-save, .btn-reset { +.btn-save, .btn-reset, .btn-regenerate { display: flex; align-items: center; gap: 8px; diff --git a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html index 768d788..c1b71cb 100644 --- a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html +++ b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html @@ -82,6 +82,12 @@ restart_alt Restaurar por defecto + @if (hasScriptFields()) { + + }