Skip to content

Commit 51149e3

Browse files
authored
fix: [MULTIDIRECTORY-1234] Remove hideSpinner from error interceptor
1 parent 01754d2 commit 51149e3

12 files changed

Lines changed: 63 additions & 118 deletions

File tree

projects/multidirectory-app/src/app/components/modals/components/dialogs/create-contact-dialog/create-contact-dialog.component.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { MultidirectoryUiKitModule, StepperComponent } from 'multidirectory-ui-k
66
import { DialogService } from '../../../services/dialog.service';
77
import { MultidirectoryApiService } from '@services/multidirectory-api.service';
88
import { ToastrService } from 'ngx-toastr';
9-
import { catchError, debounceTime, EMPTY, map, Subject, switchMap } from 'rxjs';
9+
import { debounceTime, finalize, map, Subject, switchMap } from 'rxjs';
1010
import { CreateUserDialogData, CreateUserDialogReturnData } from '../../../interfaces/user-create-dialog.interface';
1111
import { UserCreateRequest } from '@models/api/user-create/user-create.request';
1212
import { SchemaService } from '@services/schema/schema.service';
@@ -125,11 +125,8 @@ export class CreateContactDialogComponent implements OnInit {
125125
}),
126126
);
127127
}),
128-
catchError(() => {
129-
this.dialogComponent?.hideSpinner();
130-
this.toastr.error(translate('contact-create.unable-create-contact'));
131-
this.dialogService.close(this.dialogRef);
132-
return EMPTY;
128+
finalize(() => {
129+
this.dialogComponent.hideSpinner();
133130
}),
134131
)
135132
.subscribe(() => {
@@ -150,7 +147,6 @@ export class CreateContactDialogComponent implements OnInit {
150147
},
151148
],
152149
};
153-
this.dialogComponent?.hideSpinner();
154150
this.dialogService.close(this.dialogRef, newItem);
155151
});
156152
}

projects/multidirectory-app/src/app/components/modals/components/dialogs/create-group-dialog/create-group-dialog.component.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { MdFormComponent, MultidirectoryUiKitModule } from 'multidirectory-ui-ki
44
import { RequiredWithMessageDirective } from '@core/validators/required-with-message.directive';
55
import { translate, TranslocoDirective, TranslocoPipe } from '@jsverse/transloco';
66
import { FormsModule } from '@angular/forms';
7-
import { catchError, EMPTY, map, Observable, Subject, switchMap, takeUntil } from 'rxjs';
7+
import { finalize, map, Observable, Subject, switchMap, takeUntil } from 'rxjs';
88
import { DialogService } from '../../../services/dialog.service';
99
import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
1010
import { CreateGroupDialogData, CreateGroupDialogReturnData } from '../../../interfaces/create-group-dialog.interface';
@@ -88,13 +88,11 @@ export class CreateGroupDialogComponent implements OnInit {
8888
}),
8989
);
9090
}),
91-
catchError(() => {
92-
this.dialogService.close(this.dialogRef);
93-
return EMPTY;
91+
finalize(() => {
92+
this.dialogComponent.hideSpinner();
9493
}),
9594
)
9695
.subscribe((x) => {
97-
this.dialogComponent?.hideSpinner();
9896
this.setupRequest = new GroupCreateRequest();
9997
this.dialogService.close(this.dialogRef, x);
10098
});

projects/multidirectory-app/src/app/components/modals/components/dialogs/create-user-dialog/create-user-dialog.component.ts

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
1-
import {
2-
ChangeDetectionStrategy,
3-
Component,
4-
DestroyRef,
5-
inject,
6-
OnInit,
7-
ViewChild,
8-
} from '@angular/core';
1+
import { ChangeDetectionStrategy, Component, DestroyRef, inject, OnInit, ViewChild } from '@angular/core';
92
import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
103
import { DialogComponent } from '../../core/dialog/dialog.component';
114
import { translate, TranslocoPipe } from '@jsverse/transloco';
@@ -14,11 +7,8 @@ import { DialogService } from '../../../services/dialog.service';
147
import { UserCreateService } from '@services/user-create.service';
158
import { MultidirectoryApiService } from '@services/multidirectory-api.service';
169
import { ToastrService } from 'ngx-toastr';
17-
import { catchError, map, Subject, switchMap } from 'rxjs';
18-
import {
19-
CreateUserDialogData,
20-
CreateUserDialogReturnData,
21-
} from '../../../interfaces/user-create-dialog.interface';
10+
import { finalize, map, Subject, switchMap } from 'rxjs';
11+
import { CreateUserDialogData, CreateUserDialogReturnData } from '../../../interfaces/user-create-dialog.interface';
2212
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
2313
import { UserCreateGeneralInfoComponent } from '@features/forms/user-create/general-info/general-info.component';
2414
import { UserCreatePasswordSettingsComponent } from '@features/forms/user-create/password-settings/password-settings.component';
@@ -52,8 +42,7 @@ export class CreateUserDialogComponent implements OnInit {
5242
unsubscribe = new Subject<void>();
5343
formValid = false;
5444

55-
private dialogRef: DialogRef<CreateUserDialogReturnData, CreateUserDialogComponent> =
56-
inject(DialogRef);
45+
private dialogRef: DialogRef<CreateUserDialogReturnData, CreateUserDialogComponent> = inject(DialogRef);
5746
private dialogService: DialogService = inject(DialogService);
5847
private setup: UserCreateService = inject(UserCreateService);
5948
private api: MultidirectoryApiService = inject(MultidirectoryApiService);
@@ -69,14 +58,7 @@ export class CreateUserDialogComponent implements OnInit {
6958
});
7059
}
7160

