Skip to content

Commit 61416ac

Browse files
committed
Change initialization process of localize router parser. Fixes #31
1 parent 52c8f3d commit 61416ac

File tree

5 files changed

+60
-40
lines changed

5 files changed

+60
-40
lines changed

package.json

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,15 @@
3939
"@ngx-translate/core": "^6.0.0"
4040
},
4141
"devDependencies": {
42-
"@angular/common": "2.4.0",
43-
"@angular/compiler": "2.4.0",
44-
"@angular/compiler-cli": "2.4.0",
45-
"@angular/core": "2.4.0",
46-
"@angular/http": "2.4.0",
47-
"@angular/platform-browser": "2.4.0",
48-
"@angular/platform-browser-dynamic": "2.4.0",
49-
"@angular/platform-server": "2.4.0",
50-
"@angular/router": "3.4.0",
51-
"@angular/upgrade": "2.4.0",
42+
"@angular/common": "2.4.8",
43+
"@angular/compiler": "2.4.8",
44+
"@angular/compiler-cli": "2.4.8",
45+
"@angular/core": "2.4.8",
46+
"@angular/http": "2.4.8",
47+
"@angular/platform-browser": "2.4.8",
48+
"@angular/platform-browser-dynamic": "2.4.8",
49+
"@angular/platform-server": "2.4.8",
50+
"@angular/router": "3.4.8",
5251
"@types/es6-promise": "0.0.32",
5352
"@types/hammerjs": "2.0.33",
5453
"@types/jasmine": "2.5.41",

src/localize-router.module.ts

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
import { NgModule, ModuleWithProviders, APP_INITIALIZER, Provider, OpaqueToken, Optional, SkipSelf } from '@angular/core';
1+
import {
2+
NgModule, ModuleWithProviders, APP_INITIALIZER, Provider, OpaqueToken, Optional, SkipSelf,
3+
Injectable, Injector
4+
} from '@angular/core';
25
import { HttpModule, Http } from '@angular/http';
36
import { LocalizeRouterService } from './localize-router.service';
4-
import { LocalizeParser, RAW_ROUTES, StaticParserLoader, parserInitializer } from './localize-router.parser';
7+
import { LocalizeParser, RAW_ROUTES, StaticParserLoader } from './localize-router.parser';
58
import { RouterModule, Routes } from '@angular/router';
69
import { LocalizeRouterPipe } from './localize-router.pipe';
710
import { TranslateModule, TranslateService } from '@ngx-translate/core';
@@ -24,6 +27,35 @@ export function localizeLoaderFactory(translate: TranslateService, location: Loc
2427
return new StaticParserLoader(translate, location, http);
2528
}
2629

30+
@Injectable()
31+
export class ParserInitializer {
32+
parser: LocalizeParser;
33+
routes: Routes;
34+
35+
constructor(private injector: Injector) {}
36+
37+
appInitializer(): Promise<any> {
38+
// TODO: Potentially add route guards here on existing routes
39+
40+
const res = this.parser.load(this.routes);
41+
res.then(() => {
42+
const localize: LocalizeRouterService = this.injector.get(LocalizeRouterService);
43+
localize.init();
44+
});
45+
46+
return res;
47+
}
48+
49+
generateInitializer(parser: LocalizeParser, routes: Routes[]) {
50+
this.parser = parser;
51+
this.routes = routes.reduce((a, b) => a.concat(b));
52+
return this.appInitializer;
53+
}
54+
}
55+
export function getAppInitializer(p: ParserInitializer, parser: LocalizeParser, routes: Routes[]) {
56+
return p.generateInitializer(parser, routes).bind(p);
57+
}
58+
2759
@NgModule({
2860
imports: [HttpModule, CommonModule, RouterModule, TranslateModule],
2961
declarations: [LocalizeRouterPipe],
@@ -42,8 +74,6 @@ export class LocalizeRouterModule {
4274
return {
4375
ngModule: LocalizeRouterModule,
4476
providers: [
45-
localizeLoader,
46-
LocalizeRouterService,
4777
{
4878
provide: LOCALIZE_ROUTER_FORROOT_GUARD,
4979
useFactory: provideForRootGuard,
@@ -54,11 +84,15 @@ export class LocalizeRouterModule {
5484
multi: true,
5585
useValue: routes
5686
},
87+
88+
localizeLoader,
89+
LocalizeRouterService,
90+
ParserInitializer,
5791
{
5892
provide: APP_INITIALIZER,
59-
useFactory: parserInitializer,
60-
deps: [LocalizeParser, RAW_ROUTES],
61-
multi: true
93+
multi: true,
94+
useFactory: getAppInitializer,
95+
deps: [ParserInitializer, LocalizeParser, RAW_ROUTES]
6296
}
6397
]
6498
};

src/localize-router.parser.ts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -309,24 +309,3 @@ export class StaticParserLoader extends LocalizeParser {
309309
});
310310
}
311311
}
312-
313-
/**
314-
* Pre-loading helper functions
315-
* Necessary evil for AOT
316-
* @param parser
317-
* @param routes
318-
* @returns {any}
319-
*/
320-
export function parserInitializer(parser: LocalizeParser, routes: any) {
321-
loadRoutes.prototype.parser = parser;
322-
loadRoutes.prototype.routes = routes.reduce(concatArrays);
323-
return loadRoutes;
324-
}
325-
326-
export function concatArrays(a: Array<any>, b: Array<any>): Array<any> {
327-
return a.concat(b);
328-
}
329-
330-
export function loadRoutes() {
331-
return loadRoutes.prototype.parser.load(loadRoutes.prototype.routes);
332-
}

src/localize-router.service.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,15 @@ export class LocalizeRouterService {
2020
* @param router
2121
*/
2222
constructor(public parser: LocalizeParser, private router: Router) {
23+
this.routerEvents = new Subject<string>();
24+
}
25+
26+
/**
27+
* Start up the service
28+
*/
29+
init() {
2330
this.router.resetConfig(this.parser.routes);
2431
this.router.events.subscribe(this._routeChanged());
25-
this.routerEvents = new Subject<string>();
2632
}
2733

2834
/**

tests/localize-router.service.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,13 @@ describe('LocalizeRouterService', () => {
9696
expect(localizeRouterService.routerEvents).toBeDefined();
9797
});
9898

99-
it('should reset route config on load', () => {
99+
it('should reset route config on init', () => {
100100
expect((<any>router)['routes']).toEqual(void 0);
101101
parser.routes = routes;
102102
spyOn(router, 'resetConfig').and.callThrough();
103103

104104
localizeRouterService = new LocalizeRouterService(parser, router);
105+
localizeRouterService.init();
105106
expect(router.resetConfig).toHaveBeenCalledWith(routes);
106107
});
107108

@@ -137,6 +138,7 @@ describe('LocalizeRouterService', () => {
137138

138139
it('should translate routes if language had changed on route event', () => {
139140
localizeRouterService = new LocalizeRouterService(parser, router);
141+
localizeRouterService.init();
140142
parser.currentLang = 'de';
141143
parser.locales = ['de', 'en'];
142144
spyOn(parser, 'translateRoutes').and.stub();

0 commit comments

Comments
 (0)