Skip to content

Commit

Permalink
feat(router-store): serialize routeConfig inside the default serializ…
Browse files Browse the repository at this point in the history
…er (#1384)

BREAKING CHANGE:

The default router serializer now returns a `null` value for
`routeConfig` when `routeConfig` doesn't exist on the
`ActivatedRouteSnapshot` instead of an empty object.

BEFORE:

```json
{
  "routeConfig": {}
}
```

AFTER:

```json
{
  "routeConfig": null
}
```
  • Loading branch information
timdeschryver authored and brandonroberts committed Oct 30, 2018
1 parent 0e38673 commit 18a16d4
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 3 deletions.
101 changes: 101 additions & 0 deletions modules/router-store/spec/serializer.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { RouterStateSnapshot } from '@angular/router';
import { DefaultRouterStateSerializer } from '../src';

describe('serializer', () => {
it('should serialize all properties', () => {
const serializer = new DefaultRouterStateSerializer();
const snapshot = createSnapshot();
const routerState = {
url: 'url',
root: snapshot,
} as RouterStateSnapshot;

const actual = serializer.serialize(routerState);
const expected = {
url: 'url',
root: createExpectedSnapshot(),
};
expect(actual).toEqual(expected);
});

it('should serialize with an empty routeConfig', () => {
const serializer = new DefaultRouterStateSerializer();
const snapshot = { ...createSnapshot(), routeConfig: null };
const routerState = {
url: 'url',
root: snapshot,
} as RouterStateSnapshot;

const actual = serializer.serialize(routerState);
const expected = {
url: 'url',
root: {
...createExpectedSnapshot(),
routeConfig: null,
component: undefined,
},
};
expect(actual).toEqual(expected);
});

it('should serialize children', () => {
const serializer = new DefaultRouterStateSerializer();
const snapshot = {
...createSnapshot(),
children: [createSnapshot('child')],
};
const routerState = {
url: 'url',
root: snapshot,
} as RouterStateSnapshot;

const actual = serializer.serialize(routerState);

const expected = {
url: 'url',
root: {
...createExpectedSnapshot(),
firstChild: createExpectedSnapshot('child'),
children: [createExpectedSnapshot('child')],
},
};

expect(actual).toEqual(expected);
});

function createSnapshot(prefix = 'root'): any {
return {
params: `${prefix}-route.params`,
paramMap: `${prefix}-route.paramMap`,
data: `${prefix}-route.data`,
url: `${prefix}-route.url`,
outlet: `${prefix}-route.outlet`,
routeConfig: {
component: `${prefix}-route.routeConfig.component`,
path: `${prefix}-route.routeConfig.path`,
pathMatch: `${prefix}-route.routeConfig.pathMatch`,
redirectTo: `${prefix}-route.routeConfig.redirectTo`,
outlet: `${prefix}-route.routeConfig.outlet`,
},
queryParams: `${prefix}-route.queryParams`,
queryParamMap: `${prefix}-route.queryParamMap`,
fragment: `${prefix}-route.fragment`,
root: `${prefix}-route.root`,
parent: `${prefix}-route.parent`,
pathFromRoot: `${prefix}-route.params`,
firstChild: null,
children: [],
};
}

function createExpectedSnapshot(prefix = 'root') {
return {
...createSnapshot(prefix),
component: `${prefix}-route.routeConfig.component`,
root: undefined,
parent: undefined,
firstChild: undefined,
pathFromRoot: undefined,
};
}
});
12 changes: 9 additions & 3 deletions modules/router-store/src/serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,15 @@ export class DefaultRouterStateSerializer
data: route.data,
url: route.url,
outlet: route.outlet,
routeConfig: {
component: route.routeConfig ? route.routeConfig.component : undefined,
},
routeConfig: route.routeConfig
? {
component: route.routeConfig.component,
path: route.routeConfig.path,
pathMatch: route.routeConfig.pathMatch,
redirectTo: route.routeConfig.redirectTo,
outlet: route.routeConfig.outlet,
}
: null,
queryParams: route.queryParams,
queryParamMap: route.queryParamMap,
fragment: route.fragment,
Expand Down
20 changes: 20 additions & 0 deletions projects/ngrx.io/content/guide/migration/v7.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,26 @@ AFTER:
StoreRouterConnectingModule.forRoot(),
```

### ActivatedRouteSnapshot.RouteConfig

The default router serializer now returns a `null` value for `routeConfig` when `routeConfig` doesn't exist on the `ActivatedRouteSnapshot` instead of an empty object.

BEFORE:

```json
{
"routeConfig": {}
}
```

AFTER:

```json
{
"routeConfig": null
}
```

## @ngrx/store-devtools

The devtools is using the new `@ngrx/store-devtools/recompute` action to recompute its state instead of the `@ngrx/store/update-reducers` action.

0 comments on commit 18a16d4

Please sign in to comment.