diff --git a/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.html b/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.html
index 31dfc36..5aa7be0 100644
--- a/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.html
+++ b/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.html
@@ -53,6 +53,14 @@
Kunde inte hämta exportfilen för deltagare. Ladda om sidan och försök igen.
{{error.message}}
+
+ Det finns inga deltagare att exportera. Försök att ändra filtreringen och försök igen.
+
Exportera deltagare
diff --git a/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.ts b/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.ts
index 8b14d87..b9b71a0 100644
--- a/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.ts
+++ b/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.component.ts
@@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
import { DeltagareExportRequest } from '@msfa-models/api/deltagare-export.request.model';
import { CustomError } from '@msfa-models/error/custom-error';
+import { Export } from '@msfa-models/export.model';
import { formatDate } from '@msfa-shared/utils/format-to-date.util';
import { saveAs } from 'file-saver';
import { BehaviorSubject } from 'rxjs';
@@ -21,6 +22,7 @@ export class DeltagareExportComponent {
shouldValidate$ = new BehaviorSubject(false);
fetchIsLoading$ = new BehaviorSubject(false);
fetchError$ = new BehaviorSubject(null);
+ exportIsEmpty$ = new BehaviorSubject(false);
formGroup = new FormGroup(
{
startDate: new FormControl(null),
@@ -30,7 +32,11 @@ export class DeltagareExportComponent {
},
[DeltagareExportValidator.isDeltagareExportValid()]
);
- constructor(private deltagareExportService: DeltagareExportService) {}
+ constructor(private deltagareExportService: DeltagareExportService) {
+ this.formGroup.valueChanges.subscribe(() => {
+ this._removeAlerts();
+ });
+ }
get startDateFormControl(): FormControl {
return this.formGroup.get('startDate') as FormControl;
@@ -57,8 +63,13 @@ export class DeltagareExportComponent {
return this.formErrors?.datesMismatch && this.shouldValidate$.getValue();
}
- fetchExportFile(): void {
+ private _removeAlerts(): void {
this.fetchError$.next(null);
+ this.exportIsEmpty$.next(false);
+ }
+
+ fetchExportFile(): void {
+ this._removeAlerts();
if (this.formGroup.invalid) {
this.shouldValidate$.next(true);
return;
@@ -69,12 +80,15 @@ export class DeltagareExportComponent {
.fetchExportFile$(this._formDataToRequestData)
.pipe(take(1))
.subscribe({
- next: response => {
- const isExcel = this._formDataToRequestData.exportToExcel;
- const blob = new Blob([response], { type: this._getFileType(isExcel) });
- saveAs(blob, this._getFileName(isExcel));
+ next: ({ empty, blob }: Export) => {
+ if (empty) {
+ this.exportIsEmpty$.next(true);
+ } else {
+ const isExcel = this._formDataToRequestData.exportToExcel;
+ saveAs(blob, this._getFileName(isExcel));
+ this.formGroup.reset();
+ }
this.fetchIsLoading$.next(false);
- this.formGroup.reset();
},
error: (customError: CustomError) => {
this.fetchError$.next({ ...customError, message: customError.error.message });
diff --git a/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.service.ts b/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.service.ts
index 236a390..3b427d4 100644
--- a/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.service.ts
+++ b/apps/mina-sidor-fa/src/app/pages/exports/pages/deltagare-export/deltagare-export.service.ts
@@ -1,5 +1,6 @@
import { Injectable } from '@angular/core';
import { DeltagareExportRequest } from '@msfa-models/api/deltagare-export.request.model';
+import { Export } from '@msfa-models/export.model';
import { ExportApiService } from '@msfa-services/api/export.api.service';
import { Observable } from 'rxjs';
@@ -7,7 +8,7 @@ import { Observable } from 'rxjs';
export class DeltagareExportService {
constructor(private exportApiService: ExportApiService) {}
- public fetchExportFile$(requestData: DeltagareExportRequest): Observable {
+ public fetchExportFile$(requestData: DeltagareExportRequest): Observable {
return this.exportApiService.fetchDeltagareExportFile$(requestData);
}
}
diff --git a/apps/mina-sidor-fa/src/app/shared/models/export.model.ts b/apps/mina-sidor-fa/src/app/shared/models/export.model.ts
new file mode 100644
index 0000000..bf84534
--- /dev/null
+++ b/apps/mina-sidor-fa/src/app/shared/models/export.model.ts
@@ -0,0 +1,4 @@
+export interface Export {
+ blob?: Blob;
+ empty: boolean;
+}
diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/export.api.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/export.api.service.ts
index 9217d18..f9b9b87 100644
--- a/apps/mina-sidor-fa/src/app/shared/services/api/export.api.service.ts
+++ b/apps/mina-sidor-fa/src/app/shared/services/api/export.api.service.ts
@@ -1,12 +1,13 @@
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Params } from '@angular/router';
import { ErrorType } from '@msfa-enums/error-type.enum';
import { environment } from '@msfa-environment';
import { DeltagareExportRequest } from '@msfa-models/api/deltagare-export.request.model';
import { CustomError } from '@msfa-models/error/custom-error';
+import { Export } from '@msfa-models/export.model';
import { Observable } from 'rxjs';
-import { catchError } from 'rxjs/operators';
+import { catchError, map } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
@@ -16,15 +17,22 @@ export class ExportApiService {
constructor(private httpClient: HttpClient) {}
- public fetchDeltagareExportFile$(requestData: DeltagareExportRequest): Observable {
+ public fetchDeltagareExportFile$(requestData: DeltagareExportRequest): Observable {
const params: Params = {
...requestData,
includeExportedDeltagare: requestData.includeExportedDeltagare.toString(),
};
return this.httpClient
- .get(`${this._apiBaseUrl}/deltagare`, { params, responseType: 'blob' as 'json' })
+ .get(`${this._apiBaseUrl}/deltagare`, {
+ params,
+ observe: 'response',
+ responseType: 'blob' as 'json',
+ })
.pipe(
+ map((response: HttpResponse) => {
+ return response.status === 204 ? { empty: true } : { empty: false, blob: response.body };
+ }),
catchError((error: Error) => {
throw new CustomError({
error,