72-
objectClasses: string[] = [
73-
'user',
74-
'top',
75-
'person',
76-
'organizationalPerson',
77-
'posixAccount',
78-
'shadowAccount',
79-
];
61+
objectClasses: string[] = ['user', 'top', 'person', 'organizationalPerson', 'posixAccount', 'shadowAccount'];
8062
getObjectClasses() {
8163
return this.schema.getSchemaEntity('User').pipe(
8264
map((result) => {
@@ -152,13 +134,11 @@ export class CreateUserDialogComponent implements OnInit {
152134
}),
153135
);
154136
}),
155-
catchError((err) => {
137+
finalize(() => {
156138
this.dialogComponent.hideSpinner();
157-
throw err;
158139
}),
159140
)
160141
.subscribe((x) => {
161-
this.dialogComponent.hideSpinner();
162142
this.close(x);
163143
});
164144
}

projects/multidirectory-app/src/app/components/modals/components/dialogs/entity-properties-dialog/entity-properties-dialog.component.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { GroupPropertiesComponent } from '@features/ldap-properties/group-proper
66
import { MultidirectoryUiKitModule } from 'multidirectory-ui-kit';
77
import { translate, TranslocoPipe } from '@jsverse/transloco';
88
import { UserPropertiesComponent } from '@features/ldap-properties/user-properties/user-properties.component';
9-
import { EMPTY, of, switchMap, take } from 'rxjs';
9+
import { EMPTY, finalize, of, switchMap, take } from 'rxjs';
1010
import { DialogService } from '../../../services/dialog.service';
1111
import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
1212
import { EntityPropertiesDialogData, EntityPropertiesDialogReturnData } from '../../../interfaces/entity-properties-dialog.interface';
@@ -114,17 +114,14 @@ export class EntityPropertiesDialogComponent implements OnInit {
114114

115115
return of('');
116116
}),
117+
finalize(() => {
118+
this.dialogComponent.hideSpinner();
119+
}),
117120
)
118121
.subscribe({
119122
next: () => {
120-
this.dialogComponent.hideSpinner();
121123
this.close();
122124
},
123-
error: (err) => {
124-
this.dialogComponent.hideSpinner();
125-
126-
throw err;
127-
},
128125
});
129126
return false;
130127
}

