Skip to content

Commit 64fb529

Browse files
eladzipper96agroupp
authored andcommitted
feat: 🎸 display generators names in generators menu
✅ Closes: #99
1 parent 68ca9e2 commit 64fb529

File tree

7 files changed

+86
-16
lines changed

7 files changed

+86
-16
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<cli-sidenav [menuItems]="menuItems">
1+
<cli-sidenav *ngIf="menuItems$ | async as menuItems" [menuItems]="menuItems">
22
<router-outlet></router-outlet>
33
</cli-sidenav>

‎libs/generators/src/lib/generators/generators.component.spec.ts‎

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,39 @@
1-
import { ComponentFixture, TestBed } from '@angular/core/testing';
1+
import {
2+
ComponentFixture,
3+
fakeAsync,
4+
flush,
5+
TestBed,
6+
} from '@angular/core/testing';
27
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
38
import { RouterTestingModule } from '@angular/router/testing';
9+
import { of } from 'rxjs';
10+
11+
import { GeneratorsService } from '../services/generatos-service/generators.service';
412

513
import { GeneratorsComponent } from './generators.component';
614

715
describe('GeneratorsComponent', () => {
816
let component: GeneratorsComponent;
917
let fixture: ComponentFixture<GeneratorsComponent>;
18+
let generatorsServiceMock: Partial<GeneratorsService>;
1019

1120
beforeEach(async () => {
21+
generatorsServiceMock = {
22+
getGeneratorsList: () =>
23+
of([
24+
{
25+
displayName: 'Component',
26+
originalName: 'component',
27+
description: 'generate component',
28+
},
29+
]),
30+
};
31+
1232
await TestBed.configureTestingModule({
1333
imports: [GeneratorsComponent, NoopAnimationsModule, RouterTestingModule],
34+
providers: [
35+
{ provide: GeneratorsService, useValue: generatorsServiceMock },
36+
],
1437
}).compileComponents();
1538

1639
fixture = TestBed.createComponent(GeneratorsComponent);
@@ -21,4 +44,18 @@ describe('GeneratorsComponent', () => {
2144
it('should create', () => {
2245
expect(component).toBeTruthy();
2346
});
47+
48+
describe('Component Init', () => {
49+
it('Should set menu items with list of generators', fakeAsync(() => {
50+
component.menuItems$.subscribe((menuItems) => {
51+
expect(menuItems).toEqual([
52+
{
53+
displayName: 'Component',
54+
url: 'component',
55+
},
56+
]);
57+
});
58+
flush();
59+
}));
60+
});
2461
});
Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1-
import { ChangeDetectionStrategy, Component } from '@angular/core';
1+
import { AsyncPipe, NgIf } from '@angular/common';
2+
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
23
import { RouterOutlet } from '@angular/router';
34
import { MenuItem, SidenavComponent } from '@angular-cli-gui/ui';
5+
import { Observable } from 'rxjs';
6+
import { map } from 'rxjs/operators';
7+
8+
import { GeneratorsService } from '../services/generatos-service/generators.service';
49

510
@Component({
611
selector: 'cli-generators',
712
standalone: true,
8-
imports: [SidenavComponent, RouterOutlet],
13+
imports: [SidenavComponent, RouterOutlet, AsyncPipe, NgIf],
914
templateUrl: './generators.component.html',
1015
styleUrls: ['./generators.component.scss'],
1116
changeDetection: ChangeDetectionStrategy.OnPush,
1217
})
13-
export class GeneratorsComponent {
14-
public menuItems: MenuItem[] = [
15-
'component',
16-
'directive',
17-
'module',
18-
'pipe',
19-
].map((item) => ({
20-
url: item,
21-
displayName: item,
22-
}));
18+
export class GeneratorsComponent implements OnInit {
19+
public menuItems$!: Observable<MenuItem[]>;
20+
21+
constructor(private generatorsService: GeneratorsService) {}
22+
23+
ngOnInit(): void {
24+
this.menuItems$ = this.generatorsService.getGeneratorsList().pipe(
25+
map((generatorList) => {
26+
return generatorList.map((generator) => ({
27+
displayName: generator.displayName,
28+
url: generator.originalName,
29+
}));
30+
})
31+
);
32+
}
2333
}
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
1-
import { HttpClientTestingModule } from '@angular/common/http/testing';
1+
import {
2+
HttpClientTestingModule,
3+
HttpTestingController,
4+
} from '@angular/common/http/testing';
25
import { TestBed } from '@angular/core/testing';
36

47
import { GeneratorsService } from './generators.service';
58

69
describe('GeneratorsService', () => {
710
let service: GeneratorsService;
8-
11+
let httpClientMock: HttpTestingController;
912
beforeEach(() => {
1013
TestBed.configureTestingModule({
1114
imports: [HttpClientTestingModule],
1215
});
1316
service = TestBed.inject(GeneratorsService);
17+
httpClientMock = TestBed.inject(HttpTestingController);
1418
});
1519

1620
it('should be created', () => {
1721
expect(service).toBeTruthy();
1822
});
23+
24+
describe('getGeneratorsList()', () => {
25+
it('Should call the get HTTP request to get list of generators', () => {
26+
service.getGeneratorsList().subscribe();
27+
const req = httpClientMock.expectOne('/api/generators');
28+
expect(req.request.method).toEqual('GET');
29+
});
30+
});
1931
});

‎libs/generators/src/lib/services/generatos-service/generators.service.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { HttpClient } from '@angular/common/http';
22
import { Injectable } from '@angular/core';
33
import {
4+
GeneratorDefinition,
45
IExecResult,
56
IGenerateComponentArgs,
67
} from '@angular-cli-gui/shared/data';
@@ -19,4 +20,8 @@ export class GeneratorsService {
1920
const body = { name, ...args };
2021
return this.http.post<IExecResult>(`/api/generate/component`, body);
2122
}
23+
24+
getGeneratorsList(): Observable<GeneratorDefinition[]> {
25+
return this.http.get<GeneratorDefinition[]>('/api/generators');
26+
}
2227
}

‎libs/shared/data/src/index.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ export * from './lib/exec-result.interface';
22
export * from './lib/generate-component-args.interface';
33
export * from './lib/directory.interface';
44
export * from './lib/storage-keys.consts';
5+
export * from './lib/generators/generator-definition.interface';
56
export * from './lib/workspace';
67
export * from './lib/executors';
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface GeneratorDefinition {
2+
displayName: string;
3+
originalName: string;
4+
description: string;
5+
}

0 commit comments

Comments
 (0)