Browse Source

Subscription optimization

pull/15549/head
Maksym Tsymbarov 3 weeks ago
parent
commit
d32d8c09ad
  1. 4
      ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.ts
  2. 6
      ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.ts
  3. 12
      ui-ngx/src/app/modules/home/components/widget/lib/table-widget.models.ts
  4. 5
      ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts

4
ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.ts

@ -210,6 +210,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
private subscription: IWidgetSubscription;
private widgetResize$: ResizeObserver;
private destroy$ = new Subject<void>();
private paginationResetsSubscription: Subscription;
private displayActivity = false;
private displayDetails = true;
@ -315,6 +316,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
if (this.widgetResize$) {
this.widgetResize$.disconnect();
}
this.paginationResetsSubscription?.unsubscribe();
this.destroy$.next();
this.destroy$.complete();
}
@ -331,7 +333,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
});
if (this.displayPagination) {
setupPaginationResets(this.ctx, this.paginator, this.sort, this.destroy$);
this.paginationResetsSubscription = setupPaginationResets(this.ctx, this.paginator, this.sort);
this.ctx.aliasController?.filtersChanged.pipe(
takeUntil(this.destroy$)

6
ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.ts

@ -46,7 +46,7 @@ import { deepClone, hashCode, isDefined, isDefinedAndNotNull, isObject, isUndefi
import cssjs from '@core/css/css';
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
import { BehaviorSubject, fromEvent, merge, Observable, of, Subject } from 'rxjs';
import { BehaviorSubject, fromEvent, merge, Observable, of, Subject, Subscription } from 'rxjs';
import { emptyPageData, PageData } from '@shared/models/page/page-data';
import { EntityId } from '@shared/models/id/entity-id';
import { EntityType, entityTypeTranslations } from '@shared/models/entity-type.models';
@ -165,6 +165,7 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
private subscription: IWidgetSubscription;
private widgetResize$: ResizeObserver;
private destroy$ = new Subject<void>();
private paginationResetsSubscription: Subscription;
private defaultPageSize;
private defaultSortOrder = 'entityName';
@ -248,6 +249,7 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
if (this.widgetResize$) {
this.widgetResize$.disconnect();
}
this.paginationResetsSubscription?.unsubscribe();
this.destroy$.next();
this.destroy$.complete();
}
@ -266,7 +268,7 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
});
if (this.displayPagination) {
setupPaginationResets(this.ctx, this.paginator, this.sort, this.destroy$);
this.paginationResetsSubscription = setupPaginationResets(this.ctx, this.paginator, this.sort);
this.ctx.aliasController?.filtersChanged.pipe(
takeUntil(this.destroy$)

12
ui-ngx/src/app/modules/home/components/widget/lib/table-widget.models.ts

@ -33,7 +33,7 @@ import {
TbFunction
} from '@shared/models/js-function.models';
import { forkJoin, Observable, of, ReplaySubject, Subscription } from 'rxjs';
import { catchError, distinctUntilChanged, map, share, skip, startWith, takeUntil } from 'rxjs/operators';
import { catchError, distinctUntilChanged, map, share, skip, startWith } from 'rxjs/operators';
import { MatPaginator } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort';
import type { ValueFormatProcessor } from '@shared/models/widget-settings.models';
@ -521,14 +521,11 @@ export function isValidPageStepCount(value: number): boolean {
export function setupPaginationResets(ctx: WidgetContext,
paginator: MatPaginator,
sort: MatSort,
destroyNotifier$: Observable<void>): Subscription {
sort: MatSort): Subscription {
const subscription = new Subscription();
subscription.add(
sort.sortChange.pipe(
takeUntil(destroyNotifier$)
).subscribe(() => paginator.pageIndex = 0)
sort.sortChange.subscribe(() => paginator.pageIndex = 0)
);
subscription.add(
@ -536,8 +533,7 @@ export function setupPaginationResets(ctx: WidgetContext,
map(() => ctx.stateController.getStateParams()),
startWith(ctx.stateController.getStateParams()),
distinctUntilChanged(isEqual),
skip(1),
takeUntil(destroyNotifier$)
skip(1)
).subscribe(() => paginator.firstPage())
);
return subscription;

5
ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts

@ -287,6 +287,9 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI
if (this.widgetResize$) {
this.widgetResize$.disconnect();
}
this.subscriptions.forEach(subscription => subscription.unsubscribe());
this.destroy$.next();
this.destroy$.complete();
}
ngAfterViewInit(): void {
@ -654,7 +657,7 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI
if (this.displayPagination) {
paginator = this.paginators.toArray()[index];
this.subscriptions.push(
setupPaginationResets(this.ctx, paginator, sort, this.destroy$)
setupPaginationResets(this.ctx, paginator, sort)
);
observables.push(paginator.page);
}

Loading…
Cancel
Save