From 3bbca40dbb480c58db9ad5eabe87845c94a9dadd Mon Sep 17 00:00:00 2001 From: jmbardallo Date: Fri, 12 Jun 2026 10:28:34 +0200 Subject: [PATCH] =?UTF-8?q?Modificado=20comportamiento=20al=20hacer=20clic?= =?UTF-8?q?k=20en=20un=20aula,=20la=20petici=C3=B3n=20de=20mostrar=20orden?= =?UTF-8?q?adores=20y=20la=20de=20actualizar=20el=20estado=20de=20cada=20u?= =?UTF-8?q?no,=20se=20hacen=20secuencialmente=20y=20no=20en=20paralelo,=20?= =?UTF-8?q?asi=20evitamos=20el=20loader=20general=20mientras=20se=20resuel?= =?UTF-8?q?ven=20los=20estados=20de=20los=20equipos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/components/groups/groups.component.ts | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/ogWebconsole/src/app/components/groups/groups.component.ts b/ogWebconsole/src/app/components/groups/groups.component.ts index c77826e..60d732b 100644 --- a/ogWebconsole/src/app/components/groups/groups.component.ts +++ b/ogWebconsole/src/app/components/groups/groups.component.ts @@ -418,11 +418,9 @@ export class GroupsComponent implements OnInit, OnDestroy { event.stopPropagation(); this.selectedNode = node; const selectedClientsBeforeEdit = this.selection.selected.map(client => client.uuid); - this.fetchClientsForNode(node, selectedClientsBeforeEdit); - - if (node.type === NodeType.Classroom || node.type === NodeType.ClientsGroup) { - this.getStatusForAllClientsInNode(node); - } + + const checkStatusAfterLoad = node.type === NodeType.Classroom || node.type === NodeType.ClientsGroup; + this.fetchClientsForNode(node, selectedClientsBeforeEdit, checkStatusAfterLoad); } onMenuClick(event: Event, node: any): void { @@ -433,7 +431,9 @@ export class GroupsComponent implements OnInit, OnDestroy { } - public fetchClientsForNode(node: any, selectedClientsBeforeEdit: string[] = []): void { + private fetchClientsSubscription?: Subscription; + + public fetchClientsForNode(node: any, selectedClientsBeforeEdit: string[] = [], checkStatusAfterLoad: boolean = false): void { const params = new HttpParams({ fromObject: this.filters }); // Agregar parámetros de ordenamiento al backend @@ -442,8 +442,12 @@ export class GroupsComponent implements OnInit, OnDestroy { backendParams['order[' + this.sortBy + ']'] = this.sortDirection; } + if (this.fetchClientsSubscription) { + this.fetchClientsSubscription.unsubscribe(); + } + this.isLoadingClients = true; - this.http.get(`${this.baseUrl}/clients?organizationalUnit.id=${node.id}&page=${this.page + 1}&itemsPerPage=${this.itemsPerPage}`, { params: backendParams }).subscribe({ + this.fetchClientsSubscription = this.http.get(`${this.baseUrl}/clients?organizationalUnit.id=${node.id}&page=${this.page + 1}&itemsPerPage=${this.itemsPerPage}`, { params: backendParams }).subscribe({ next: (response: any) => { let members = response['hydra:member']; let total = response['hydra:totalItems']; @@ -476,6 +480,10 @@ export class GroupsComponent implements OnInit, OnDestroy { members.forEach((c: Client) => c.uuid && this.syncingClientIds.add(c.uuid)); } + if (checkStatusAfterLoad) { + this.getStatusForAllClientsInNode(node); + } + // Calcular estadísticas después de cargar los clientes this.calculateLocalStats(); }, @@ -855,14 +863,19 @@ export class GroupsComponent implements OnInit, OnDestroy { } + private checkStatusSubscription?: Subscription; + getStatusForAllClientsInNode(node: any): void { if (!node.uuid) return; + if (this.checkStatusSubscription) { + this.checkStatusSubscription.unsubscribe(); + } + this.isCheckingNodeStatus = true; this.selectedClients.data.forEach(c => c.uuid && this.syncingClientIds.add(c.uuid)); - this.subscriptions.add( - this.http.post<{ results: Array<{ uuid: string; ip: string; status: string; success: boolean }> }>( + this.checkStatusSubscription = this.http.post<{ results: Array<{ uuid: string; ip: string; status: string; success: boolean }> }>( `${this.baseUrl}/organizational-units/${node.uuid}/agent/status`, {} ).subscribe({ @@ -883,8 +896,7 @@ export class GroupsComponent implements OnInit, OnDestroy { this.selectedClients.data.forEach(c => c.uuid && this.syncingClientIds.delete(c.uuid)); this.toastr.error(this.translate.instant('errorCheckingStatus')); }, - }) - ); + }); }