Skip to content
This repository was archived by the owner on Nov 21, 2024. It is now read-only.

Commit 2541bcf

Browse files
committed
feat(generators): Add page+frame generator
1 parent 7f37b05 commit 2541bcf

58 files changed

Lines changed: 426 additions & 22 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 8 additions & 0 deletions

src/bin/app.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class App {
111111
});
112112
this.program
113113
.command('grid')
114-
.option('-t, --template [name]', 'template folder name or path', 'web-grid')
114+
.option('-t, --template [name]', 'template folder name or path', 'grid')
115115
.option('-en, --entity-name [name]', 'entity name')
116116
.option('-pf, --pk-field [name]', 'primary key name', 'id')
117117
.option('-fi, --fields [names]', 'fields of entity', '"\'name\',\'title\',\'createdAt\',\'updatedAt\'"')
@@ -126,23 +126,33 @@ export class App {
126126
});
127127
this.program
128128
.command('page')
129-
.option('-t, --template [name]', 'template folder name or path', 'web-page')
129+
.option('-t, --template [name]', 'template folder name or path', 'page')
130130
.option('-pn, --page-name [name]', 'page name')
131131
.option('-al, --app-name [name]', 'app name, by default it is first app from ".angular-cli.json"')
132132
.option('-af, --app-folder [path]', 'app path, by default it is first app from ".angular-cli.json"')
133133
.description('scaffold empty page')
134134
.action(async (dummy, command) => {
135135
await (new GeneratorCommand(_.merge(this.program, command, dummy))).processPage();
136136
});
137-
this.program.parse(process.argv);
137+
this.program
138+
.command('page+frame')
139+
.option('-t, --template [name]', 'template folder name or path', 'page+frame')
140+
.option('-pn, --page-name [name]', 'page name')
141+
.option('-fn, --frame-name [name]', 'frame name')
142+
.option('-al, --app-name [name]', 'app name, by default it is first app from ".angular-cli.json"')
143+
.option('-af, --app-folder [path]', 'app path, by default it is first app from ".angular-cli.json"')
144+
.description('scaffold empty frame on page')
145+
.action(async (dummy, command) => {
146+
await (new GeneratorCommand(_.merge(this.program, command, dummy))).processPageAndFrame();
147+
});
138148
this.program
139149
.command('frame')
140-
.option('-t, --template [name]', 'template folder name or path', 'web-frame')
150+
.option('-t, --template [name]', 'template folder name or path', 'frame')
141151
.option('-pn, --page-name [name]', 'page name')
142152
.option('-fn, --frame-name [name]', 'frame name')
143153
.option('-al, --app-name [name]', 'app name, by default it is first app from ".angular-cli.json"')
144154
.option('-af, --app-folder [path]', 'app path, by default it is first app from ".angular-cli.json"')
145-
.description('scaffold empty page')
155+
.description('scaffold empty frame')
146156
.action(async (dummy, command) => {
147157
await (new GeneratorCommand(_.merge(this.program, command, dummy))).processFrame();
148158
});

src/commands/generator.command.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import { FrameGenerator } from '../generators/frame';
12
import { GridGenerator } from '../generators/grid';
2-
import { BaseCommand } from './base.command';
33
import { PageGenerator } from '../generators/page';
4-
import { FrameGenerator } from '../generators/frame';
4+
import { PageAndFrameGenerator } from '../generators/page-and-frame';
5+
import { BaseCommand } from './base.command';
56

