-import { Injectable } from '@angular/core'
+import { ComponentRef, Injectable } from '@angular/core'
import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router'
-import { RouterSetting } from './'
-import { PeerTubeRouterService } from './peertube-router.service'
+import { DisableForReuseHook } from './disable-for-reuse-hook'
+import { PeerTubeRouterService, RouterSetting } from './peertube-router.service'
@Injectable()
export class CustomReuseStrategy implements RouteReuseStrategy {
const key = this.generateKey(route)
this.recentlyUsed = key
- console.log('Storing component %s to reuse later.', key);
+ console.log('Storing component %s to reuse later.', key)
- (handle as any).componentRef.instance.disableForReuse()
+ const componentRef = (handle as any).componentRef as ComponentRef<DisableForReuseHook>
+ componentRef.instance.disableForReuse()
+ componentRef.changeDetectorRef.detectChanges()
this.storedRouteHandles.set(key, handle)
// Add angular state in query params to reuse the routed component
@Input() setAngularState: boolean
+ @Input() parentDisabled = false
@Output() nearOfBottom = new EventEmitter<void>()
filter(({ current, maximumScroll }) => (current / maximumScroll) > this.decimalLimit)
)
.subscribe(() => {
- if (this.setAngularState) this.setScrollRouteParams()
+ if (this.setAngularState && !this.parentDisabled) this.setScrollRouteParams()
this.nearOfBottom.emit()
})
<div class="no-results" i18n *ngIf="hasDoneFirstQuery && videos.length === 0">No results.</div>
<div
- myInfiniteScroller (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()" [setAngularState]="true"
+ myInfiniteScroller (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()"
+ [setAngularState]="true" [parentDisabled]="disabled"
class="videos" [ngClass]="{ 'display-as-row': displayAsRow }"
>
<ng-container *ngFor="let video of videos; trackBy: videoById;">
<div
class="videos"
- myInfiniteScroller (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()" [setAngularState]="true"
+ myInfiniteScroller (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()"
+ [parentDisabled]="disabled" [setAngularState]="true"
>
<div class="video" *ngFor="let video of videos; let i = index; trackBy: videoById">