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')); }, - }) - ); + }); }