projects/multidirectory-app/src/app/core/interceptors/error.interceptor.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
22
import { inject, Injectable } from '@angular/core';
33
import { Router } from '@angular/router';
4-
import { NgxSpinnerService } from 'ngx-spinner';
54
import { ToastrService } from 'ngx-toastr';
65
import { catchError, EMPTY, Observable, take, throwError } from 'rxjs';
76
import { AppSettingsService } from '@services/app-settings.service';
@@ -18,15 +17,13 @@ export const ErrorCode = {
1817
@Injectable()
1918
export class ErrorInterceptor implements HttpInterceptor {
2019
private readonly toastr = inject(ToastrService);
21-
private readonly spinner = inject(NgxSpinnerService);
2220
private readonly router = inject(Router);
2321
private app: AppSettingsService = inject(AppSettingsService);
2422
private dialogService = inject(DialogService);
2523

2624
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
2725
return next.handle(req).pipe(
2826
catchError((error: HttpErrorResponse) => {
29-
this.spinner.hide();
3027
if (error.status === ErrorCode.NotAuthorized) {
3128
return this.handle401(error);
3229
}

projects/multidirectory-app/src/app/features/dns/dns-settings.component.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
import { Component, DestroyRef, inject, OnInit } from '@angular/core';
22
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
33
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
4-
import { faCircleExclamation, faL } from '@fortawesome/free-solid-svg-icons';
4+
import { faCircleExclamation } from '@fortawesome/free-solid-svg-icons';
55
import { translate, TranslocoPipe } from '@jsverse/transloco';
6-
import { MuiButtonComponent, MuiTabDirective, MuiTabsComponent } from '@mflab/mui-kit';
6+
import { MuiTabDirective, MuiTabsComponent } from '@mflab/mui-kit';
77
import { AppSettingsService } from '@services/app-settings.service';
88
import { AppWindowsService } from '@services/app-windows.service';
99
import { DnsApiService } from '@services/dns-api.service';
1010
import { ToastrService } from 'ngx-toastr';
11-
import { catchError, EMPTY, switchMap, take } from 'rxjs';
12-
import { ConfirmDialogComponent } from '../../components/modals/components/dialogs/confirm-dialog/confirm-dialog.component';
13-
import { ConfirmDialogData, ConfirmDialogReturnData } from '../../components/modals/interfaces/confirm-dialog.interface';
11+
import { EMPTY, finalize, switchMap, take } from 'rxjs';
1412
import { DialogService } from '../../components/modals/services/dialog.service';
1513
import DnsZonesComponent from './dns-zones/dns-zones.component';
16-
import { ConfirmDialogDescriptor } from '@models/api/confirm-dialog/confirm-dialog-descriptor';
1714
import { DnsRule } from '@models/api/dns/dns-rule';
18-
import { DnsRuleType } from '@models/api/dns/dns-rule-type';
1915
import { DnsSetupRequest } from '@models/api/dns/dns-setup-request';
2016
import { DnsStatusResponse } from '@models/api/dns/dns-status-response';
2117
import { DnsStatuses } from '@models/api/dns/dns-statuses';
@@ -78,13 +74,11 @@ export class DnsSettingsComponent implements OnInit {
7874
this.app.dnsStatusRx
7975
.pipe(
8076
takeUntilDestroyed(this.destroyRef$),
81-
catchError((err) => {
77+
finalize(() => {
8278
this.windows.hideSpinner();
83-
throw err;
8479
}),
8580
)
8681
.subscribe((status) => {
87-
this.windows.hideSpinner();
8882
this.dnsStatus = status;
8983
});
9084

projects/multidirectory-app/src/app/features/forms/setup-kerberos/setup-kerberos.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { MultidirectoryApiService } from '@services/multidirectory-api.service';
1313
import { SetupService } from '@services/setup.service';
1414
import { ButtonComponent, MdFormComponent, ModalInjectDirective, TextboxComponent } from 'multidirectory-ui-kit';
1515
import { ToastrService } from 'ngx-toastr';
16-
import { catchError, Subject } from 'rxjs';
16+
import { finalize, Subject } from 'rxjs';
1717

1818
@Component({
1919
selector: 'app-setup-kerberos-dialog',
@@ -94,14 +94,12 @@ export class SetupKerberosDialogComponent implements OnDestroy {
9494
this.setup
9595
.kerberosSetup(this.setupRequest)
9696
.pipe(
97-
catchError((err) => {
97+
finalize(() => {
9898
this.modalInjector.hideSpinner();
99-
throw err;
10099
}),
101100
)
102101
.subscribe(() => {
103102
this.toastr.success(translate('setup.kerberos-setup-complete'));
104-
this.modalInjector.hideSpinner();
105103
window.location.reload();
106104
});
107105
}

projects/multidirectory-app/src/app/features/login/login.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { RequiredWithMessageDirective } from '@core/validators/required-with-mes
55
import { TranslocoPipe } from '@jsverse/transloco';
66
import { LoginService } from '@services/login.service';
77
import { ButtonComponent, TextboxComponent } from 'multidirectory-ui-kit';
8-
import { catchError, Subject } from 'rxjs';
8+
import { finalize, Subject } from 'rxjs';
99
import { DialogComponent } from '@components/modals/components/core/dialog/dialog.component';
1010
import { DIALOG_COMPONENT_WRAPPER_CONFIG } from '@components/modals/constants/dialog.constants';
1111

@@ -92,13 +92,11 @@ export class LoginComponent implements OnDestroy {
9292
this.loginService
9393
.login(this.loginForm.get('username')?.value, this.loginForm.get('password')?.value)
9494
.pipe(
95-
catchError((err) => {
95+
finalize(() => {
9696
this.dialogComponent().hideSpinner();
97-
throw err;
9897
}),
9998
)
10099
.subscribe(() => {
101-
this.dialogComponent().hideSpinner();
102100
this.router.navigate(['/']);
103101
});
104102
}

projects/multidirectory-app/src/app/features/policies/access-policy/access-policy-list.component.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { AppWindowsService } from '@services/app-windows.service';
99
import { MultidirectoryApiService } from '@services/multidirectory-api.service';
1010
import { ButtonComponent, ModalInjectDirective } from 'multidirectory-ui-kit';
1111
import { ToastrService } from 'ngx-toastr';
12-
import { EMPTY, switchMap, take } from 'rxjs';
12+
import { EMPTY, finalize, switchMap, take } from 'rxjs';
1313

1414
@Component({
1515
selector: 'app-access-policy-list',
@@ -46,10 +46,13 @@ export class AccessPolicySettingsComponent implements OnInit {
4646

4747
ngOnInit(): void {
4848
this.windows.showSpinner();
49-
this.api.getAccessPolicy().subscribe((x) => {
50-
this.clients = x;
51-
this.windows.hideSpinner();
52-
});
49+
this.api
50+
.getAccessPolicy()
51+
.pipe(finalize(() => this.windows.hideSpinner()))
52+
.subscribe((x) => {
53+
this.clients = x;
54+
this.windows.hideSpinner();
55+
});
5356
}
5457

5558
onDeleteClick(client: AccessPolicy) {

projects/multidirectory-app/src/app/features/policies/access-policy/access-policy-view/access-policy-view.component.ts

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import {
2323
TextboxComponent,
2424
} from 'multidirectory-ui-kit';
2525
import { ToastrService } from 'ngx-toastr';
26-
import { from, map, Observable, of, Subject, switchMap, take } from 'rxjs';
27-
import { DialogService } from '../../../../components/modals/services/dialog.service';
28-
import { IplistDialogData } from '../../../../components/modals/interfaces/ip-list-dialog.interface';
26+
import { finalize, from, map, Observable, of, Subject, switchMap, take } from 'rxjs';
27+
import { DialogService } from '@components/modals/services/dialog.service';
28+
import { IplistDialogData } from '@components/modals/interfaces/ip-list-dialog.interface';
2929
import { MultiselectModel } from 'projects/multidirectory-ui-kit/src/lib/components/multiselect/mutliselect-model';
3030
import { LdapTreeviewService } from '@services/ldap/ldap-treeview.service';
3131
import { MaxLengthValidatorDirective } from '@core/validators/max-length.directive';
@@ -115,23 +115,27 @@ export class AccessPolicyViewComponent implements OnInit, OnDestroy {
115115

116116
load() {
117117
this.windows.showSpinner();
118-
this.api.getAccessPolicy().subscribe({
119-
next: (policies) => {
120-
this.windows.hideSpinner();
121-
if (this.activatedRoute.snapshot.params.id) {
122-
this.accessClient =
123-
policies.find((x) => x.id == this.activatedRoute.snapshot.params.id || x.id == this.accessPolicyId()) ?? new AccessPolicy();
124-
}
125-
this.ipAddresses = this.accessClient.ipRange.map((x: any) => (x instanceof Object ? x.start + '-' + x.end : x)).join(', ');
126-
127-
this.mfaAccess = this.accessClient.mfaStatus ?? MfaAccessEnum.Noone;
128-
this.selectedGroups = this.accessClient.groups.map((x) => this.getMultiselectOption(x));
129-
this.selectedMfaGroups = this.accessClient.mfaGroups.map((x) => this.getMultiselectOption(x));
130-
},
131-
error: () => {
132-
this.windows.hideSpinner();
133-
},
134-
});
118+
this.api
119+
.getAccessPolicy()
120+
.pipe(
121+
finalize(() => {
122+
this.windows.hideSpinner();
123+
}),
124+
)
125+
.subscribe({
126+
next: (policies) => {
127+
this.windows.hideSpinner();
128+
if (this.activatedRoute.snapshot.params.id) {
129+
this.accessClient =
130+
policies.find((x) => x.id == this.activatedRoute.snapshot.params.id || x.id == this.accessPolicyId()) ?? new AccessPolicy();
131+
}
132+
this.ipAddresses = this.accessClient.ipRange.map((x: any) => (x instanceof Object ? x.start + '-' + x.end : x)).join(', ');
133+
134+
this.mfaAccess = this.accessClient.mfaStatus ?? MfaAccessEnum.Noone;
135+
this.selectedGroups = this.accessClient.groups.map((x) => this.getMultiselectOption(x));
136+
this.selectedMfaGroups = this.accessClient.mfaGroups.map((x) => this.getMultiselectOption(x));
137+
},
138+
});
135139
}
136140

137141
close() {

0 commit comments

Comments
 (0)