+import { ComponentRef, Injectable } from '@angular/core'
import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router'
-import { Injectable } from '@angular/core'
+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)
// Reuse the route if we're going to and from the same route
shouldReuseRoute (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
- return future.routeConfig === curr.routeConfig
+ return future.routeConfig === curr.routeConfig && future.routeConfig?.data?.reloadOnSameNavigation !== true
}
private gb () {
}
private isReuseEnabled (route: ActivatedRouteSnapshot) {
- return route.data.reuse && route.data.reuse.enabled && route.queryParams[ 'a-state' ]
+ // Cannot use peertube router here because of cyclic router dependency
+ return route.data.reuse?.enabled &&
+ !!(route.queryParams[PeerTubeRouterService.ROUTE_SETTING_NAME] & RouterSetting.REUSE_COMPONENT)
}
}