angular-base-lib 17.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/esm2022/angular-base-lib.mjs +5 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/lib/forms/form-util.mjs +9 -0
- package/esm2022/lib/forms/index.mjs +2 -0
- package/esm2022/lib/index.mjs +5 -0
- package/esm2022/lib/model-component/action/index.mjs +2 -0
- package/esm2022/lib/model-component/action/model-action.mjs +2 -0
- package/esm2022/lib/model-component/action/model-action.type.mjs +2 -0
- package/esm2022/lib/model-component/base-model-detail.component.mjs +46 -0
- package/esm2022/lib/model-component/base-model-edit.component.mjs +8 -0
- package/esm2022/lib/model-component/base-model-list.component.mjs +38 -0
- package/esm2022/lib/model-component/base-model.component.mjs +22 -0
- package/esm2022/lib/model-component/base.component.mjs +15 -0
- package/esm2022/lib/model-component/index.mjs +6 -0
- package/esm2022/lib/navigation/back-button.directive.mjs +24 -0
- package/esm2022/lib/navigation/index.mjs +3 -0
- package/esm2022/lib/navigation/navigation.service.mjs +35 -0
- package/esm2022/lib/types/index.mjs +2 -0
- package/esm2022/lib/types/value-change-callback.type.mjs +2 -0
- package/fesm2022/angular-base-lib.mjs +191 -0
- package/fesm2022/angular-base-lib.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/forms/form-util.d.ts +4 -0
- package/lib/forms/index.d.ts +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/model-component/action/index.d.ts +2 -0
- package/lib/model-component/action/model-action.d.ts +5 -0
- package/lib/model-component/action/model-action.type.d.ts +1 -0
- package/lib/model-component/base-model-detail.component.d.ts +17 -0
- package/lib/model-component/base-model-edit.component.d.ts +5 -0
- package/lib/model-component/base-model-list.component.d.ts +14 -0
- package/lib/model-component/base-model.component.d.ts +10 -0
- package/lib/model-component/base.component.d.ts +6 -0
- package/lib/model-component/index.d.ts +5 -0
- package/lib/navigation/back-button.directive.d.ts +7 -0
- package/lib/navigation/index.d.ts +2 -0
- package/lib/navigation/navigation.service.d.ts +11 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/value-change-callback.type.d.ts +1 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# angular-base
|
|
2
|
+
|
|
3
|
+
Library with different abstract components and utilities that come in handy for simple angular-applications.
|
|
4
|
+
|
|
5
|
+
# base-auth-service
|
|
6
|
+
|
|
7
|
+
Includes logic to receive the current login-state/user/etc. as observables.
|
|
8
|
+
This abstract auth-service is used for the two included auth-guard-functions that can be used for protecting routes.
|
|
9
|
+
|
|
10
|
+
The reason behind the 'pending' auth-state is to ensure the correct state inside the auth-guard. For example if the frontend used cookies for keeping the auth state, you can check the token and then decide if the user is logged-in or logged-out after the token was validated.
|
|
11
|
+
|
|
12
|
+
## login-in-guard
|
|
13
|
+
|
|
14
|
+
Waits until the auth state is not pending
|
|
15
|
+
|
|
16
|
+
- If the user is not logged-in, the user is redirected to the route '/auth/login' (will be customizable in the future)
|
|
17
|
+
|
|
18
|
+
## login-out-guard
|
|
19
|
+
|
|
20
|
+
Waits until the auth state is not pending
|
|
21
|
+
|
|
22
|
+
- If the user is not logged-out, the user is redirected to the route '/' (will be customizable in the future)
|
|
23
|
+
|
|
24
|
+
# form-util
|
|
25
|
+
|
|
26
|
+
Contains static helper functions
|
|
27
|
+
|
|
28
|
+
# model-component
|
|
29
|
+
|
|
30
|
+
A collection of abstract classes(components) that can reflect the different action pages(list/add/edit) for a subject(model).
|
|
31
|
+
|
|
32
|
+
# navigation-service
|
|
33
|
+
|
|
34
|
+
Keeps track of visited pages and navigates back to the previous page if 'back' is called. If back is called on the initial page, the fallback route is used.
|
|
35
|
+
For example if the user is on the route '/users/edit' and clicks on the back button, the router will navigate to '/users'.
|
|
36
|
+
These base paths can be defined in the implementation of the base-model-components.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1iYXNlLWxpYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1iYXNlL3NyYy9hbmd1bGFyLWJhc2UtbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './lib';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export class FormUtil {
|
|
2
|
+
static markAllControlsAsTouched(formGroup) {
|
|
3
|
+
Object.values(formGroup.controls).forEach((control) => {
|
|
4
|
+
control.patchValue(control.value);
|
|
5
|
+
control.markAllAsTouched();
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9mb3Jtcy9mb3JtLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFFBQVE7SUFDbkIsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFNBQW9CO1FBQ2xELE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtZQUNyRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY2xhc3MgRm9ybVV0aWwge1xuICBzdGF0aWMgbWFya0FsbENvbnRyb2xzQXNUb3VjaGVkKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGNvbnRyb2wudmFsdWUpO1xuICAgICAgY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { FormUtil } from './form-util';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL2Zvcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGb3JtVXRpbCB9IGZyb20gJy4vZm9ybS11dGlsJztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './model-component';
|
|
2
|
+
export * from './navigation';
|
|
3
|
+
export * from './forms';
|
|
4
|
+
export * from './types';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21vZGVsLWNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL25hdmlnYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9mb3Jtcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL21vZGVsLWNvbXBvbmVudC9hY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE1vZGVsQWN0aW9uVHlwZSB9IGZyb20gJy4vbW9kZWwtYWN0aW9uLnR5cGUnO1xuZXhwb3J0IHsgTW9kZWxBY3Rpb24gfSBmcm9tICcuL21vZGVsLWFjdGlvbic7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9tb2RlbC1jb21wb25lbnQvYWN0aW9uL21vZGVsLWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxBY3Rpb25UeXBlIH0gZnJvbSAnLi9tb2RlbC1hY3Rpb24udHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxBY3Rpb248VD4ge1xuICByZWFkb25seSBhY3Rpb246IE1vZGVsQWN0aW9uVHlwZTtcbiAgcmVhZG9ubHkgbW9kZWw6IFQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtYWN0aW9uLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL21vZGVsLWNvbXBvbmVudC9hY3Rpb24vbW9kZWwtYWN0aW9uLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1vZGVsQWN0aW9uVHlwZSA9ICdzaG93JyB8ICdkZWxldGUnIHwgJ2VkaXQnIHwgJ2Rvd25sb2FkJyB8ICdiYWNrX3RvLWxpc3QnO1xuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { NavigationService } from '../navigation/navigation.service';
|
|
4
|
+
export class BaseModelDetailComponent {
|
|
5
|
+
constructor(baseRoute) {
|
|
6
|
+
this.baseRoute = baseRoute;
|
|
7
|
+
this.model = null;
|
|
8
|
+
this.router = inject(Router);
|
|
9
|
+
this.navigationService = inject(NavigationService);
|
|
10
|
+
}
|
|
11
|
+
handleModelAction(modelAction) {
|
|
12
|
+
switch (modelAction.action) {
|
|
13
|
+
case 'show':
|
|
14
|
+
this.showList();
|
|
15
|
+
break;
|
|
16
|
+
case 'edit':
|
|
17
|
+
this.editModel();
|
|
18
|
+
break;
|
|
19
|
+
case 'delete':
|
|
20
|
+
this.deleteModel();
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
showList() {
|
|
25
|
+
this.router.navigate([this.baseRoute]);
|
|
26
|
+
}
|
|
27
|
+
async editModel() {
|
|
28
|
+
if (!this.model) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);
|
|
32
|
+
}
|
|
33
|
+
async deleteModel() {
|
|
34
|
+
const model = this.model;
|
|
35
|
+
if (!model) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (await this.handleDeleteModel(model)) {
|
|
39
|
+
await this.router.navigate([`${this.baseRoute}`]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
goBack() {
|
|
43
|
+
this.navigationService.back(this.baseRoute);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9tb2RlbC1jb21wb25lbnQvYmFzZS1tb2RlbC1kZXRhaWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSXJFLE1BQU0sT0FBZ0Isd0JBQXdCO0lBTTVDLFlBQWdDLFNBQWlCO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFMakQsVUFBSyxHQUFjLElBQUksQ0FBQztRQUVMLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFYixDQUFDO0lBRXJELGlCQUFpQixDQUFDLFdBQTRCO1FBQzVDLFFBQVEsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUMxQixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTztTQUNSO1FBRUQsSUFBSSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGVsQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb24nO1xuaW1wb3J0IHsgSWRlbnRpZmlhYmxlIH0gZnJvbSAnYW5ndWxhci1iYXNlLWRhbyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWxEZXRhaWxDb21wb25lbnQ8VE0gZXh0ZW5kcyBJZGVudGlmaWFibGU+IHtcbiAgbW9kZWw6IFRNIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF2aWdhdGlvblNlcnZpY2UgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYmFzZVJvdXRlOiBzdHJpbmcpIHt9XG5cbiAgaGFuZGxlTW9kZWxBY3Rpb24obW9kZWxBY3Rpb246IE1vZGVsQWN0aW9uPFRNPik6IHZvaWQge1xuICAgIHN3aXRjaCAobW9kZWxBY3Rpb24uYWN0aW9uKSB7XG4gICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgdGhpcy5zaG93TGlzdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgIHRoaXMuZWRpdE1vZGVsKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLmRlbGV0ZU1vZGVsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNob3dMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmJhc2VSb3V0ZV0pO1xuICB9XG5cbiAgYXN5bmMgZWRpdE1vZGVsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmJhc2VSb3V0ZX0vZWRpdGAsIHRoaXMubW9kZWwuaWRdKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1vZGVsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcblxuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYXdhaXQgdGhpcy5oYW5kbGVEZWxldGVNb2RlbChtb2RlbCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmJhc2VSb3V0ZX1gXSk7XG4gICAgfVxuICB9XG5cbiAgZ29CYWNrKCk6IHZvaWQge1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYmFjayh0aGlzLmJhc2VSb3V0ZSk7XG4gIH1cblxuICBhYnN0cmFjdCBoYW5kbGVEZWxldGVNb2RlbChtb2RlbDogVE0pOiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseModelComponent } from './base-model.component';
|
|
2
|
+
export class BaseModelEditComponent extends BaseModelComponent {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.model = null;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1iYXNlL3NyYy9saWIvbW9kZWwtY29tcG9uZW50L2Jhc2UtbW9kZWwtZWRpdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHNUQsTUFBTSxPQUFnQixzQkFBZ0QsU0FBUSxrQkFBc0I7SUFBcEc7O1FBQ0UsVUFBSyxHQUFjLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlTW9kZWxDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtbW9kZWwuY29tcG9uZW50JztcbmltcG9ydCB7IElkZW50aWZpYWJsZSB9IGZyb20gJ2FuZ3VsYXItYmFzZS1kYW8nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU1vZGVsRWRpdENvbXBvbmVudDxUTSBleHRlbmRzIElkZW50aWZpYWJsZT4gZXh0ZW5kcyBCYXNlTW9kZWxDb21wb25lbnQ8VE0+IHtcbiAgbW9kZWw6IFRNIHwgbnVsbCA9IG51bGw7XG59XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BaseModelComponent } from './base-model.component';
|
|
2
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
3
|
+
export class BaseModelListComponent extends BaseModelComponent {
|
|
4
|
+
constructor(baseRoute) {
|
|
5
|
+
super(baseRoute);
|
|
6
|
+
this.dataSource = new MatTableDataSource([]);
|
|
7
|
+
this.backRoute = '/';
|
|
8
|
+
}
|
|
9
|
+
handleModelAction(modelAction) {
|
|
10
|
+
switch (modelAction.action) {
|
|
11
|
+
case 'show':
|
|
12
|
+
this.showDetail(modelAction.model.id);
|
|
13
|
+
break;
|
|
14
|
+
case 'edit':
|
|
15
|
+
this.editModel(modelAction.model.id);
|
|
16
|
+
break;
|
|
17
|
+
case 'delete':
|
|
18
|
+
this.deleteModel(modelAction.model);
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
showDetail(id) {
|
|
23
|
+
this.router.navigate([this.baseRoute, id]);
|
|
24
|
+
}
|
|
25
|
+
editModel(id) {
|
|
26
|
+
this.router.navigate([`${this.baseRoute}/edit`, id]);
|
|
27
|
+
}
|
|
28
|
+
createModel() {
|
|
29
|
+
this.router.navigate([`${this.baseRoute}/add`]);
|
|
30
|
+
}
|
|
31
|
+
async deleteModel(model) {
|
|
32
|
+
const [deleted, newList] = await this.handleModelDelete(model);
|
|
33
|
+
if (deleted && newList) {
|
|
34
|
+
this.dataSource.data = newList;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1iYXNlL3NyYy9saWIvbW9kZWwtY29tcG9uZW50L2Jhc2UtbW9kZWwtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJN0QsTUFBTSxPQUFnQixzQkFBZ0QsU0FBUSxrQkFBc0I7SUFHbEcsWUFBc0IsU0FBaUI7UUFDckMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSFYsZUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUssRUFBRSxDQUFDLENBQUM7UUFLbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUVRLGlCQUFpQixDQUFDLFdBQTRCO1FBQ3JELFFBQVEsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUMxQixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUVSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFTO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBUztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFTO1FBQ3pCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztTQUNoQztJQUNILENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNb2RlbENvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1tb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTW9kZWxBY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBEYW9JZCwgSWRlbnRpZmlhYmxlIH0gZnJvbSAnYW5ndWxhci1iYXNlLWRhbyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWxMaXN0Q29tcG9uZW50PFRNIGV4dGVuZHMgSWRlbnRpZmlhYmxlPiBleHRlbmRzIEJhc2VNb2RlbENvbXBvbmVudDxUTT4ge1xuICByZWFkb25seSBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUTT4oW10pO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiYXNlUm91dGU6IHN0cmluZykge1xuICAgIHN1cGVyKGJhc2VSb3V0ZSk7XG5cbiAgICB0aGlzLmJhY2tSb3V0ZSA9ICcvJztcbiAgfVxuXG4gIG92ZXJyaWRlIGhhbmRsZU1vZGVsQWN0aW9uKG1vZGVsQWN0aW9uOiBNb2RlbEFjdGlvbjxUTT4pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKG1vZGVsQWN0aW9uLmFjdGlvbikge1xuICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbChtb2RlbEFjdGlvbi5tb2RlbC5pZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlZGl0JzpcbiAgICAgICAgdGhpcy5lZGl0TW9kZWwobW9kZWxBY3Rpb24ubW9kZWwuaWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgdGhpcy5kZWxldGVNb2RlbChtb2RlbEFjdGlvbi5tb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNob3dEZXRhaWwoaWQ6IERhb0lkKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuYmFzZVJvdXRlLCBpZF0pO1xuICB9XG5cbiAgZWRpdE1vZGVsKGlkOiBEYW9JZCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmJhc2VSb3V0ZX0vZWRpdGAsIGlkXSk7XG4gIH1cblxuICBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5iYXNlUm91dGV9L2FkZGBdKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1vZGVsKG1vZGVsOiBUTSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IFtkZWxldGVkLCBuZXdMaXN0XSA9IGF3YWl0IHRoaXMuaGFuZGxlTW9kZWxEZWxldGUobW9kZWwpO1xuICAgIGlmIChkZWxldGVkICYmIG5ld0xpc3QpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gbmV3TGlzdDtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBoYW5kbGVNb2RlbERlbGV0ZShtb2RlbDogVE0pOiBQcm9taXNlPFtib29sZWFuLCBUTVtdXT47XG59XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Router } from '@angular/router';
|
|
2
|
+
import { BaseComponent } from './base.component';
|
|
3
|
+
import { inject } from '@angular/core';
|
|
4
|
+
export class BaseModelComponent extends BaseComponent {
|
|
5
|
+
constructor(baseRoute) {
|
|
6
|
+
super();
|
|
7
|
+
this.baseRoute = baseRoute;
|
|
8
|
+
this.router = inject(Router);
|
|
9
|
+
this.backRoute = this.baseRoute;
|
|
10
|
+
}
|
|
11
|
+
showList() {
|
|
12
|
+
this.router.navigate([this.baseRoute]);
|
|
13
|
+
}
|
|
14
|
+
handleModelAction(modelAction) {
|
|
15
|
+
switch (modelAction.action) {
|
|
16
|
+
case 'back_to-list':
|
|
17
|
+
this.showList();
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL21vZGVsLWNvbXBvbmVudC9iYXNlLW1vZGVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkMsTUFBTSxPQUFnQixrQkFBdUIsU0FBUSxhQUFhO0lBR2hFLFlBQWdDLFNBQWlCO1FBQy9DLEtBQUssRUFBRSxDQUFDO1FBRHNCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFGOUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUl6QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxXQUE0QjtRQUM1QyxRQUFRLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsS0FBSyxjQUFjO2dCQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU07U0FDVDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVsQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU1vZGVsQ29tcG9uZW50PFRNPiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBiYXNlUm91dGU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5iYWNrUm91dGUgPSB0aGlzLmJhc2VSb3V0ZTtcbiAgfVxuXG4gIHNob3dMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmJhc2VSb3V0ZV0pO1xuICB9XG5cbiAgaGFuZGxlTW9kZWxBY3Rpb24obW9kZWxBY3Rpb246IE1vZGVsQWN0aW9uPFRNPik6IHZvaWQge1xuICAgIHN3aXRjaCAobW9kZWxBY3Rpb24uYWN0aW9uKSB7XG4gICAgICBjYXNlICdiYWNrX3RvLWxpc3QnOlxuICAgICAgICB0aGlzLnNob3dMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Component used for all pages that can directly navigate back to the home page if no other route was found
|
|
3
|
+
*/
|
|
4
|
+
import { inject } from '@angular/core';
|
|
5
|
+
import { NavigationService } from '../navigation/navigation.service';
|
|
6
|
+
export class BaseComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.backRoute = '/';
|
|
9
|
+
this.navigationService = inject(NavigationService);
|
|
10
|
+
}
|
|
11
|
+
goBack() {
|
|
12
|
+
this.navigationService.back(this.backRoute);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL21vZGVsLWNvbXBvbmVudC9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFckUsTUFBTSxPQUFnQixhQUFhO0lBQW5DO1FBQ0UsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUVHLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBS25FLENBQUM7SUFIQyxNQUFNO1FBQ0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21wb25lbnQgdXNlZCBmb3IgYWxsIHBhZ2VzIHRoYXQgY2FuIGRpcmVjdGx5IG5hdmlnYXRlIGJhY2sgdG8gdGhlIGhvbWUgcGFnZSBpZiBubyBvdGhlciByb3V0ZSB3YXMgZm91bmRcbiAqL1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21wb25lbnQge1xuICBiYWNrUm91dGUgPSAnLyc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcblxuICBnb0JhY2soKTogdm9pZCB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKHRoaXMuYmFja1JvdXRlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { BaseModelDetailComponent } from './base-model-detail.component';
|
|
2
|
+
export { BaseModelEditComponent } from './base-model-edit.component';
|
|
3
|
+
export { BaseModelComponent } from './base-model.component';
|
|
4
|
+
export { BaseModelListComponent } from './base-model-list.component';
|
|
5
|
+
export { BaseComponent } from './base.component';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL21vZGVsLWNvbXBvbmVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCYXNlTW9kZWxEZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtbW9kZWwtZGV0YWlsLmNvbXBvbmVudCc7XG5leHBvcnQgeyBCYXNlTW9kZWxFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLW1vZGVsLWVkaXQuY29tcG9uZW50JztcbmV4cG9ydCB7IEJhc2VNb2RlbENvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1tb2RlbC5jb21wb25lbnQnO1xuZXhwb3J0IHsgQmFzZU1vZGVsTGlzdENvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1tb2RlbC1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Directive, HostListener, inject } from '@angular/core';
|
|
2
|
+
import { NavigationService } from './navigation.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class BackButtonDirective {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.navigation = inject(NavigationService);
|
|
7
|
+
}
|
|
8
|
+
onClick() {
|
|
9
|
+
this.navigation.back();
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
12
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: BackButtonDirective, isStandalone: true, selector: "[backButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BackButtonDirective, decorators: [{
|
|
15
|
+
type: Directive,
|
|
16
|
+
args: [{
|
|
17
|
+
selector: '[backButton]',
|
|
18
|
+
standalone: true
|
|
19
|
+
}]
|
|
20
|
+
}], propDecorators: { onClick: [{
|
|
21
|
+
type: HostListener,
|
|
22
|
+
args: ['click']
|
|
23
|
+
}] } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFjay1idXR0b24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9uYXZpZ2F0aW9uL2JhY2stYnV0dG9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBTXpELE1BQU0sT0FBTyxtQkFBbUI7SUFKaEM7UUFLbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBTXpEO0lBSEMsT0FBTztRQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0FOVSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFKL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUtDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tiYWNrQnV0dG9uXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQmFja0J1dHRvbkRpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGlvbiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMubmF2aWdhdGlvbi5iYWNrKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { NavigationService } from './navigation.service';
|
|
2
|
+
export { BackButtonDirective } from './back-button.directive';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL25hdmlnYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCB7IEJhY2tCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL2JhY2stYnV0dG9uLmRpcmVjdGl2ZSc7XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NavigationEnd, Router } from '@angular/router';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { Location } from '@angular/common';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class NavigationService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.history = [];
|
|
8
|
+
this.router = inject(Router);
|
|
9
|
+
this.location = inject(Location);
|
|
10
|
+
this.router.events.subscribe((event) => {
|
|
11
|
+
if (event instanceof NavigationEnd) {
|
|
12
|
+
this.history.push(event.urlAfterRedirects);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
reset() {
|
|
17
|
+
this.history = [];
|
|
18
|
+
}
|
|
19
|
+
back(fallbackRoute = '/') {
|
|
20
|
+
this.history.pop();
|
|
21
|
+
if (this.history.length > 0) {
|
|
22
|
+
this.location.back();
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.router.navigate([fallbackRoute]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
29
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: NavigationService, decorators: [{
|
|
32
|
+
type: Injectable,
|
|
33
|
+
args: [{ providedIn: 'root' }]
|
|
34
|
+
}], ctorParameters: () => [] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QjtRQUpRLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDZCxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFHM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUM1QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQzs4R0F4QlUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgaGlzdG9yeTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5oaXN0b3J5ID0gW107XG4gIH1cblxuICBiYWNrKGZhbGxiYWNrUm91dGUgPSAnLycpOiB2b2lkIHtcbiAgICB0aGlzLmhpc3RvcnkucG9wKCk7XG4gICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2ZhbGxiYWNrUm91dGVdKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBWYWx1ZUNoYW5nZUNhbGxiYWNrIH0gZnJvbSAnLi92YWx1ZS1jaGFuZ2UtY2FsbGJhY2sudHlwZSc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtY2hhbmdlLWNhbGxiYWNrLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYmFzZS9zcmMvbGliL3R5cGVzL3ZhbHVlLWNoYW5nZS1jYWxsYmFjay50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBWYWx1ZUNoYW5nZUNhbGxiYWNrPFQ+ID0gKHZhbHVlOiBUKSA9PiB2b2lkO1xuIl19
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, Injectable, Directive, HostListener } from '@angular/core';
|
|
3
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
4
|
+
import { Location } from '@angular/common';
|
|
5
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
6
|
+
|
|
7
|
+
class NavigationService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.history = [];
|
|
10
|
+
this.router = inject(Router);
|
|
11
|
+
this.location = inject(Location);
|
|
12
|
+
this.router.events.subscribe((event) => {
|
|
13
|
+
if (event instanceof NavigationEnd) {
|
|
14
|
+
this.history.push(event.urlAfterRedirects);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
reset() {
|
|
19
|
+
this.history = [];
|
|
20
|
+
}
|
|
21
|
+
back(fallbackRoute = '/') {
|
|
22
|
+
this.history.pop();
|
|
23
|
+
if (this.history.length > 0) {
|
|
24
|
+
this.location.back();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.router.navigate([fallbackRoute]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
|
|
32
|
+
}
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: NavigationService, decorators: [{
|
|
34
|
+
type: Injectable,
|
|
35
|
+
args: [{ providedIn: 'root' }]
|
|
36
|
+
}], ctorParameters: () => [] });
|
|
37
|
+
|
|
38
|
+
class BaseModelDetailComponent {
|
|
39
|
+
constructor(baseRoute) {
|
|
40
|
+
this.baseRoute = baseRoute;
|
|
41
|
+
this.model = null;
|
|
42
|
+
this.router = inject(Router);
|
|
43
|
+
this.navigationService = inject(NavigationService);
|
|
44
|
+
}
|
|
45
|
+
handleModelAction(modelAction) {
|
|
46
|
+
switch (modelAction.action) {
|
|
47
|
+
case 'show':
|
|
48
|
+
this.showList();
|
|
49
|
+
break;
|
|
50
|
+
case 'edit':
|
|
51
|
+
this.editModel();
|
|
52
|
+
break;
|
|
53
|
+
case 'delete':
|
|
54
|
+
this.deleteModel();
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
showList() {
|
|
59
|
+
this.router.navigate([this.baseRoute]);
|
|
60
|
+
}
|
|
61
|
+
async editModel() {
|
|
62
|
+
if (!this.model) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);
|
|
66
|
+
}
|
|
67
|
+
async deleteModel() {
|
|
68
|
+
const model = this.model;
|
|
69
|
+
if (!model) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (await this.handleDeleteModel(model)) {
|
|
73
|
+
await this.router.navigate([`${this.baseRoute}`]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
goBack() {
|
|
77
|
+
this.navigationService.back(this.baseRoute);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Component used for all pages that can directly navigate back to the home page if no other route was found
|
|
83
|
+
*/
|
|
84
|
+
class BaseComponent {
|
|
85
|
+
constructor() {
|
|
86
|
+
this.backRoute = '/';
|
|
87
|
+
this.navigationService = inject(NavigationService);
|
|
88
|
+
}
|
|
89
|
+
goBack() {
|
|
90
|
+
this.navigationService.back(this.backRoute);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
class BaseModelComponent extends BaseComponent {
|
|
95
|
+
constructor(baseRoute) {
|
|
96
|
+
super();
|
|
97
|
+
this.baseRoute = baseRoute;
|
|
98
|
+
this.router = inject(Router);
|
|
99
|
+
this.backRoute = this.baseRoute;
|
|
100
|
+
}
|
|
101
|
+
showList() {
|
|
102
|
+
this.router.navigate([this.baseRoute]);
|
|
103
|
+
}
|
|
104
|
+
handleModelAction(modelAction) {
|
|
105
|
+
switch (modelAction.action) {
|
|
106
|
+
case 'back_to-list':
|
|
107
|
+
this.showList();
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
class BaseModelEditComponent extends BaseModelComponent {
|
|
114
|
+
constructor() {
|
|
115
|
+
super(...arguments);
|
|
116
|
+
this.model = null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
class BaseModelListComponent extends BaseModelComponent {
|
|
121
|
+
constructor(baseRoute) {
|
|
122
|
+
super(baseRoute);
|
|
123
|
+
this.dataSource = new MatTableDataSource([]);
|
|
124
|
+
this.backRoute = '/';
|
|
125
|
+
}
|
|
126
|
+
handleModelAction(modelAction) {
|
|
127
|
+
switch (modelAction.action) {
|
|
128
|
+
case 'show':
|
|
129
|
+
this.showDetail(modelAction.model.id);
|
|
130
|
+
break;
|
|
131
|
+
case 'edit':
|
|
132
|
+
this.editModel(modelAction.model.id);
|
|
133
|
+
break;
|
|
134
|
+
case 'delete':
|
|
135
|
+
this.deleteModel(modelAction.model);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
showDetail(id) {
|
|
140
|
+
this.router.navigate([this.baseRoute, id]);
|
|
141
|
+
}
|
|
142
|
+
editModel(id) {
|
|
143
|
+
this.router.navigate([`${this.baseRoute}/edit`, id]);
|
|
144
|
+
}
|
|
145
|
+
createModel() {
|
|
146
|
+
this.router.navigate([`${this.baseRoute}/add`]);
|
|
147
|
+
}
|
|
148
|
+
async deleteModel(model) {
|
|
149
|
+
const [deleted, newList] = await this.handleModelDelete(model);
|
|
150
|
+
if (deleted && newList) {
|
|
151
|
+
this.dataSource.data = newList;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
class BackButtonDirective {
|
|
157
|
+
constructor() {
|
|
158
|
+
this.navigation = inject(NavigationService);
|
|
159
|
+
}
|
|
160
|
+
onClick() {
|
|
161
|
+
this.navigation.back();
|
|
162
|
+
}
|
|
163
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
164
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: BackButtonDirective, isStandalone: true, selector: "[backButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
|
|
165
|
+
}
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: BackButtonDirective, decorators: [{
|
|
167
|
+
type: Directive,
|
|
168
|
+
args: [{
|
|
169
|
+
selector: '[backButton]',
|
|
170
|
+
standalone: true
|
|
171
|
+
}]
|
|
172
|
+
}], propDecorators: { onClick: [{
|
|
173
|
+
type: HostListener,
|
|
174
|
+
args: ['click']
|
|
175
|
+
}] } });
|
|
176
|
+
|
|
177
|
+
class FormUtil {
|
|
178
|
+
static markAllControlsAsTouched(formGroup) {
|
|
179
|
+
Object.values(formGroup.controls).forEach((control) => {
|
|
180
|
+
control.patchValue(control.value);
|
|
181
|
+
control.markAllAsTouched();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Generated bundle index. Do not edit.
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
export { BackButtonDirective, BaseComponent, BaseModelComponent, BaseModelDetailComponent, BaseModelEditComponent, BaseModelListComponent, FormUtil, NavigationService };
|
|
191
|
+
//# sourceMappingURL=angular-base-lib.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular-base-lib.mjs","sources":["../../../../libs/angular-base/src/lib/navigation/navigation.service.ts","../../../../libs/angular-base/src/lib/model-component/base-model-detail.component.ts","../../../../libs/angular-base/src/lib/model-component/base.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-edit.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-list.component.ts","../../../../libs/angular-base/src/lib/navigation/back-button.directive.ts","../../../../libs/angular-base/src/lib/forms/form-util.ts","../../../../libs/angular-base/src/angular-base-lib.ts"],"sourcesContent":["import { NavigationEnd, Router } from '@angular/router';\nimport { inject, Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private history: string[] = [];\n private readonly router = inject(Router);\n private readonly location = inject(Location);\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n reset(): void {\n this.history = [];\n }\n\n back(fallbackRoute = '/'): void {\n this.history.pop();\n if (this.history.length > 0) {\n this.location.back();\n } else {\n this.router.navigate([fallbackRoute]);\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NavigationService } from '../navigation/navigation.service';\nimport { ModelAction } from './action';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelDetailComponent<TM extends Identifiable> {\n model: TM | null = null;\n\n protected readonly router = inject(Router);\n protected readonly navigationService = inject(NavigationService);\n\n protected constructor(protected baseRoute: string) {}\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showList();\n break;\n\n case 'edit':\n this.editModel();\n break;\n\n case 'delete':\n this.deleteModel();\n break;\n }\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n async editModel(): Promise<void> {\n if (!this.model) {\n return;\n }\n\n await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);\n }\n\n async deleteModel(): Promise<void> {\n const model = this.model;\n\n if (!model) {\n return;\n }\n\n if (await this.handleDeleteModel(model)) {\n await this.router.navigate([`${this.baseRoute}`]);\n }\n }\n\n goBack(): void {\n this.navigationService.back(this.baseRoute);\n }\n\n abstract handleDeleteModel(model: TM): Promise<boolean>;\n}\n","/**\n * Component used for all pages that can directly navigate back to the home page if no other route was found\n */\nimport { inject } from '@angular/core';\nimport { NavigationService } from '../navigation/navigation.service';\n\nexport abstract class BaseComponent {\n backRoute = '/';\n\n protected readonly navigationService = inject(NavigationService);\n\n goBack(): void {\n this.navigationService.back(this.backRoute);\n }\n}\n","import { Router } from '@angular/router';\nimport { BaseComponent } from './base.component';\nimport { inject } from '@angular/core';\nimport { ModelAction } from './action';\n\nexport abstract class BaseModelComponent<TM> extends BaseComponent {\n protected readonly router = inject(Router);\n\n protected constructor(protected baseRoute: string) {\n super();\n this.backRoute = this.baseRoute;\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'back_to-list':\n this.showList();\n break;\n }\n }\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelEditComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n model: TM | null = null;\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ModelAction } from './action';\nimport { DaoId, Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelListComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n readonly dataSource = new MatTableDataSource<TM>([]);\n\n protected constructor(baseRoute: string) {\n super(baseRoute);\n\n this.backRoute = '/';\n }\n\n override handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showDetail(modelAction.model.id);\n break;\n\n case 'edit':\n this.editModel(modelAction.model.id);\n break;\n\n case 'delete':\n this.deleteModel(modelAction.model);\n break;\n }\n }\n\n showDetail(id: DaoId): void {\n this.router.navigate([this.baseRoute, id]);\n }\n\n editModel(id: DaoId): void {\n this.router.navigate([`${this.baseRoute}/edit`, id]);\n }\n\n createModel(): void {\n this.router.navigate([`${this.baseRoute}/add`]);\n }\n\n async deleteModel(model: TM): Promise<void> {\n const [deleted, newList] = await this.handleModelDelete(model);\n if (deleted && newList) {\n this.dataSource.data = newList;\n }\n }\n\n abstract handleModelDelete(model: TM): Promise<[boolean, TM[]]>;\n}\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { NavigationService } from './navigation.service';\n\n@Directive({\n selector: '[backButton]',\n standalone: true\n})\nexport class BackButtonDirective {\n private readonly navigation = inject(NavigationService);\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","import { AbstractControl, FormGroup } from '@angular/forms';\n\nexport class FormUtil {\n static markAllControlsAsTouched(formGroup: FormGroup): void {\n Object.values(formGroup.controls).forEach((control: AbstractControl) => {\n control.patchValue(control.value);\n control.markAllAsTouched();\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FormUtil } from './form-util';
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ModelActionType = 'show' | 'delete' | 'edit' | 'download' | 'back_to-list';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Router } from '@angular/router';
|
|
2
|
+
import { NavigationService } from '../navigation/navigation.service';
|
|
3
|
+
import { ModelAction } from './action';
|
|
4
|
+
import { Identifiable } from 'angular-base-dao';
|
|
5
|
+
export declare abstract class BaseModelDetailComponent<TM extends Identifiable> {
|
|
6
|
+
protected baseRoute: string;
|
|
7
|
+
model: TM | null;
|
|
8
|
+
protected readonly router: Router;
|
|
9
|
+
protected readonly navigationService: NavigationService;
|
|
10
|
+
protected constructor(baseRoute: string);
|
|
11
|
+
handleModelAction(modelAction: ModelAction<TM>): void;
|
|
12
|
+
showList(): void;
|
|
13
|
+
editModel(): Promise<void>;
|
|
14
|
+
deleteModel(): Promise<void>;
|
|
15
|
+
goBack(): void;
|
|
16
|
+
abstract handleDeleteModel(model: TM): Promise<boolean>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseModelComponent } from './base-model.component';
|
|
2
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
3
|
+
import { ModelAction } from './action';
|
|
4
|
+
import { DaoId, Identifiable } from 'angular-base-dao';
|
|
5
|
+
export declare abstract class BaseModelListComponent<TM extends Identifiable> extends BaseModelComponent<TM> {
|
|
6
|
+
readonly dataSource: MatTableDataSource<TM, import("@angular/material/paginator").MatPaginator>;
|
|
7
|
+
protected constructor(baseRoute: string);
|
|
8
|
+
handleModelAction(modelAction: ModelAction<TM>): void;
|
|
9
|
+
showDetail(id: DaoId): void;
|
|
10
|
+
editModel(id: DaoId): void;
|
|
11
|
+
createModel(): void;
|
|
12
|
+
deleteModel(model: TM): Promise<void>;
|
|
13
|
+
abstract handleModelDelete(model: TM): Promise<[boolean, TM[]]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Router } from '@angular/router';
|
|
2
|
+
import { BaseComponent } from './base.component';
|
|
3
|
+
import { ModelAction } from './action';
|
|
4
|
+
export declare abstract class BaseModelComponent<TM> extends BaseComponent {
|
|
5
|
+
protected baseRoute: string;
|
|
6
|
+
protected readonly router: Router;
|
|
7
|
+
protected constructor(baseRoute: string);
|
|
8
|
+
showList(): void;
|
|
9
|
+
handleModelAction(modelAction: ModelAction<TM>): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BaseModelDetailComponent } from './base-model-detail.component';
|
|
2
|
+
export { BaseModelEditComponent } from './base-model-edit.component';
|
|
3
|
+
export { BaseModelComponent } from './base-model.component';
|
|
4
|
+
export { BaseModelListComponent } from './base-model-list.component';
|
|
5
|
+
export { BaseComponent } from './base.component';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class BackButtonDirective {
|
|
3
|
+
private readonly navigation;
|
|
4
|
+
onClick(): void;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BackButtonDirective, never>;
|
|
6
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BackButtonDirective, "[backButton]", never, {}, {}, never, never, true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class NavigationService {
|
|
3
|
+
private history;
|
|
4
|
+
private readonly router;
|
|
5
|
+
private readonly location;
|
|
6
|
+
constructor();
|
|
7
|
+
reset(): void;
|
|
8
|
+
back(fallbackRoute?: string): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NavigationService, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<NavigationService>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ValueChangeCallback } from './value-change-callback.type';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ValueChangeCallback<T> = (value: T) => void;
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "angular-base-lib",
|
|
3
|
+
"version": "17.0.1",
|
|
4
|
+
"description": "Angular model-components, navigation-service and other abstract helpers",
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/common": "^17.0.0",
|
|
7
|
+
"@angular/core": "^17.0.0",
|
|
8
|
+
"@angular/router": "^17.0.0",
|
|
9
|
+
"@angular/forms": "^17.0.0",
|
|
10
|
+
"@angular/material": "^17.0.0",
|
|
11
|
+
"rxjs": "~7.8.0"
|
|
12
|
+
},
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"module": "fesm2022/angular-base-lib.mjs",
|
|
15
|
+
"typings": "index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
"./package.json": {
|
|
18
|
+
"default": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./index.d.ts",
|
|
22
|
+
"esm2022": "./esm2022/angular-base-lib.mjs",
|
|
23
|
+
"esm": "./esm2022/angular-base-lib.mjs",
|
|
24
|
+
"default": "./fesm2022/angular-base-lib.mjs"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"tslib": "^2.3.0"
|
|
29
|
+
}
|
|
30
|
+
}
|