11import { inject , Injectable , Type } from '@angular/core' ;
22import {
33 ActivatedRoute ,
4+ createUrlTreeFromSnapshot ,
45 Data ,
56 Event as RouterEvent ,
67 NavigationCancel ,
@@ -9,6 +10,7 @@ import {
910 NavigationStart ,
1011 Params ,
1112 Router ,
13+ RouterStateSnapshot ,
1214 RoutesRecognized ,
1315} from '@angular/router' ;
1416import { ComponentStore } from '@ngrx/component-store' ;
@@ -35,21 +37,12 @@ export class LocalRouterStore
3537 #routerState$: Observable < MinimalRouterStateSnapshot > = this . select (
3638 ( state ) => state . routerState
3739 ) ;
38- #rootRoute$ : Observable < MinimalActivatedRouteSnapshot > = this . select (
40+ #localRoute : Observable < MinimalActivatedRouteSnapshot > = this . select (
3941 this . #routerState$,
4042 ( routerState ) => routerState . root
4143 ) ;
4244
43- currentRoute$ : Observable < MinimalActivatedRouteSnapshot > = this . select (
44- this . #rootRoute$,
45- ( route ) => {
46- while ( route . firstChild ) {
47- route = route . firstChild ;
48- }
49-
50- return route ;
51- }
52- ) ;
45+ currentRoute$ : Observable < MinimalActivatedRouteSnapshot > = this . #localRoute;
5346 fragment$ : Observable < string | null > ;
5447 queryParams$ : Observable < Params > ;
5548 routeData$ : Observable < Data > ;
@@ -70,9 +63,7 @@ export class LocalRouterStore
7063 title : this . title$ ,
7164 } = this . #route) ;
7265 this . setState ( {
73- routerState : this . #serializer. serialize (
74- this . #router. routerState . snapshot
75- ) ,
66+ routerState : this . #serializeRouterState( this . #route) ,
7667 } ) ;
7768
7869 this . #updateRouterState(
@@ -83,7 +74,8 @@ export class LocalRouterStore
8374 NavigationCancel ,
8475 NavigationError
8576 ) . pipe (
86- map ( ( ) => this . #serializer. serialize ( this . #router. routerState . snapshot ) )
77+ map ( ( ) => this . #route) ,
78+ map ( ( route ) => this . #serializeRouterState( route ) )
8779 )
8880 ) ;
8981 }
@@ -114,4 +106,22 @@ export class LocalRouterStore
114106 filterRouterEvents ( ...acceptedEventTypes )
115107 ) as Observable < InstanceType < TAcceptedRouterEvents [ number ] > > ;
116108 }
109+
110+ #createRouterStateSnapshot( route : ActivatedRoute ) : RouterStateSnapshot {
111+ return {
112+ root : route . snapshot ,
113+ url : this . #router. serializeUrl (
114+ createUrlTreeFromSnapshot (
115+ route . snapshot ,
116+ [ ] ,
117+ route . snapshot . queryParams ,
118+ route . snapshot . fragment
119+ )
120+ ) ,
121+ } ;
122+ }
123+
124+ #serializeRouterState( route : ActivatedRoute ) : MinimalRouterStateSnapshot {
125+ return this . #serializer. serialize ( this . #createRouterStateSnapshot( route ) ) ;
126+ }
117127}
0 commit comments