67
export class GeneratorCommand extends BaseCommand {
78
constructor(public options: any) {
@@ -58,6 +59,29 @@ export class GeneratorCommand extends BaseCommand {
5859
})
5960
);
6061
}
62+
async processPageAndFrame() {
63+
this.log('generator').info('Run generator for ' + this.rootFolder);
64+
const gen = new PageAndFrameGenerator(this.rootFolder);
65+
gen.debug = this.debug;
66+
const result = false;
67+
return await new Promise<boolean>((resolve: any) =>
68+
gen.proccess({
69+
pageName: this.options.pageName,
70+
frameName: this.options.frameName,
71+
project: this.project,
72+
appName: this.options.appName,
73+
appFolder: this.options.appFolder,
74+
template: this.options.template
75+
}).then((result: boolean) => {
76+
this.log('generator').info('Done!');
77+
resolve(true);
78+
}).catch((e: any) => {
79+
this.log('generator').error(e);
80+
this.log('generator').info('Done with errors!');
81+
resolve(false);
82+
})
83+
);
84+
}
6185
async processFrame() {
6286
this.log('generator').info('Run generator for ' + this.rootFolder);
6387
const gen = new FrameGenerator(this.rootFolder);

src/generators/frame.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class FrameGenerator extends Base {
2323
let rootFolder = path.resolve(this.rootFolder);
2424
let pageName = '';
2525
let frameName = '';
26-
let template: string = 'web-frame';
26+
let template: string = 'frame';
2727
let appName =
2828
(customOptions && customOptions.project.appsConfigs[0] && customOptions &&
2929
customOptions.project.appsConfigs[0].name) ?

src/generators/grid.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export class GridGenerator extends Base {
5353
(customOptions && customOptions.project.libsConfigs[1] && customOptions &&
5454
customOptions.project.libsConfigs[1].localPath) ?
5555
customOptions && customOptions.project.libsConfigs[1].localPath : 'web';
56-
let template: string = 'web-grid';
56+
let template: string = 'grid';
5757
let pkField: string = 'id';
5858
let fields: string[] = [
5959
'name',

src/generators/page-and-frame.ts

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import * as _ from 'lodash';
2+
import * as path from 'path';
3+
4+
import { Base } from '../lib/base';
5+
import { Project } from '../lib/project';
6+
7+
8+
export class PageAndFrameGenerator extends Base {
9+
10+
name = 'page+frame';
11+
12+
constructor(public rootFolder?: string) {
13+
super(null, rootFolder);
14+
}
15+
async proccess(customOptions?: {
16+
project: Project,
17+
pageName: string,
18+
frameName: string,
19+
appName: string,
20+
appFolder: string,
21+
template: string
22+
}) {
23+
let rootFolder = path.resolve(this.rootFolder);
24+
let pageName = '';
25+
let frameName = '';
26+
let template: string = 'page+frame';
27+
let appName =
28+
(customOptions && customOptions.project.appsConfigs[0] && customOptions &&
29+
customOptions.project.appsConfigs[0].name) ?
30+
customOptions && customOptions.project.appsConfigs[0].name : 'app';
31+
let appFolder =
32+
(customOptions && customOptions.project.appsConfigs[0] && customOptions &&
33+
customOptions.project.appsConfigs[0].localPath) ?
34+
customOptions && customOptions.project.appsConfigs[0].localPath : 'app';
35+
if (customOptions && customOptions.template) {
36+
template = customOptions.template;
37+
}
38+
if (customOptions && customOptions.pageName) {
39+
pageName = customOptions.pageName;
40+
}
41+
if (customOptions && customOptions.frameName) {
42+
frameName = customOptions.frameName;
43+
}
44+
if (customOptions && customOptions.appName) {
45+
appName = customOptions.appName;
46+
}
47+
if (customOptions && customOptions.appFolder) {
48+
appFolder = customOptions.appFolder;
49+
}
50+
const options = _.merge(
51+
{
52+
'app': {
53+
'name': appName,
54+
'folder': appFolder
55+
},
56+
'page': {
57+
'name': _.kebabCase(pageName),
58+
'classPrefix': _.upperFirst(_.camelCase(pageName)),
59+
'title': _.upperFirst(_.words(pageName).join(' '))
60+
},
61+
'frame': {
62+
'name': _.kebabCase(frameName),
63+
'classPrefix': _.upperFirst(_.camelCase(frameName)),
64+
'title': _.upperFirst(_.words(frameName).join(' '))
65+
}
66+
}
67+
);
68+
return await this.srcgen(
69+
rootFolder,
70+
'generatorPageAndFrame',
71+
template,
72+
options,
73+
rootFolder
74+
);
75+
}
76+
}

src/generators/page.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class PageGenerator extends Base {
2121
}) {
2222
let rootFolder = path.resolve(this.rootFolder);
2323
let pageName = '';
24-
let template: string = 'web-page';
24+
let template: string = 'page';
2525
let appName =
2626
(customOptions && customOptions.project.appsConfigs[0] && customOptions &&
2727
customOptions.project.appsConfigs[0].name) ?

src/lib/base.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ export class Base {
338338
if (!fsExtra.pathExistsSync(srcgenTemplate)) {
339339
srcgenTemplate = templateName;
340340
}
341+
this.log(name).debug(srcgenTemplate);
341342
const optionsFile = path.resolve(__dirname + '/../../srcgen/temp_' + process.hrtime() + '-' + path.basename(srcgenTemplate) + '.json');
342343
fsExtra.writeJSONSync(optionsFile, options);
343344
if (!fsExtra.existsSync(optionsFile)) {

srcgen/web-frame/%app.folder%/src/pages/%page.name%-page/%frame.name%-frame/%frame.name%-frame.component.html renamed to srcgen/frame/%app.folder%/src/pages/%page.name%-page/%frame.name%-frame/%frame.name%-frame.component.html

File renamed without changes.

srcgen/web-frame/%app.folder%/src/pages/%page.name%-page/%frame.name%-frame/%frame.name%-frame.component.scss renamed to srcgen/frame/%app.folder%/src/pages/%page.name%-page/%frame.name%-frame/%frame.name%-frame.component.scss

File renamed without changes.

0 commit comments

Comments
 (0)