mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
68067: Add unsubscribes on open subscriptions in menu component
This commit is contained in:
@@ -12,7 +12,7 @@ import { RouterTestingModule } from '@angular/router/testing';
|
|||||||
import { MenuItemType } from './initial-menus-state';
|
import { MenuItemType } from './initial-menus-state';
|
||||||
import { LinkMenuItemModel } from './menu-item/models/link.model';
|
import { LinkMenuItemModel } from './menu-item/models/link.model';
|
||||||
|
|
||||||
fdescribe('MenuComponent', () => {
|
describe('MenuComponent', () => {
|
||||||
let comp: MenuComponent;
|
let comp: MenuComponent;
|
||||||
let fixture: ComponentFixture<MenuComponent>;
|
let fixture: ComponentFixture<MenuComponent>;
|
||||||
let menuService: MenuService;
|
let menuService: MenuService;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/internal/Observable';
|
import { Observable } from 'rxjs/internal/Observable';
|
||||||
import { MenuService } from './menu.service';
|
import { MenuService } from './menu.service';
|
||||||
import { MenuID } from './initial-menus-state';
|
import { MenuID } from './initial-menus-state';
|
||||||
@@ -9,6 +9,7 @@ import { hasNoValue, hasValue } from '../empty.util';
|
|||||||
import { MenuSectionComponent } from './menu-section/menu-section.component';
|
import { MenuSectionComponent } from './menu-section/menu-section.component';
|
||||||
import { getComponentForMenu } from './menu-section.decorator';
|
import { getComponentForMenu } from './menu-section.decorator';
|
||||||
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
||||||
|
import { Subscription } from 'rxjs/internal/Subscription';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A basic implementation of a MenuComponent
|
* A basic implementation of a MenuComponent
|
||||||
@@ -17,7 +18,7 @@ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
|||||||
selector: 'ds-menu',
|
selector: 'ds-menu',
|
||||||
template: ''
|
template: ''
|
||||||
})
|
})
|
||||||
export class MenuComponent implements OnInit {
|
export class MenuComponent implements OnInit, OnDestroy {
|
||||||
/**
|
/**
|
||||||
* The ID of the Menu (See MenuID)
|
* The ID of the Menu (See MenuID)
|
||||||
*/
|
*/
|
||||||
@@ -63,6 +64,12 @@ export class MenuComponent implements OnInit {
|
|||||||
*/
|
*/
|
||||||
private previewTimer;
|
private previewTimer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array to track all subscriptions and unsubscribe them onDestroy
|
||||||
|
* @type {Array}
|
||||||
|
*/
|
||||||
|
subs: Subscription[] = [];
|
||||||
|
|
||||||
constructor(protected menuService: MenuService,
|
constructor(protected menuService: MenuService,
|
||||||
protected injector: Injector,
|
protected injector: Injector,
|
||||||
protected route: ActivatedRoute,
|
protected route: ActivatedRoute,
|
||||||
@@ -78,19 +85,19 @@ export class MenuComponent implements OnInit {
|
|||||||
this.menuPreviewCollapsed = this.menuService.isMenuPreviewCollapsed(this.menuID);
|
this.menuPreviewCollapsed = this.menuService.isMenuPreviewCollapsed(this.menuID);
|
||||||
this.menuVisible = this.menuService.isMenuVisible(this.menuID);
|
this.menuVisible = this.menuService.isMenuVisible(this.menuID);
|
||||||
this.sections = this.menuService.getMenuTopSections(this.menuID).pipe(distinctUntilChanged((x, y) => JSON.stringify(x) === JSON.stringify(y)));
|
this.sections = this.menuService.getMenuTopSections(this.menuID).pipe(distinctUntilChanged((x, y) => JSON.stringify(x) === JSON.stringify(y)));
|
||||||
this.sections.subscribe((sections: MenuSection[]) => {
|
this.subs.push(this.sections.subscribe((sections: MenuSection[]) => {
|
||||||
sections.forEach((section: MenuSection) => {
|
sections.forEach((section: MenuSection) => {
|
||||||
this.sectionInjectors.set(section.id, this.getSectionDataInjector(section));
|
this.sectionInjectors.set(section.id, this.getSectionDataInjector(section));
|
||||||
this.getSectionComponent(section).pipe(first()).subscribe((constr) => this.sectionComponents.set(section.id, constr));
|
this.getSectionComponent(section).pipe(first()).subscribe((constr) => this.sectionComponents.set(section.id, constr));
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize all menu sections and add them to the menu's store
|
* Initialize all menu sections and add them to the menu's store
|
||||||
*/
|
*/
|
||||||
initSections() {
|
initSections() {
|
||||||
this.router.events.pipe(
|
this.subs.push(this.router.events.pipe(
|
||||||
filter((e): e is NavigationEnd => e instanceof NavigationEnd),
|
filter((e): e is NavigationEnd => e instanceof NavigationEnd),
|
||||||
tap(() => this.menuService.resetSections(this.menuID)),
|
tap(() => this.menuService.resetSections(this.menuID)),
|
||||||
map(() => this.resolveMenuSections(this.route.root))
|
map(() => this.resolveMenuSections(this.route.root))
|
||||||
@@ -99,7 +106,7 @@ export class MenuComponent implements OnInit {
|
|||||||
sections.forEach((section: MenuSection) => {
|
sections.forEach((section: MenuSection) => {
|
||||||
this.menuService.addSection(this.menuID, section);
|
this.menuService.addSection(this.menuID, section);
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -212,4 +219,13 @@ export class MenuComponent implements OnInit {
|
|||||||
parent: this.injector
|
parent: this.injector
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsubscribe from open subscriptions
|
||||||
|
*/
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.subs
|
||||||
|
.filter((subscription) => hasValue(subscription))
|
||||||
|
.forEach((subscription) => subscription.unsubscribe());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user