Skip to content

Commit 26f9b0d

Browse files
srizzongleisonkz
authored andcommitted
✨ feat: generate dialog component
1 parent 1189b6a commit 26f9b0d

File tree

3 files changed

+96
-1
lines changed

3 files changed

+96
-1
lines changed

__tests__/cli.test.ts

+34
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,40 @@ describe('[CLI]', () => {
3939
});
4040
});
4141

42+
describe('[Commands: generate dialog component]', () => {
43+
afterEach(() => {
44+
filesystem.remove('sample');
45+
});
46+
47+
test('should generate a dialog component with 3 files', async () => {
48+
await cli('g c d sample');
49+
50+
const html = filesystem.read('sample/sample.dialog.html');
51+
const scss = filesystem.read('sample/sample.dialog.scss');
52+
const ts = filesystem.read('sample/sample.dialog.ts');
53+
54+
expect(html).toBeDefined();
55+
expect(scss).toBeDefined();
56+
expect(ts).toBeDefined();
57+
});
58+
59+
test('should generate a dialog component html with default template <p>sample works</p>', async () => {
60+
await cli('g c d sample');
61+
62+
const html = filesystem.read('sample/sample.dialog.html');
63+
expect(html).toContain('<p>sample works</p>');
64+
});
65+
66+
test('should generate a dialog component with correct templateUrl: and styleUrls ', async () => {
67+
await cli('g c d sample');
68+
69+
const ts = filesystem.read('sample/sample.dialog.ts');
70+
71+
expect(ts).toContain(`templateUrl: './sample.dialog.html'`);
72+
expect(ts).toContain(`styleUrls: ['./sample.dialog.scss']`);
73+
});
74+
});
75+
4276
describe('[Commands: generate widget component]', () => {
4377
afterEach(() => {
4478
filesystem.remove('sample');

src/commands/generate/component/component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const COMMAND: GluegunCommand = {
1414
let componentName = parameters.first;
1515

1616
const QUESTION = 'Qual tipo de componente você deseja criar?';
17-
const TYPES = ['common', 'page', 'widget', 'layout'];
17+
const TYPES = ['common', 'page', 'widget', 'layout', 'dialog'];
1818

1919
const componentTypeResponse: GluegunAskResponse = await prompt.ask({
2020
type: 'select',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { GluegunCommand, GluegunToolbox } from 'gluegun';
2+
import { GluegunAskResponse } from 'gluegun/build/types/toolbox/prompt-types';
3+
4+
import { printCreated } from '../../../../utils/functions.helper';
5+
6+
const COMMAND: GluegunCommand = {
7+
name: 'dialog',
8+
alias: ['d'],
9+
description: 'cria um componente Angular de tipo Dialog',
10+
run: async (toolbox: GluegunToolbox) => {
11+
const { parameters, print, prompt, template, strings } = toolbox;
12+
13+
let componentName = parameters.first;
14+
15+
if (!componentName) {
16+
const response: GluegunAskResponse = await prompt.ask({
17+
type: 'input',
18+
name: 'componentName',
19+
message: 'Qual o nome do componente?',
20+
validate: (value: string) => {
21+
if (!value) {
22+
return 'O nome do componente não pode ser vazio';
23+
}
24+
25+
return true;
26+
}
27+
});
28+
29+
componentName = response.componentName;
30+
}
31+
32+
const componentNameKebab = strings.kebabCase(componentName);
33+
34+
template.generate({
35+
template: 'component.template.html.ejs',
36+
target: `./${componentNameKebab}/${componentNameKebab}.dialog.html`,
37+
props: { name: componentNameKebab, ...strings }
38+
});
39+
40+
template.generate({
41+
template: 'component.template.ts.ejs',
42+
target: `./${componentNameKebab}/${componentNameKebab}.dialog.ts`,
43+
props: {
44+
type: 'dialog',
45+
name: componentName,
46+
...strings
47+
}
48+
});
49+
50+
template.generate({
51+
template: 'component.template.scss.ejs',
52+
target: `./${componentNameKebab}/${componentNameKebab}.dialog.scss`
53+
});
54+
55+
printCreated(print, `${componentNameKebab}/${componentNameKebab}.dialog.html`);
56+
printCreated(print, `${componentNameKebab}/${componentNameKebab}.dialog.ts`);
57+
printCreated(print, `${componentNameKebab}/${componentNameKebab}.dialog.scss`);
58+
}
59+
};
60+
61+
module.exports = COMMAND;

0 commit comments

Comments
 (0)