Skip to content

Commit 8a7abd3

Browse files
Refactoring templates
1 parent 0658abc commit 8a7abd3

34 files changed

+329
-213
lines changed

src/generators/AngularGenerator.js

+43-29
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,32 @@ export default class extends BaseGenerator {
88
constructor(params) {
99
super(params);
1010

11+
this.registerTemplates("common/", [
12+
// utils
13+
"utils/config.ts",
14+
"utils/date.ts",
15+
]);
16+
1117
this.registerTemplates("angular/", [
1218
// COMMON COMPONENTS
1319
"app/components/common/delete/delete.component.html",
1420
"app/components/common/delete/delete.component.ts",
21+
"app/components/common/header/header.component.css",
1522
"app/components/common/header/header.component.html",
1623
"app/components/common/header/header.component.ts",
1724
"app/components/common/layout/layout.component.html",
1825
"app/components/common/layout/layout.component.ts",
26+
"app/components/common/sidebar/sidebar.component.css",
1927
"app/components/common/sidebar/sidebar.component.html",
2028
"app/components/common/sidebar/sidebar.component.ts",
21-
"app/components/common/table/table.component.html",
22-
"app/components/common/table/table.component.ts",
29+
"app/components/common/svg/list-svg/list-svg.component.svg",
30+
"app/components/common/svg/list-svg/list-svg.component.ts",
31+
"app/components/common/svg/show-svg/show-svg.component.svg",
32+
"app/components/common/svg/show-svg/show-svg.component.ts",
33+
"app/components/common/svg/edit-svg/edit-svg.component.svg",
34+
"app/components/common/svg/edit-svg/edit-svg.component.ts",
35+
"app/components/common/svg/menu/menu.component.svg",
36+
"app/components/common/svg/menu/menu.component.ts",
2337

2438
// COMPONENTS
2539
"app/components/foo/create/create.component.html",
@@ -32,24 +46,17 @@ export default class extends BaseGenerator {
3246
"app/components/foo/list/list.component.ts",
3347
"app/components/foo/show/show.component.html",
3448
"app/components/foo/show/show.component.ts",
49+
"app/components/foo/table/table.component.html",
50+
"app/components/foo/table/table.component.ts",
3551
"app/app.component.html",
3652
"app/app.component.ts",
3753

38-
//SVG COMPONENT
39-
"app/components/svg/list-svg/list-svg.component.svg",
40-
"app/components/svg/list-svg/list-svg.component.ts",
41-
"app/components/svg/show-svg/show-svg.component.svg",
42-
"app/components/svg/show-svg/show-svg.component.ts",
43-
"app/components/svg/edit-svg/edit-svg.component.svg",
44-
"app/components/svg/edit-svg/edit-svg.component.ts",
45-
"app/components/svg/menu/menu.component.svg",
46-
"app/components/svg/menu/menu.component.ts",
47-
4854
//INTERFACE
4955
"app/interface/api.ts",
5056

5157
// ROUTER
5258
"app/router/foo.ts",
59+
"app/router/index.ts",
5360
"app/app.routes.ts",
5461

5562
//SERVICE
@@ -109,53 +116,53 @@ export default class extends BaseGenerator {
109116

110117
//CREATE DIRECTORIES - These directories may already exist
111118
[
112-
`${dir}/assets`,
113-
`${dir}/utils`,
114119
`${dir}/app/components/${lc}/create`,
115120
`${dir}/app/components/${lc}/edit`,
116121
`${dir}/app/components/${lc}/form`,
117122
`${dir}/app/components/${lc}/list`,
118123
`${dir}/app/components/${lc}/show`,
124+
`${dir}/app/components/${lc}/table`,
119125
`${dir}/app/components/common/delete`,
120126
`${dir}/app/components/common/header`,
121127
`${dir}/app/components/common/sidebar`,
122-
`${dir}/app/components/common/table`,
123-
`${dir}/app/components/svg/list-svg`,
124-
`${dir}/app/components/svg/show-svg`,
125-
`${dir}/app/components/svg/edit-svg`,
126-
`${dir}/app/components/svg/menu`,
128+
`${dir}/app/components/common/svg/list-svg`,
129+
`${dir}/app/components/common/svg/show-svg`,
130+
`${dir}/app/components/common/svg/edit-svg`,
131+
`${dir}/app/components/common/svg/menu`,
127132
`${dir}/app/interface`,
128133
`${dir}/app/router`,
129134
`${dir}/app/service`,
135+
`${dir}/app/utils`,
130136
].forEach((dir) => this.createDir(dir, false));
131137

132138
//CREATE FILE
133139
[
134-
"app/components/svg/list-svg/list-svg.component.svg",
135-
"app/components/svg/list-svg/list-svg.component.ts",
136-
"app/components/svg/show-svg/show-svg.component.svg",
137-
"app/components/svg/show-svg/show-svg.component.ts",
138-
"app/components/svg/edit-svg/edit-svg.component.svg",
139-
"app/components/svg/edit-svg/edit-svg.component.ts",
140-
"app/components/svg/menu/menu.component.svg",
141-
"app/components/svg/menu/menu.component.ts",
140+
"app/components/common/svg/list-svg/list-svg.component.svg",
141+
"app/components/common/svg/list-svg/list-svg.component.ts",
142+
"app/components/common/svg/show-svg/show-svg.component.svg",
143+
"app/components/common/svg/show-svg/show-svg.component.ts",
144+
"app/components/common/svg/edit-svg/edit-svg.component.svg",
145+
"app/components/common/svg/edit-svg/edit-svg.component.ts",
146+
"app/components/common/svg/menu/menu.component.svg",
147+
"app/components/common/svg/menu/menu.component.ts",
142148
"app/components/common/delete/delete.component.html",
143149
"app/components/common/delete/delete.component.ts",
150+
"app/components/common/header/header.component.css",
144151
"app/components/common/header/header.component.html",
145152
"app/components/common/header/header.component.ts",
146153
"app/components/common/sidebar/sidebar.component.css",
147154
"app/components/common/sidebar/sidebar.component.html",
148155
"app/components/common/sidebar/sidebar.component.ts",
149-
"app/components/common/table/table.component.html",
150-
"app/components/common/table/table.component.ts",
151156
"app/interface/api.ts",
157+
"app/service/api.service.ts",
152158
"app/app.component.html",
153159
"app/app.component.ts",
154160
"app/app.routes.ts",
155161
].forEach((file) =>
156162
this.createFile(file, `${dir}/${file}`, context, false)
157163
);
158164

165+
// DYNAMIC FILE
159166
[
160167
"app/router/%s.ts",
161168
"app/components/%s/list/list.component.html",
@@ -169,9 +176,16 @@ export default class extends BaseGenerator {
169176
"app/components/%s/show/show.component.html",
170177
"app/components/%s/show/show.component.ts",
171178
"app/components/%s/show/show.component.html",
179+
"app/components/%s/table/table.component.html",
180+
"app/components/%s/table/table.component.ts",
172181
].forEach((file) =>
173182
this.createFileFromPattern(file, dir, [lc, formFields], context)
174183
);
184+
185+
// CONFIG
186+
this.createConfigFile(`${dir}/app/utils/config.ts`, {
187+
entrypoint: api.entrypoint,
188+
});
175189
}
176190

177191
parseFields(resource) {

templates/angular/app/app.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import {Component} from '@angular/core';
2-
import {RouterOutlet} from '@angular/router';
31
import {AsyncPipe} from "@angular/common";
42
import {HttpClientModule} from "@angular/common/http";
3+
import {Component} from '@angular/core';
4+
import {RouterOutlet} from '@angular/router';
55
import {LayoutComponent} from "@components/common/layout/layout.component";
66

77
@Component({

templates/angular/app/app.routes.ts

+6-26
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,11 @@
1-
import {Routes} from '@angular/router';
2-
import {ListComponent} from "@components/foo/list/list.component";
3-
import {ShowComponent} from "@components/foo/show/show.component";
4-
import {EditComponent} from "@components/foo/edit/edit.component";
5-
import {CreateComponent} from "@components/foo/create/create.component";
6-
import {LayoutComponent} from "@components/common/layout/layout.component";
1+
import { Routes } from "@angular/router";
2+
import { LayoutComponent } from "@components/common/layout/layout.component";
3+
import { allRoutes } from "@router";
74

85
export const routes: Routes = [
96
{
10-
path: '',
7+
path: "",
118
component: LayoutComponent,
12-
children: [
13-
{
14-
path: '{{lc}}',
15-
component: ListComponent
16-
},
17-
{
18-
path: '{{lc}}/add',
19-
component: CreateComponent
20-
},
21-
{
22-
path: '{{lc}}/:id',
23-
component: ShowComponent,
24-
},
25-
{
26-
path: '{{lc}}/:id/edit',
27-
component: EditComponent
28-
},
29-
]
30-
}
9+
children: allRoutes,
10+
},
3111
];

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import {Component, EventEmitter, Input, Output} from '@angular/core';
1+
import {
2+
Component,
3+
EventEmitter,
4+
Input,
5+
Output
6+
} from '@angular/core';
27

38
@Component({
49
selector: 'app-delete',

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component } from '@angular/core';
2-
import {MenuComponent} from "@components/svg/menu/menu.component";
2+
import {MenuComponent} from "@components/common/svg/menu/menu.component";
33

44
@Component({
55
selector: 'app-header',

templates/angular/app/components/common/layout/layout.component.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
<app-header></app-header>
1+
<app-header />
22
<div class="flex">
33
<div class="w-1/6 h-100">
4-
<app-sidebar></app-sidebar>
4+
<app-sidebar />
55
</div>
66
<div class="w-5/6 ">
77
<router-outlet></router-outlet>

templates/angular/app/components/common/pagination/pagination.component.css

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<div class="flex justify-center mt-8">
2+
<nav aria-label="Page navigation">
3+
<ul class="flex list-style-none">
4+
<li>
5+
<a [routerLink]="['/books']"
6+
[routerLinkActive]="'bg-gray-200 text-gray-500 pointer-events-none'"
7+
(click)="changeUri(pagination()['hydra:first'])"
8+
class="bg-gray block py-2 px-3 rounded"
9+
aria-label="First page">
10+
<span aria-hidden="true">&lArr;</span>First
11+
</a>
12+
</li>
13+
@if (pagination()['hydra:previous']) {
14+
<li>
15+
<a [routerLink]="['/books']"
16+
[queryParams]="pageParamValue('hydra:previous')"
17+
[routerLinkActive]="'bg-gray-200 text-gray-500 pointer-events-none'"
18+
(click)="changeUri(pagination()['hydra:previous'])"
19+
class="bg-gray block py-2 px-3 rounded"
20+
aria-label="Previous page">
21+
Previous
22+
</a>
23+
</li>
24+
}
25+
@if (pagination()['hydra:next']) {
26+
<li>
27+
<a [routerLink]="['/books']"
28+
[queryParams]="pageParamValue('hydra:next')"
29+
[routerLinkActive]="'bg-gray-200 text-gray-500 pointer-events-none'"
30+
(click)="changeUri(pagination()['hydra:next'])"
31+
class="bg-gray block py-2 px-3 rounded"
32+
aria-label="Next page">
33+
Next
34+
</a>
35+
</li>
36+
}
37+
<li>
38+
<a [routerLink]="['/books']"
39+
[queryParams]="pageParamValue('hydra:last')"
40+
[routerLinkActive]="'bg-gray-200 text-gray-500 pointer-events-none'"
41+
(click)="changeUri(pagination()['hydra:last'])"
42+
class="bg-gray block py-2 px-3 rounded"
43+
aria-label="Last page">
44+
<span aria-hidden="true">&rAarr;</span> Last
45+
</a>
46+
</li>
47+
</ul>
48+
</nav>
49+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import {Component, EventEmitter, Input, Output, WritableSignal} from '@angular/core';
2+
import {RouterLink, RouterLinkActive} from "@angular/router";
3+
import { Pagination} from "@interface/api";
4+
5+
@Component({
6+
selector: 'app-pagination',
7+
standalone: true,
8+
imports: [
9+
RouterLink,
10+
RouterLinkActive
11+
],
12+
templateUrl: './pagination.component.html',
13+
styleUrl: './pagination.component.css'
14+
})
15+
export class PaginationComponent {
16+
@Input() pagination!:WritableSignal<Pagination>;
17+
@Output() handleChangePage = new EventEmitter()
18+
19+
pageParamValue(page: keyof Pagination) {
20+
const pageParams = this.pagination()[page].split('?page=')
21+
return {
22+
page: pageParams[1]
23+
}
24+
}
25+
26+
changeUri (uri: string) {
27+
this.handleChangePage.emit(uri)
28+
}
29+
}

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Component } from '@angular/core';
22
import {RouterLink, RouterLinkActive} from "@angular/router";
3-
import {ListSvgComponent} from "@components/svg/list-svg/list-svg.component";
3+
import {ListSvgComponent} from "@components/common/svg/list-svg/list-svg.component";
44

55
@Component({
66
selector: 'app-sidebar',
@@ -14,5 +14,4 @@ import {ListSvgComponent} from "@components/svg/list-svg/list-svg.component";
1414
styleUrl: './sidebar.component.css'
1515
})
1616
export class SidebarComponent {
17-
1817
}

templates/angular/app/components/svg/edit-svg/edit-svg.component.svg templates/angular/app/components/common/svg/edit-svg/edit-svg.component.svg

+2-1
Loading

templates/angular/app/components/svg/show-svg/show-svg.component.svg templates/angular/app/components/common/svg/show-svg/show-svg.component.svg

+3-2
Loading

templates/angular/app/components/foo/create/create.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
<div class="bg-blue-100 rounded py-4 px-4 text-blue-700 text-sm">Loading ...</div>
1010
} @else {
1111
<h1 class="text-3xl my-4">Create</h1>
12-
<app-form [fields]="formType" (submit)="onSubmit($event)"/>
12+
<app-form-{{lc}} [item]="item()" (submit)="onSubmit($event)"/>
1313
}
1414
</div>

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

+4-11
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import {FormsModule, ReactiveFormsModule} from "@angular/forms";
44
import {RouterLink} from "@angular/router";
55
import {DeleteComponent} from "@components/common/delete/delete.component";
66
import {FormComponent} from "@components/{{lc}}/form/form.component";
7+
import {ApiItem} from "@interface/api";
78
import {ApiService} from "@service/api.service";
89

910
@Component({
10-
selector: 'app-create',
11+
selector: 'app-create-{{lc}}',
1112
standalone: true,
1213
imports: [
1314
DeleteComponent,
@@ -21,21 +22,13 @@ import {ApiService} from "@service/api.service";
2122
export class CreateComponent {
2223
private apiService: ApiService = inject(ApiService)
2324
private location: Location = inject(Location)
25+
public item: WritableSignal<ApiItem> = signal({} as ApiItem)
2426
public isLoading: WritableSignal<boolean> = signal(false)
2527

26-
public formType: Array<{ name: string; type: string }> = [
27-
{
28-
name: 'name',
29-
type: 'string',
30-
}
31-
]
32-
3328
onSubmit(data: any) {
3429
return this.apiService
3530
.add('/{{lc}}',
36-
{
37-
...data
38-
}
31+
this.item()
3932
).subscribe(
4033
(item) => {
4134
this.isLoading.set(true)

0 commit comments

Comments
 (0)