refs #1884 Add clientState input to execute-command component for dynamic state handling
testing/ogGui-multibranch/pipeline/head This commit looks good Details

pull/22/head
Lucas Lara García 2025-04-21 14:56:09 +02:00
parent 844d3dc0f0
commit 558a3205ab
2 changed files with 39 additions and 7 deletions

View File

@ -10,6 +10,7 @@ import { ConfigService } from '@services/config.service';
styleUrls: ['./execute-command.component.css']
})
export class ExecuteCommandComponent implements OnInit {
@Input() clientState: string = 'off';
@Input() clientData: any[] = [];
@Input() buttonType: 'icon' | 'text' | 'menu-item' = 'icon';
@Input() buttonText: string = 'Ejecutar Comandos';
@ -45,6 +46,39 @@ export class ExecuteCommandComponent implements OnInit {
ngOnInit(): void {
this.clientData = this.clientData || [];
this.updateCommandStates();
}
ngOnChanges(): void {
this.updateCommandStates();
}
private updateCommandStates(): void {
let states: string[] = [];
if (this.clientData.length > 0) {
states = this.clientData.map(client => client.status);
} else if (this.clientState) {
states = [this.clientState];
}
const allOff = states.every(state => state === 'off');
const allSameState = states.every(state => state === states[0]);
this.arrayCommands = this.arrayCommands.map(command => {
if (allOff) {
command.disabled = command.slug !== 'power-on';
} else if (allSameState) {
if (states[0] === 'off') {
command.disabled = command.slug !== 'power-on';
} else {
command.disabled = command.slug === 'power-on';
}
} else {
command.disabled = true;
}
return command;
});
}
onCommandSelect(action: any): void {
@ -137,7 +171,7 @@ export class ExecuteCommandComponent implements OnInit {
const clientDataToSend = this.clientData.map(client => ({
name: client.name,
mac: client.mac,
uuid: '/clients/'+client.uuid,
uuid: '/clients/' + client.uuid,
status: client.status,
partitions: client.partitions,
firmwareType: client.firmwareType,
@ -161,7 +195,7 @@ export class ExecuteCommandComponent implements OnInit {
const clientDataToSend = this.clientData.map(client => ({
name: client.name,
mac: client.mac,
uuid: '/clients/'+client.uuid,
uuid: '/clients/' + client.uuid,
status: client.status,
partitions: client.partitions,
ip: client.ip
@ -178,7 +212,7 @@ export class ExecuteCommandComponent implements OnInit {
const clientDataToSend = this.clientData.map(client => ({
name: client.name,
mac: client.mac,
uuid: '/clients/'+client.uuid,
uuid: '/clients/' + client.uuid,
status: client.status,
partitions: client.partitions,
ip: client.ip
@ -190,6 +224,4 @@ export class ExecuteCommandComponent implements OnInit {
console.log('Navigated to run script with data:', clientDataToSend);
});
}
}

View File

@ -260,7 +260,7 @@
<span class="client-ip">{{ client.mac }}</span>
<div class="action-icons">
<app-execute-command [clientData]="[client]" [buttonType]="'icon'" [icon]="'terminal'"
<app-execute-command [clientState]="client.status" [clientData]="[client]" [buttonType]="'icon'" [icon]="'terminal'"
[disabled]="selection.selected.length > 1 || (selection.selected.length === 1 && !selection.isSelected(client))"></app-execute-command>
<button
@ -395,7 +395,7 @@
mat-icon-button [matMenuTriggerFor]="clientMenu" color="primary">
<mat-icon>more_vert</mat-icon>
</button>
<app-execute-command [clientData]="[client]" [buttonType]="'icon'" [icon]="'terminal'"
<app-execute-command [clientState]="client.status" [clientData]="[client]" [buttonType]="'icon'" [icon]="'terminal'"
[disabled]="selection.selected.length > 1 || (selection.selected.length === 1 && !selection.isSelected(client))">
</app-execute-command>
<mat-menu #clientMenu="matMenu">