feat(router): add an extra argument to CanDeactivate interface (#13560)
Adds a `nextState` argument to access the future url from `CanDeactivate`. BEFORE: canDeactivate(component: T, route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean; AFTER: canDeactivate(component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean; Closes #9853
This commit is contained in:
@ -185,8 +185,9 @@ export interface CanActivateChild {
|
||||
*
|
||||
* canDeactivate(
|
||||
* component: TeamComponent,
|
||||
* route: ActivatedRouteSnapshot,
|
||||
* state: RouterStateSnapshot
|
||||
* currentRoute: ActivatedRouteSnapshot,
|
||||
* currentState: RouterStateSnapshot,
|
||||
* nextState: RouterStateSnapshot
|
||||
* ): Observable<boolean>|Promise<boolean>|boolean {
|
||||
* return this.permissions.canDeactivate(this.currentUser, route.params.id);
|
||||
* }
|
||||
@ -223,7 +224,8 @@ export interface CanActivateChild {
|
||||
* providers: [
|
||||
* {
|
||||
* provide: 'canDeactivateTeam',
|
||||
* useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => true
|
||||
* useValue: (component: TeamComponent, currentRoute: ActivatedRouteSnapshot, currentState:
|
||||
* RouterStateSnapshot, nextState: RouterStateSnapshot) => true
|
||||
* }
|
||||
* ]
|
||||
* })
|
||||
@ -233,8 +235,9 @@ export interface CanActivateChild {
|
||||
* @stable
|
||||
*/
|
||||
export interface CanDeactivate<T> {
|
||||
canDeactivate(component: T, route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
|
||||
Observable<boolean>|Promise<boolean>|boolean;
|
||||
canDeactivate(
|
||||
component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot,
|
||||
nextState?: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -985,9 +985,10 @@ export class PreActivation {
|
||||
const guard = this.getToken(c, curr);
|
||||
let observable: Observable<boolean>;
|
||||
if (guard.canDeactivate) {
|
||||
observable = wrapIntoObservable(guard.canDeactivate(component, curr, this.curr));
|
||||
observable =
|
||||
wrapIntoObservable(guard.canDeactivate(component, curr, this.curr, this.future));
|
||||
} else {
|
||||
observable = wrapIntoObservable(guard(component, curr, this.curr));
|
||||
observable = wrapIntoObservable(guard(component, curr, this.curr, this.future));
|
||||
}
|
||||
return first.call(observable);
|
||||
});
|
||||
|
Reference in New Issue
Block a user