Skip to content

Commit bf3edbd

Browse files
committed
fix: refactor app-module-activate-button to use async pipe and improve error handling
1 parent e20123b commit bf3edbd

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

frontend/src/app/app-module/shared/components/app-module-activate-button/app-module-activate-button.component.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
<button (click)="enableModule()"
2-
*ngIf="moduleDetail && activatable;else loading"
1+
<button *ngIf="moduleDetail$ | async as moduleDetail"
2+
(click)="enableModule()"
33
[disabled]="loadingDetail || disabled"
44
[ngClass]="moduleDetail.moduleActive ? 'utm-button-danger' : 'utm-button-primary'"
55
class="btn utm-button span-small-icon">
6-
<i
7-
[ngClass]="changingStatus?'icon-spinner2 spinner':moduleDetail.moduleActive?
8-
'icon-radio-unchecked':'icon-checkmark-circle'"></i>
6+
7+
<i [ngClass]="changingStatus ? 'icon-spinner2 spinner':
8+
moduleDetail.moduleActive ? 'icon-radio-unchecked' : 'icon-checkmark-circle'"></i>
99
{{(moduleDetail.moduleActive ? 'Disable ' : 'Enable ') + 'integration'}}
1010
</button>
1111
<ng-template #loading>

frontend/src/app/app-module/shared/components/app-module-activate-button/app-module-activate-button.component.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';
22
import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
3-
import {Subject} from 'rxjs';
4-
import {filter, takeUntil} from 'rxjs/operators';
3+
import {Observable, of, Subject} from 'rxjs';
4+
import {catchError, filter, finalize, map, takeUntil, tap} from 'rxjs/operators';
55
import {UtmToastService} from '../../../../shared/alert/utm-toast.service';
66
import {NavBehavior} from '../../../../shared/behaviors/nav.behavior';
77
import {ModuleChangeStatusBehavior} from '../../behavior/module-change-status.behavior';
@@ -11,6 +11,7 @@ import {UtmModulesService} from '../../services/utm-modules.service';
1111
import {UtmModuleType} from '../../type/utm-module.type';
1212
import {AppModuleChecksComponent} from '../app-module-checks/app-module-checks.component';
1313
import {AppModuleDeactivateComponent} from '../app-module-deactivate/app-module-deactivate.component';
14+
import {HttpErrorResponse} from "@angular/common/http";
1415

1516
@Component({
1617
selector: 'app-app-module-activate-button',
@@ -24,10 +25,11 @@ export class AppModuleActivateButtonComponent implements OnInit, OnDestroy {
2425
@Input() disabled = false;
2526
@Input() serverId: number;
2627
@Output() disableModuleClicked = new EventEmitter<void>();
27-
loadingDetail = true;
28+
loadingDetail = false;
2829
moduleDetail: UtmModuleType;
2930
changingStatus: any;
3031
activatable: boolean;
32+
moduleDetail$: Observable<UtmModuleType>;
3133
destroy$: Subject<void> = new Subject<void>();
3234

3335
constructor(private utmModulesService: UtmModulesService,
@@ -49,16 +51,24 @@ export class AppModuleActivateButtonComponent implements OnInit, OnDestroy {
4951
this.changeModuleStatus(value.status);
5052
}
5153
});
52-
this.getModuleDetail(this.module);
54+
this.moduleDetail$ = this.getModuleDetail(this.module);
5355
}
5456

5557
getModuleDetail(module: UtmModulesEnum) {
56-
this.utmModulesService.getModulesDetails({nameShort: module, serverId: this.serverId})
57-
.subscribe(response => {
58-
this.activatable = response.body.activatable;
59-
this.moduleDetail = response.body;
60-
this.loadingDetail = false;
61-
});
58+
return this.utmModulesService.getModulesDetails({nameShort: module, serverId: this.serverId})
59+
.pipe(
60+
tap(() => this.loadingDetail = true),
61+
map(response => {
62+
this.activatable = response.body.activatable;
63+
this.moduleDetail = response.body;
64+
return response.body;
65+
}),
66+
catchError((error: HttpErrorResponse) => {
67+
this.toastService.showError('Error', 'Unable to load module detail');
68+
return of({} as UtmModuleType);
69+
}),
70+
finalize(() => this.loadingDetail = false)
71+
);
6272
}
6373

6474
enableModule() {

0 commit comments

Comments
 (0)