Skip to content

Commit d426979

Browse files
authored
Merge pull request #59 from IgniteUI/bpachilova/configure-routing-standalone
feat(routing): configure after migration to standalone
2 parents 2bab25e + 0a2da67 commit d426979

3 files changed

Lines changed: 23 additions & 10 deletions

File tree

src/generators/SampleAssetsGenerator.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { DependencyResolver } from "./../services/DependencyResolver";
77
import { LiveEditingFile, SAMPLE_APP_FOLDER, SAMPLE_SRC_FOLDER } from "./misc/LiveEditingFile";
88
import { TsImportsService } from "../services/TsImportsService";
99
import { componentPaths, appRouting } from "../services/TsRoutingPathService";
10-
import { IConfigGenerator, Config, ILiveEditingOptions } from "../public";
10+
import { IConfigGenerator, Config, ILiveEditingOptions, RoutesConfig } from "../public";
1111
import { SampleDefinitionFile } from "./misc/SampleDefinitionFile";
1212

1313
const APP_MODULE_TEMPLATE_PATH = path.join(__dirname, "../templates/app.module.ts.template");
@@ -145,7 +145,7 @@ export class SampleAssetsGenerator {
145145
));
146146
sampleFiles.push(new LiveEditingFile(
147147
SAMPLE_APP_FOLDER + "app.component.html",
148-
this._getAppComponentHtml(componentTsContent, config.usesRouting)));
148+
this._getAppComponentHtml(componentTsContent, config.appConfig.routesConfig)));
149149
sampleFiles.push(new LiveEditingFile(
150150
`${SAMPLE_APP_FOLDER}app.config.ts`,
151151
this._getAppConfig(config, configImports, configAdditionalImports),
@@ -251,16 +251,19 @@ export class SampleAssetsGenerator {
251251
private _getAppComponentTs(config: Config, sampleFiles: LiveEditingFile[]) {
252252
let appComponentTemplate = fs.readFileSync(APP_COMPONENT_TEMPLATE_PATH, "utf8");
253253
const mainSampleTsPath = sampleFiles.filter(f => f.isMain && f.fileExtension === "ts")[0].path;
254+
const importRouter = config.appConfig.routesConfig?.router ?? false;
254255
return appComponentTemplate
255256
.replace(/\{sampleAppComponent\}/g, config.component)
256257
.replace(/\{appImport\}/g, `.\/${mainSampleTsPath.substring(mainSampleTsPath.indexOf("app/") + 4)}`)
258+
.replace(/\{routerOutlet\}/g, importRouter ? ", RouterOutlet" : "")
259+
.replace(/\{routerOutletImport\}/g, importRouter ? "import { RouterOutlet } from '@angular/router';" : "")
257260
.replace(".ts", "");
258261
}
259262

260-
private _getAppComponentHtml(componentTsContent, usesRouting) {
263+
private _getAppComponentHtml(componentTsContent, routesConfig?: RoutesConfig) {
261264
let selectorRegex = /selector:[\s]*["']([a-zA-Z0-9-]+)["']/g;
262265
let selectorComponent = selectorRegex.exec(componentTsContent)[1];
263-
let appComponentHtml = usesRouting ? "<router-outlet></router-outlet>" :
266+
let appComponentHtml = routesConfig?.router ? "<router-outlet></router-outlet>" :
264267
"<" + selectorComponent + "></" + selectorComponent + ">";
265268
return appComponentHtml;
266269
}
@@ -314,8 +317,9 @@ export class SampleAssetsGenerator {
314317
}
315318
});
316319
}
317-
if (appConfig.router) {
320+
if (this._shouldConfigureRouting(config)) {
318321
importMap.set('@angular/router', ['provideRouter', 'withComponentInputBinding']);
322+
importMap.set(`${appConfig.routesConfig.routesImportPath}`, ['routes']);
319323
}
320324
return importMap;
321325
}
@@ -351,15 +355,20 @@ export class SampleAssetsGenerator {
351355
formatted += ` ${provider}${i < providers.length - 1 ? ',\n' : ''}`;
352356
});
353357
}
354-
if (config.appConfig.router) {
358+
if (this._shouldConfigureRouting(config)) {
355359
if (formatted.length > 0) {
356360
formatted += ',\n';
357361
}
358-
formatted += ` provideRouter([], withComponentInputBinding())`;
362+
formatted += ` provideRouter(routes, withComponentInputBinding())`;
359363
}
360364
return formatted;
361365
}
362366

367+
private _shouldConfigureRouting(config: Config): boolean {
368+
const routesConfig = config?.appConfig?.routesConfig;
369+
return !!(routesConfig?.router && routesConfig?.routesImportPath);
370+
}
371+
363372
private _getAppModuleConfig(config: Config, configImports, configAdditionalImports?) {
364373
let defaultNgDeclarations = ["AppComponent"];
365374
let defaultNgImports = ["BrowserModule", "BrowserAnimationsModule", "FormsModule"];

src/public.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,12 @@ export class AppModuleConfig {
3939
export interface AppConfig {
4040
modules: ModuleProvider[];
4141
providers: Provider[];
42-
router?: boolean;
42+
routesConfig?: RoutesConfig;
4343
additionalAdjustments?: string[];
4444
}
4545

4646
export class Config {
4747
public component: string;
48-
public usesRouting: boolean;
4948
public additionalFiles: string[];
5049
public appModuleConfig?: AppModuleConfig;
5150
public appConfig: AppConfig;
@@ -106,3 +105,7 @@ export interface Provider {
106105
import: string
107106
}
108107

108+
export interface RoutesConfig {
109+
router?: boolean;
110+
routesImportPath?: string;
111+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { Component } from "@angular/core";
22
import { {sampleAppComponent} } from "{appImport}";
3+
{routerOutletImport}
34

45
@Component({
56
selector: "app-root",
67
styleUrls: ["./app.component.scss"],
78
templateUrl: "./app.component.html",
8-
imports: [{sampleAppComponent}]
9+
imports: [{sampleAppComponent}{routerOutlet}]
910
})
1011
export class AppComponent {}

0 commit comments

Comments
 (0)