-
+
+
diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss
index 70aa16a..850c27d 100644
--- a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss
+++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.scss
@@ -28,5 +28,9 @@
&__spinner {
display: inline-flex;
animation: spinning 1s linear infinite;
+
+ &--s {
+ width: 2.5rem;
+ }
}
}
diff --git a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts
index 0a4b831..279ddef 100644
--- a/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts
+++ b/apps/mina-sidor-fa/src/app/shared/components/loader/loader.component.ts
@@ -10,11 +10,16 @@ import { LoaderType } from '@msfa-enums/loader-type.enum';
export class LoaderComponent {
private readonly _defaultClass = 'loader';
@Input() type: LoaderType;
+ @Input() size: 's' | 'm' = 'm';
- get classes(): string {
+ get loaderClass(): string {
if (this.type) {
return `${this._defaultClass} ${this._defaultClass}--${this.type as string}`;
}
return this._defaultClass;
}
+
+ get spinnerClass(): string {
+ return `${this._defaultClass}__spinner ${this._defaultClass}__spinner--${this.size}`;
+ }
}
diff --git a/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts b/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts
index cb04f72..6e55df1 100644
--- a/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts
+++ b/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts
@@ -41,7 +41,6 @@ export function mapAvropResponseToAvrop(data: AvropResponse): Avrop {
sprakstod,
adress,
sparkod,
- sparNamn,
genomforandeReferens,
deltagandeGrad,
utforandeverksamhet,
diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts
index aed50ae..17d08d3 100644
--- a/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts
+++ b/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts
@@ -3,14 +3,13 @@ import { Injectable } from '@angular/core';
import { environment } from '@msfa-environment';
import { AvropFilterResponse } from '@msfa-models/api/avrop-filter.response.model';
import { AvropApiResponse } from '@msfa-models/api/avrop.response.model';
-import { HandledareResponse } from '@msfa-models/api/handledare.response.model';
import { Params } from '@msfa-models/api/params.model';
import { AvropFilter, mapResponseToAvropFilter } from '@msfa-models/avrop-filter.model';
import { AvropCompact, AvropCompactData, mapAvropResponseToAvrop } from '@msfa-models/avrop.model';
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
-import { Handledare, mapHandledareResponseToHandledare } from '@msfa-models/handledare.model';
+import { Handledare } from '@msfa-models/handledare.model';
import { BehaviorSubject, Observable, of } from 'rxjs';
-import { catchError, filter, map, tap } from 'rxjs/operators';
+import { catchError, filter, map } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
@@ -46,30 +45,6 @@ export class AvropApiService {
);
}
- fetchAvailableHandledare$(avrop: AvropCompact[]): Observable
{
- const lockedAvropIsEqual = this.lockedAvropValue?.every(
- (lockedAvrop, index) => lockedAvrop.id === avrop[index]?.id
- );
-
- // Checking to see if we really need to make a new api-request
- if (lockedAvropIsEqual) {
- return of(this._availableHandledareSnapshot$.getValue());
- }
-
- this._lockedAvropSnapshot$.next(avrop);
-
- return this.httpClient
- .get<{ data: HandledareResponse[] }>(`${this._apiBaseUrl}/handledare`, {
- params: { avropIds: avrop.map(a => a.id) },
- })
- .pipe(
- map(({ data }) => data.map(handledare => mapHandledareResponseToHandledare(handledare))),
- tap(handledare => {
- this._availableHandledareSnapshot$.next(handledare);
- })
- );
- }
-
fetchAvailableTjanster$(params: Params): Observable {
return this.httpClient
.get<{ data: AvropFilterResponse[] }>(`${this._apiBaseUrl}/tjanster`, { params })
diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/handledare.api.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/handledare.api.service.ts
new file mode 100644
index 0000000..a11fa97
--- /dev/null
+++ b/apps/mina-sidor-fa/src/app/shared/services/api/handledare.api.service.ts
@@ -0,0 +1,43 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { environment } from '@msfa-environment';
+import { HandledareResponse } from '@msfa-models/api/handledare.response.model';
+import { Params } from '@msfa-models/api/params.model';
+import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
+import { Handledare, mapHandledareResponseToHandledare } from '@msfa-models/handledare.model';
+import { Observable } from 'rxjs';
+import { catchError, map } from 'rxjs/operators';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class HandledareApiService {
+ private _apiBaseUrl = `${environment.api.url}/avrop/handledare`;
+
+ constructor(private httpClient: HttpClient) {}
+
+ public fetchAvailableHandledare$(avropIds: string[]): Observable {
+ return this.httpClient
+ .get<{ data: HandledareResponse[] }>(`${this._apiBaseUrl}`, {
+ params: { avropIds },
+ })
+ .pipe(
+ map(({ data }) => data.map(handledare => mapHandledareResponseToHandledare(handledare))),
+ catchError((error: Error) => {
+ throw new CustomError(
+ errorToCustomError({ ...error, message: `Kunde inte hämta handledare.\n\n${error.message}` })
+ );
+ })
+ );
+ }
+
+ async assignHandledare(avropIds: string[], handledare: Handledare): Promise {
+ const params: Params = {
+ avropIds,
+ ciamUserId: handledare.ciamUserId,
+ };
+ return this.httpClient
+ .patch(`${this._apiBaseUrl}/assign`, null, { params })
+ .toPromise();
+ }
+}
diff --git a/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts b/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts
index 05c4fd0..9b75ee9 100644
--- a/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts
+++ b/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts
@@ -6,6 +6,7 @@ import { AvropApiService } from '@msfa-services/api/avrop-api.service';
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
import { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';
import { distinctUntilChanged, filter, map, shareReplay, switchMap, tap } from 'rxjs/operators';
+import { HandledareApiService } from './api/handledare.api.service';
type Step = 1 | 2 | 3 | 4;
@@ -103,7 +104,9 @@ export class AvropService {
public availableHandledare$: Observable = this._lockedAvrop$.pipe(
filter(lockedAvrop => !!lockedAvrop?.length),
- switchMap(lockedAvrop => this.avropApiService.fetchAvailableHandledare$(lockedAvrop))
+ map(lockedAvrop => lockedAvrop.map(avrop => avrop.id)),
+ switchMap(lockedAvrop => this.handledareApiService.fetchAvailableHandledare$(lockedAvrop)),
+ shareReplay(1)
);
public currentStep$: Observable = combineLatest([
@@ -194,7 +197,7 @@ export class AvropService {
this._selectedAvrop$.next(deltagare);
}
- constructor(private avropApiService: AvropApiService) {}
+ constructor(private avropApiService: AvropApiService, private handledareApiService: HandledareApiService) {}
public resetError(): void {
this._error$.next(null);
diff --git a/apps/mina-sidor-fa/src/app/shared/services/handledare.service.ts b/apps/mina-sidor-fa/src/app/shared/services/handledare.service.ts
new file mode 100644
index 0000000..0dfbf73
--- /dev/null
+++ b/apps/mina-sidor-fa/src/app/shared/services/handledare.service.ts
@@ -0,0 +1,43 @@
+import { Injectable } from '@angular/core';
+import { errorToCustomError } from '@msfa-models/error/custom-error';
+import { Handledare } from '@msfa-models/handledare.model';
+import { BehaviorSubject, Observable } from 'rxjs';
+import { HandledareApiService } from './api/handledare.api.service';
+import { ErrorService } from './error.service';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class HandledareService {
+ private _lastSavedHandledare$ = new BehaviorSubject(null);
+ public lastSavedHandledare$: Observable = this._lastSavedHandledare$.asObservable();
+ private _submitHandledareLoading$ = new BehaviorSubject(false);
+ public submitHandledareLoading$: Observable = this._submitHandledareLoading$.asObservable();
+
+ constructor(private handledareApiService: HandledareApiService, private errorService: ErrorService) {}
+
+ public resetLastSavedHandledare(): void {
+ this._lastSavedHandledare$.next(null);
+ }
+
+ public fetchAvailableHandledare$(avropIds: string[]): Observable {
+ return this.handledareApiService.fetchAvailableHandledare$(avropIds);
+ }
+
+ public assignHandledare(avropIds: string[], handledare: Handledare): void {
+ this._submitHandledareLoading$.next(true);
+ this.handledareApiService
+ .assignHandledare(avropIds, handledare)
+ .then(() => {
+ this._lastSavedHandledare$.next(handledare);
+ })
+ .catch((error: Error) => {
+ this.errorService.add(
+ errorToCustomError({ ...error, message: `Kunde inte tilldela handledare.\n\n${error.message}` })
+ );
+ })
+ .finally(() => {
+ this._submitHandledareLoading$.next(false);
+ });
+ }
+}