Skip to content

Commit 5795f3c

Browse files
new create & form components
1 parent ca8f646 commit 5795f3c

File tree

11 files changed

+80
-58
lines changed

11 files changed

+80
-58
lines changed

src/generators/AngularGenerator.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export default class extends BaseGenerator {
5252
"app/app.routes.ts",
5353

5454
//SERVICE
55-
"app/service/hero.service.ts",
55+
"app/service/api.service.ts",
5656
]);
5757

5858
handlebars.registerHelper("compare", hbhComparison.compare);
@@ -80,17 +80,17 @@ export default class extends BaseGenerator {
8080
);
8181
}
8282

83-
8483
generate(api, resource, dir) {
8584
const lc = resource.title.toLowerCase();
8685
const titleUcFirst =
8786
resource.title.charAt(0).toUpperCase() + resource.title.slice(1);
8887
const fields = this.parseFields(resource);
88+
console.log(fields);
8989
const hasIsRelation = fields.some((field) => field.isRelation);
9090
const hasIsRelations = fields.some((field) => field.isRelations);
9191
const hasDateField = fields.some((field) => field.type === "dateTime");
9292

93-
console.log(resource)
93+
console.log(resource);
9494

9595
const context = {
9696
title: resource.title,

src/generators/AngularGenerator.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ test("Generate a React app", () => {
5858
"app/interface/show.model.ts",
5959
"app/interface/update.model.ts",
6060
"app/router/foo.ts",
61-
"app/service/hero.service.ts",
61+
"app/service/api.service.ts",
6262
].forEach((file) => expect(fs.existsSync(tmpobj.name + file)).toBe(true));
6363

6464
[

templates/angular/app/components/common/delete/delete.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {Component, EventEmitter, Input, Output} from '@angular/core';
2-
import {HeroService} from "../../../service/hero.service";
2+
import {ApiService} from "../../../service/api.service";
33
import {Location} from "@angular/common";
44

55
@Component({
@@ -12,7 +12,7 @@ export class DeleteComponent {
1212
@Input() disabled!: boolean
1313
@Output() delete: EventEmitter<Function> = new EventEmitter<Function>()
1414
constructor(
15-
private heroService: HeroService,
15+
private heroService: ApiService,
1616
private location: Location
1717
) {
1818
}
Original file line numberDiff line numberDiff line change
@@ -1 +1,18 @@
1-
<p>form works!</p>
1+
<form [formGroup]="formGroup" (ngSubmit)="handleSubmit()">
2+
@for (field of fields; track field.name) {
3+
<div class="mb-3">
4+
<label [for]="field.name">{{ field.name }}</label>
5+
<input [id]="field.name"
6+
[type]="field.type"
7+
[formControlName]="field.name"
8+
class="mt-1 w-full px-3 py-2 border rounded"
9+
>
10+
</div>
11+
}
12+
<button
13+
type="submit"
14+
class="px-6 py-2 bg-green-500 text-white font-medium rounded shadow-md hover:bg-green-600"
15+
>
16+
Submit
17+
</button>
18+
</form>
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,33 @@
1-
import { Component } from '@angular/core';
1+
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
2+
import {FormControl, FormGroup, ReactiveFormsModule} from "@angular/forms";
23

34
@Component({
45
selector: 'app-form',
56
standalone: true,
6-
imports: [],
7+
imports: [
8+
ReactiveFormsModule
9+
],
710
templateUrl: './form.component.html',
811
})
9-
export class FormComponent {
12+
export class FormComponent implements OnInit {
13+
@Input() fields: Array<{ name: string; type: string }> = [];
14+
@Output() submit = new EventEmitter
15+
public formGroup: FormGroup = new FormGroup<any>({})
1016

17+
ngOnInit() {
18+
this.formGroup = this.createFormGroup()
19+
}
20+
21+
createFormGroup() {
22+
const group: { [key: string]: FormControl<string | null> } = {}
23+
24+
this.fields.forEach(field => {
25+
group[field.name] = new FormControl('')
26+
})
27+
return new FormGroup(group)
28+
}
29+
30+
handleSubmit() {
31+
this.submit.emit(this.formGroup.value)
32+
}
1133
}
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
11
<div class="container mx-auto px-4 max-w-2xl mt-4">
22
<div class="flex items-center justify-between">
3-
<a [routerLink]="['/heroes']"
3+
<a [routerLink]="['/{{lc}}']"
44
class="text-blue-600 hover:text-blue-800">
5-
Back to list {{lc}}
5+
Back to list
66
</a>
77
</div>
88
@if (isLoading()) {
9-
<div class="bg-blue-100 rounded py-4 px-4 text-blue-700 text-sm">Loading ...</div>
9+
<div class="bg-blue-100 rounded py-4 px-4 text-blue-700 text-sm">Loading ...</div>
1010
} @else {
11-
<h1 class="text-3xl my-4">Create</h1>
12-
13-
<form (ngSubmit)="onSubmit($event)">
14-
<div class="mb-3">
15-
<label for="name"> name</label>
16-
<input id="name"
17-
class="mt-1 w-full px-3 py-2 border rounded"
18-
[formControl]="input"
19-
>
20-
</div>
21-
22-
<button
23-
type="submit"
24-
class="px-6 py-2 bg-green-500 text-white font-medium rounded shadow-md hover:bg-green-600"
25-
>
26-
Submit
27-
</button>
28-
</form>
11+
<h1 class="text-3xl my-4">Create</h1>
12+
<app-form [fields]="{{{formType}}}" (submit)="onSubmit($event)"/>
2913
}
3014
</div>
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {Component, signal, WritableSignal} from '@angular/core';
22
import {DeleteComponent} from "../../common/delete/delete.component";
33
import {RouterLink} from "@angular/router";
4-
import {HeroService} from "../../../service/hero.service";
5-
import {FormControl, FormsModule, ReactiveFormsModule} from "@angular/forms";
6-
import {Foo} from "../../../interface/foo.model";
4+
import {ApiService} from "../../../service/api.service";
5+
import {FormsModule, ReactiveFormsModule} from "@angular/forms";
76
import {Location} from "@angular/common";
7+
import {FormComponent} from "../../common/form/form.component";
88

99
@Component({
1010
selector: 'app-create',
@@ -13,27 +13,27 @@ import {Location} from "@angular/common";
1313
DeleteComponent,
1414
RouterLink,
1515
FormsModule,
16-
ReactiveFormsModule
16+
ReactiveFormsModule,
17+
FormComponent
1718
],
1819
templateUrl: './create.component.html',
1920
})
2021
export class CreateComponent {
2122
public isLoading: WritableSignal<boolean> = signal(false)
22-
public item: WritableSignal<Foo> = signal({})
23-
public input:FormControl<string | null> = new FormControl('')
23+
public formType: Array<{ name: string; type: string }> = [
24+
{
25+
name: 'name',
26+
type: 'string',
27+
}
28+
]
2429

25-
constructor(private heroService: HeroService, private location: Location) {
30+
constructor(private apiService: ApiService, private location: Location) {
2631
}
27-
28-
setItem(event: any) {
29-
this.item.set(event)
30-
}
31-
32-
onSubmit(event: any) {
33-
return this.heroService
34-
.add('/heroes',
32+
onSubmit(data: any) {
33+
return this.apiService
34+
.add('/{{lc}}',
3535
{
36-
name: this.input.value
36+
...data
3737
}
3838
).subscribe(
3939
(item) => {
@@ -42,5 +42,4 @@ export class CreateComponent {
4242
}
4343
)
4444
}
45-
4645
}

templates/angular/app/components/foo/edit/edit.component.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Component, computed, OnInit, signal, WritableSignal} from '@angular/core';
22
import {DeleteComponent} from "../../common/delete/delete.component";
33
import {Router, RouterLink} from "@angular/router";
4-
import {HeroService} from "../../../service/hero.service";
4+
import {ApiService} from "../../../service/api.service";
55
import {CommonModule, Location} from "@angular/common";
66
import {ApiShow} from "../../../interface/api";
77
import {FormsModule, ReactiveFormsModule} from "@angular/forms";
@@ -25,7 +25,7 @@ export class EditComponent implements OnInit {
2525

2626
constructor(
2727
private router: Router,
28-
private heroService: HeroService,
28+
private heroService: ApiService,
2929
private location: Location
3030
) {
3131
}
@@ -38,7 +38,7 @@ export class EditComponent implements OnInit {
3838
this.isLoading.set(true)
3939
const splitUrl = this.router.url.split('/edit')[0]
4040
this.heroService
41-
.getHero(splitUrl)
41+
.getData(splitUrl)
4242
.subscribe(item => {
4343
this.item.set(item)
4444
this.isLoading.set(false)

templates/angular/app/components/foo/list/list.component.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {Component, computed, OnInit, Output, signal, WritableSignal} from '@angu
22
import {RouterLink} from "@angular/router";
33
import {AsyncPipe, Location, NgFor, NgIf} from "@angular/common";
44
import {TableComponent} from "../../common/table/table.component";
5-
import {HeroService} from "../../../service/hero.service";
5+
import {ApiService} from "../../../service/api.service";
66
import {Hero} from "../../../interface/hero.model";
77
import {DeleteComponent} from "../../common/delete/delete.component";
88
import {log} from "node:util";
@@ -28,15 +28,15 @@ export class ListComponent implements OnInit {
2828
@Output() bulk: WritableSignal<Array<string>> = signal([])
2929

3030
constructor(
31-
private heroService: HeroService,
31+
private heroService: ApiService,
3232
private location: Location
3333
) {
3434
}
3535

3636
ngOnInit() {
3737
this.isLoading.set(true)
3838
this.heroService
39-
.getHeroes('/heroes')
39+
.getDataes('/heroes')
4040
.subscribe(
4141
(items) => {
4242
this.heroes.set(items['hydra:member'])

templates/angular/app/components/foo/show/show.component.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Component, OnInit, signal, WritableSignal} from '@angular/core';
22
import {Router, RouterLink} from "@angular/router";
33
import {CommonModule, Location} from "@angular/common";
4-
import {HeroService} from "../../../service/hero.service";
4+
import {ApiService} from "../../../service/api.service";
55
import {DeleteComponent} from "../../common/delete/delete.component";
66
import {ApiShow} from "../../../interface/api";
77

@@ -21,7 +21,7 @@ export class ShowComponent implements OnInit {
2121
public error = signal(undefined)
2222

2323
constructor(
24-
private heroService: HeroService,
24+
private heroService: ApiService,
2525
private router: Router,
2626
private location: Location
2727
) {
@@ -31,7 +31,7 @@ export class ShowComponent implements OnInit {
3131
this.isLoading.set(true)
3232
const id = this.router.url
3333
this.heroService
34-
.getHero(id)
34+
.getData(id)
3535
.subscribe(item => {
3636
this.item.set(item)
3737
this.isLoading.set(false)

templates/angular/app/service/hero.service.ts renamed to templates/angular/app/service/api.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {ApiList, ApiShow} from "../interface/api";
55
import {Foo} from "../interface/foo.model";
66

77
@Injectable({providedIn: 'root'})
8-
export class HeroService {
8+
export class ApiService {
99
baseUrl: string = 'https://localhost'
1010
httpOptions = {
1111
headers: new HttpHeaders({

0 commit comments

Comments
 (0)