Skip to content

Commit 09c02b0

Browse files
committed
add config and event service and add event listener to config and dispatch events
1 parent 3d4165c commit 09c02b0

26 files changed

+416
-158
lines changed

projects/fusio-sdk/src/lib/abstract/list.ts

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import {Message} from "fusio-sdk/dist/src/generated/backend/Message";
88
import {CollectionQuery} from "fusio-sdk/dist/src/generated/backend/CollectionQuery";
99
import {FusioService} from "../service/fusio.service";
1010
import {ClientAbstract} from "sdkgen-client";
11-
import {ErrorConverter} from "../util/error-converter";
11+
import {ErrorService} from "../service/error.service";
12+
import {EventService} from "../service/event.service";
13+
import {Result} from "./modal";
1214

1315
@Component({
1416
template: '',
@@ -24,7 +26,7 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
2426
public response?: Message;
2527
public loading: boolean = true;
2628

27-
constructor(protected fusio: FusioService<C>, protected route: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {
29+
constructor(protected fusio: FusioService<C>, protected route: ActivatedRoute, protected router: Router, protected modalService: NgbModal, protected event: EventService, protected error: ErrorService) {
2830
}
2931

3032
async ngOnInit(): Promise<void> {
@@ -64,7 +66,7 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
6466

6567
this.onList();
6668
} catch (error) {
67-
this.response = ErrorConverter.convert(error);
69+
this.response = this.error.convert(error);
6870
}
6971

7072
// in case we are not at a specific route redirect to the first
@@ -94,7 +96,7 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
9496

9597
this.onGet();
9698
} catch (error) {
97-
this.response = ErrorConverter.convert(error);
99+
this.response = this.error.convert(error);
98100
}
99101

100102
this.finishLoading();
@@ -127,9 +129,11 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
127129
size: 'lg'
128130
});
129131
modalRef.componentInstance.mode = Mode.Create;
130-
modalRef.closed.subscribe(async (response) => {
131-
this.response = response;
132-
if (response.success) {
132+
modalRef.closed.subscribe(async (result: Result<T>) => {
133+
this.response = result.response;
134+
if (result.response.success) {
135+
this.event.dispatchModelCreated(result.entity, this.getRoute());
136+
133137
await this.doList();
134138
}
135139
})
@@ -141,9 +145,11 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
141145
});
142146
modalRef.componentInstance.mode = Mode.Update;
143147
modalRef.componentInstance.entity = entity;
144-
modalRef.closed.subscribe(async (response) => {
145-
this.response = response;
146-
if (response.success) {
148+
modalRef.closed.subscribe(async (result: Result<T>) => {
149+
this.response = result.response;
150+
if (result.response.success) {
151+
this.event.dispatchModelUpdated(result.entity, this.getRoute());
152+
147153
await this.doList();
148154
}
149155
})
@@ -156,9 +162,11 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
156162
});
157163
modalRef.componentInstance.mode = Mode.Delete;
158164
modalRef.componentInstance.entity = entity;
159-
modalRef.closed.subscribe(async (response) => {
160-
this.response = response;
161-
if (response.success) {
165+
modalRef.closed.subscribe(async (result: Result<T>) => {
166+
this.response = result.response;
167+
if (result.response.success) {
168+
this.event.dispatchModelDeleted(result.entity, this.getRoute());
169+
162170
await this.doList();
163171
}
164172
})
@@ -193,11 +201,15 @@ export abstract class List<C extends ClientAbstract, T extends ModelId> implemen
193201
protected abstract get(id: string): Promise<AxiosResponse<T>>;
194202
protected abstract getDetailComponent(): any;
195203
protected abstract getRoute(): string;
204+
196205
protected onList(): void
197206
{
207+
this.event.dispatchModelList(this.getRoute());
198208
}
209+
199210
protected onGet(): void
200211
{
212+
this.event.dispatchModelDetail(this.selected, this.getRoute());
201213
}
202214

203215
}

projects/fusio-sdk/src/lib/abstract/modal.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {NgbActiveModal, NgbModal} from "@ng-bootstrap/ng-bootstrap";
55
import {AxiosResponse} from "axios";
66
import {FusioService} from "../service/fusio.service";
77
import {ClientAbstract} from "sdkgen-client";
8-
import {ErrorConverter} from "../util/error-converter";
8+
import {ErrorService} from "../service/error.service";
99

1010
@Component({
1111
template: '',
@@ -17,7 +17,7 @@ export abstract class Modal<C extends ClientAbstract, T extends ModelId> impleme
1717
@Input() mode: Mode = Mode.Create;
1818
@Input() entity: T = this.newEntity();
1919

20-
constructor(protected fusio: FusioService<C>, protected modalService: NgbModal, public modal: NgbActiveModal) { }
20+
constructor(protected fusio: FusioService<C>, protected error: ErrorService, protected modalService: NgbModal, public modal: NgbActiveModal) { }
2121

2222
ngOnInit(): void {
2323
}
@@ -40,10 +40,13 @@ export abstract class Modal<C extends ClientAbstract, T extends ModelId> impleme
4040
}
4141

4242
if (response) {
43-
this.modal.close(response.data);
43+
this.modal.close({
44+
entity: data,
45+
response: response.data,
46+
});
4447
}
4548
} catch (error) {
46-
this.response = ErrorConverter.convert(error);
49+
this.response = this.error.convert(error);
4750
}
4851
}
4952

@@ -53,3 +56,8 @@ export abstract class Modal<C extends ClientAbstract, T extends ModelId> impleme
5356
protected abstract newEntity(): T;
5457

5558
}
59+
60+
export interface Result<T> {
61+
entity: T,
62+
response: Message,
63+
}

projects/fusio-sdk/src/lib/component/account/account.component.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Component, OnInit } from '@angular/core';
1+
import {Component, OnInit} from '@angular/core';
22
import {ConsumerService} from "../../service/consumer.service";
33
import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
44
import {UserAccount} from "fusio-sdk/dist/src/generated/consumer/UserAccount";
5-
import {ErrorConverter} from "../../util/error-converter";
5+
import {ErrorService} from "../../service/error.service";
66

77
@Component({
88
selector: 'fusio-account',
@@ -15,7 +15,7 @@ export class AccountComponent implements OnInit {
1515
response?: Message;
1616
email: string = '';
1717

18-
constructor(private consumer: ConsumerService) { }
18+
constructor(private consumer: ConsumerService, private error: ErrorService) { }
1919

2020
async ngOnInit(): Promise<void> {
2121
try {
@@ -26,7 +26,7 @@ export class AccountComponent implements OnInit {
2626
this.email = this.user.email || '';
2727
this.response = undefined;
2828
} catch (error) {
29-
this.response = ErrorConverter.convert(error);
29+
this.response = this.error.convert(error);
3030
}
3131
}
3232

@@ -41,7 +41,7 @@ export class AccountComponent implements OnInit {
4141

4242
this.response = response.data;
4343
} catch (error) {
44-
this.response = ErrorConverter.convert(error);
44+
this.response = this.error.convert(error);
4545
}
4646
}
4747

projects/fusio-sdk/src/lib/component/app/list/list.component.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {ModalComponent} from "../modal/modal.component";
99
import {ActivatedRoute, Router} from "@angular/router";
1010
import {NgbModal} from "@ng-bootstrap/ng-bootstrap";
1111
import {ConsumerService} from "../../../service/consumer.service";
12+
import {EventService} from "../../../service/event.service";
13+
import {ErrorService} from "../../../service/error.service";
1214

1315
@Component({
1416
selector: 'fusio-app-list',
@@ -17,8 +19,8 @@ import {ConsumerService} from "../../../service/consumer.service";
1719
})
1820
export class ListComponent extends List<Client, App> {
1921

20-
constructor(protected fusio: ConsumerService, protected route: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {
21-
super(fusio, route, router, modalService);
22+
constructor(fusio: ConsumerService, route: ActivatedRoute, router: Router, modalService: NgbModal, event: EventService, error: ErrorService) {
23+
super(fusio, route, router, modalService, event, error);
2224
}
2325

2426
protected async getAll(query: CollectionQuery): Promise<AxiosResponse<Collection<App>>> {

projects/fusio-sdk/src/lib/component/app/modal/modal.component.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {Scope} from "fusio-sdk/dist/src/generated/consumer/Scope";
1010
import {FusioService} from "../../../service/fusio.service";
1111
import {NgbActiveModal, NgbModal} from "@ng-bootstrap/ng-bootstrap";
1212
import {ConsumerService} from "../../../service/consumer.service";
13+
import {ErrorService} from "../../../service/error.service";
1314

1415
@Component({
1516
selector: 'fusio-app-modal',
@@ -20,8 +21,8 @@ export class ModalComponent extends Modal<Client, App> {
2021

2122
scopes?: Array<Scope>;
2223

23-
constructor(protected fusio: ConsumerService, protected modalService: NgbModal, public modal: NgbActiveModal) {
24-
super(fusio, modalService, modal);
24+
constructor(fusio: ConsumerService, error: ErrorService, modalService: NgbModal, modal: NgbActiveModal) {
25+
super(fusio, error, modalService, modal);
2526
}
2627

2728
override async ngOnInit(): Promise<void> {

projects/fusio-sdk/src/lib/component/event/list/list.component.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {ModalComponent} from "../modal/modal.component";
99
import {ConsumerService} from "../../../service/consumer.service";
1010
import {ActivatedRoute, Router} from "@angular/router";
1111
import {NgbModal} from "@ng-bootstrap/ng-bootstrap";
12+
import {EventService} from "../../../service/event.service";
13+
import {ErrorService} from "../../../service/error.service";
1214

1315
@Component({
1416
selector: 'fusio-event-list',
@@ -17,8 +19,8 @@ import {NgbModal} from "@ng-bootstrap/ng-bootstrap";
1719
})
1820
export class ListComponent extends List<Client, EventSubscription> {
1921

20-
constructor(protected fusio: ConsumerService, protected route: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {
21-
super(fusio, route, router, modalService);
22+
constructor(fusio: ConsumerService, route: ActivatedRoute, router: Router, modalService: NgbModal, event: EventService, error: ErrorService) {
23+
super(fusio, route, router, modalService, event, error);
2224
}
2325

2426
protected async getAll(query: CollectionQuery): Promise<AxiosResponse<Collection<EventSubscription>>> {

projects/fusio-sdk/src/lib/component/event/modal/modal.component.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {EventSubscriptionCreate} from "fusio-sdk/dist/src/generated/consumer/Eve
99
import {EventSubscriptionUpdate} from "fusio-sdk/dist/src/generated/consumer/EventSubscriptionUpdate";
1010
import {ConsumerService} from "../../../service/consumer.service";
1111
import {NgbActiveModal, NgbModal} from "@ng-bootstrap/ng-bootstrap";
12+
import {ErrorService} from "../../../service/error.service";
1213

1314
@Component({
1415
selector: 'fusio-event-modal',
@@ -19,8 +20,8 @@ export class ModalComponent extends Modal<Client, EventSubscription> {
1920

2021
events?: Array<Event>;
2122

22-
constructor(protected fusio: ConsumerService, protected modalService: NgbModal, public modal: NgbActiveModal) {
23-
super(fusio, modalService, modal);
23+
constructor(fusio: ConsumerService, error: ErrorService, modalService: NgbModal, modal: NgbActiveModal) {
24+
super(fusio, error, modalService, modal);
2425
}
2526

2627
override async ngOnInit(): Promise<void> {

projects/fusio-sdk/src/lib/component/help/help.component.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {Component, OnInit} from '@angular/core';
22
import {NgbActiveModal} from "@ng-bootstrap/ng-bootstrap";
33
import {DomSanitizer, SafeUrl} from "@angular/platform-browser";
4+
import {ConfigService} from "../../service/config.service";
45

56
@Component({
67
selector: 'fusio-help',
@@ -12,11 +13,12 @@ export class HelpComponent implements OnInit {
1213
path?: string;
1314
url?: SafeUrl;
1415

15-
constructor(public modal: NgbActiveModal, protected sanitizer: DomSanitizer) { }
16+
constructor(public modal: NgbActiveModal, private config: ConfigService, private sanitizer: DomSanitizer) { }
1617

1718
ngOnInit(): void {
1819
if (this.path) {
19-
this.url = this.sanitizer.bypassSecurityTrustResourceUrl('https://docs.fusio-project.org/docs/backend/' + this.path);
20+
const baseUrl = this.config.getHelpUrl();
21+
this.url = this.sanitizer.bypassSecurityTrustResourceUrl(baseUrl + this.path);
2022
}
2123
}
2224

projects/fusio-sdk/src/lib/component/login/login.component.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {Component, Inject, OnInit} from '@angular/core';
1+
import {Component, OnInit} from '@angular/core';
22
import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
33
import axios from "axios";
44
import {Router} from "@angular/router";
5-
import {UserAccount} from "fusio-sdk/dist/src/generated/consumer/UserAccount";
65
import {ProviderService} from "../../service/provider.service";
76
import {UserService} from "../../service/user.service";
87
import {ConsumerService} from "../../service/consumer.service";
9-
import {Config, FUSIO_CONFIG, Provider} from "../../config/config";
8+
import {Provider} from "../../config/config";
9+
import {ConfigService} from "../../service/config.service";
1010

1111
@Component({
1212
selector: 'fusio-login',
@@ -25,11 +25,11 @@ export class LoginComponent implements OnInit {
2525

2626
providers: Array<Provider> = [];
2727

28-
constructor(private consumer: ConsumerService, private router: Router, private user: UserService<UserAccount>, private provider: ProviderService, @Inject(FUSIO_CONFIG) private config: Config) {
28+
constructor(private consumer: ConsumerService, private router: Router, private user: UserService, private provider: ProviderService, private config: ConfigService) {
2929
}
3030

3131
ngOnInit(): void {
32-
this.providers = this.provider.getProviders();
32+
this.providers = this.config.getProviders();
3333
}
3434

3535
async login() {
@@ -42,12 +42,7 @@ export class LoginComponent implements OnInit {
4242

4343
this.user.login(response.data);
4444

45-
let homePath = '/account';
46-
if (this.config.homePath) {
47-
homePath = this.config.homePath;
48-
}
49-
50-
this.router.navigate([homePath]).then(() => {
45+
this.router.navigate([this.config.getHomePath()]).then(() => {
5146
location.reload();
5247
});
5348
} catch (error) {

projects/fusio-sdk/src/lib/component/login/provider/provider.component.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
import {Component, Inject, OnInit} from '@angular/core';
2-
import axios from "axios";
1+
import {Component, OnInit} from '@angular/core';
32
import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
43
import {SessionTokenStore} from "sdkgen-client";
54
import {AccessToken} from "sdkgen-client/dist/src/AccessToken";
65
import {ActivatedRoute, Router} from "@angular/router";
7-
import {UserAccount} from "fusio-sdk/dist/src/generated/consumer/UserAccount";
86
import {ProviderService} from "../../../service/provider.service";
97
import {UserService} from "../../../service/user.service";
108
import {ConsumerService} from "../../../service/consumer.service";
11-
import {ErrorConverter} from "../../../util/error-converter";
12-
import {Config, FUSIO_CONFIG} from "../../../config/config";
9+
import {ErrorService} from "../../../service/error.service";
10+
import {ConfigService} from "../../../service/config.service";
1311

1412
@Component({
1513
selector: 'fusio-login-provider',
@@ -20,7 +18,7 @@ export class ProviderComponent implements OnInit {
2018

2119
response?: Message;
2220

23-
constructor(private consumer: ConsumerService, private router: Router, private user: UserService<UserAccount>, protected route: ActivatedRoute, private provider: ProviderService, @Inject(FUSIO_CONFIG) private config: Config) { }
21+
constructor(private consumer: ConsumerService, private router: Router, private user: UserService, protected route: ActivatedRoute, private provider: ProviderService, private error: ErrorService, private config: ConfigService) { }
2422

2523
async ngOnInit(): Promise<void> {
2624
const provider = this.route.snapshot.paramMap.get('provider');
@@ -65,7 +63,7 @@ export class ProviderComponent implements OnInit {
6563

6664
await this.obtainUserInfo();
6765
} catch (error) {
68-
this.response = ErrorConverter.convert(error);
66+
this.response = this.error.convert(error);
6967
}
7068
}
7169

@@ -75,12 +73,7 @@ export class ProviderComponent implements OnInit {
7573

7674
this.user.login(response.data);
7775

78-
let homePath = '/account';
79-
if (this.config.homePath) {
80-
homePath = this.config.homePath;
81-
}
82-
83-
this.router.navigate([homePath]).then(() => {
76+
this.router.navigate([this.config.getHomePath()]).then(() => {
8477
location.reload();
8578
});
8679
}

projects/fusio-sdk/src/lib/component/logout/logout.component.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Component, OnInit } from '@angular/core';
22
import {Router} from "@angular/router";
3-
import {UserAccount} from "fusio-sdk/dist/src/generated/consumer/UserAccount";
43
import {UserService} from "../../service/user.service";
54

65
@Component({
@@ -10,7 +9,7 @@ import {UserService} from "../../service/user.service";
109
})
1110
export class LogoutComponent implements OnInit {
1211

13-
constructor(private user: UserService<UserAccount>, private router: Router) {
12+
constructor(private user: UserService, private router: Router) {
1413
}
1514

1615
ngOnInit(): void {

0 commit comments

Comments
 (0)