feat(deltagare): Added list with reports. (TV-732)
Squashed commit of the following: commit 225a54c520c3cceaccd348b587df83e8e2050e2d Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Oct 6 15:00:30 2021 +0200 Added error-handling to reports fetch commit 876e8d1a338f8f910086868083bb0b4d61fcff63 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Oct 6 14:50:51 2021 +0200 Added pagination preparation commit 5e90bc4c0b6079852c05628f1b7fa79cc7f2bc9a Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Oct 6 14:32:46 2021 +0200 Added reports list to reports tab
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
<div class="reports">
|
<div class="reports-list">
|
||||||
<digi-table af-variation="secondary">
|
<digi-table af-variation="secondary">
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@@ -9,10 +9,8 @@
|
|||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let report of reports">
|
<tr *ngFor="let report of reports">
|
||||||
<th scope="row">
|
<th scope="row">{{ report.type }}</th>
|
||||||
<a [routerLink]="report?.id">{{ report.type }}</a>
|
<td>{{ report.date | date:'longDate' }} {{ report.date | date:'shortTime' }}</td>
|
||||||
</th>
|
|
||||||
<td>{{ report.sendDate | localDate }}</td>
|
|
||||||
<td>{{ report.status }}</td>
|
<td>{{ report.status }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -20,14 +18,13 @@
|
|||||||
</digi-table>
|
</digi-table>
|
||||||
|
|
||||||
<digi-navigation-pagination
|
<digi-navigation-pagination
|
||||||
*ngIf="totalPage > 1"
|
*ngIf="paginationMeta"
|
||||||
class="reports__pagination"
|
class="reports-list__pagination"
|
||||||
[afTotalPages]="totalPage"
|
[afTotalPages]="totalPage"
|
||||||
[afCurrentResultStart]="currentResultStart"
|
[afCurrentResultStart]="currentResultStart"
|
||||||
[afCurrentResultEnd]="currentResultEnd"
|
[afCurrentResultEnd]="currentResultEnd"
|
||||||
[afTotalResults]="count"
|
[afTotalResults]="count"
|
||||||
(afOnPageChange)="setNewPage($event.detail)"
|
(afOnPageChange)="emitNewPage($event.detail)"
|
||||||
af-result-name="reports"
|
af-result-name="rapporter"
|
||||||
>
|
></digi-navigation-pagination>
|
||||||
</digi-navigation-pagination>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@import 'apps/mina-sidor-fa/src/styles/variables/gutters';
|
@import 'apps/mina-sidor-fa/src/styles/variables/gutters';
|
||||||
|
|
||||||
.reports {
|
.reports-list {
|
||||||
&__pagination {
|
&__pagination {
|
||||||
display: block;
|
display: block;
|
||||||
margin-top: var(--digi--layout--gutter);
|
margin-top: var(--digi--layout--gutter);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
||||||
import { Report } from '@msfa-models/reports.model';
|
import { Report } from '@msfa-models/report.model';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'msfa-reports-list',
|
selector: 'msfa-reports-list',
|
||||||
@@ -20,7 +20,7 @@ export class ReportsListComponent {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Inskickad datum',
|
label: 'Inskickad datum',
|
||||||
key: 'sendDate',
|
key: 'date',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Status',
|
label: 'Status',
|
||||||
@@ -29,7 +29,7 @@ export class ReportsListComponent {
|
|||||||
];
|
];
|
||||||
|
|
||||||
get currentPage(): number {
|
get currentPage(): number {
|
||||||
return this.paginationMeta.page;
|
return this.paginationMeta?.page;
|
||||||
}
|
}
|
||||||
|
|
||||||
get totalPage(): number {
|
get totalPage(): number {
|
||||||
@@ -37,19 +37,19 @@ export class ReportsListComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get count(): number {
|
get count(): number {
|
||||||
return this.paginationMeta.count;
|
return this.paginationMeta?.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
get currentResultStart(): number {
|
get currentResultStart(): number {
|
||||||
return (this.currentPage - 1) * this.paginationMeta.limit + 1;
|
return (this.currentPage - 1) * this.paginationMeta?.limit + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
get currentResultEnd(): number {
|
get currentResultEnd(): number {
|
||||||
const end = this.currentResultStart + this.paginationMeta.limit - 1;
|
const end = this.currentResultStart + this.paginationMeta?.limit - 1;
|
||||||
return end < this.count ? end : this.count;
|
return end < this.count ? end : this.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
setNewPage(page: number): void {
|
emitNewPage(page: number): void {
|
||||||
this.paginated.emit(page);
|
this.paginated.emit(page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<div *ngIf="reportsData$ | async as reportsData; else loadingRef" class="deltagare-tab-reports">
|
<div class="deltagare-tab-reports">
|
||||||
<form [formGroup]="reportPickerFormGroup" class="deltagare-tab-reports__form">
|
<form [formGroup]="reportPickerFormGroup" class="deltagare-tab-reports__form">
|
||||||
<h3>Skapa ny rapport</h3>
|
<h3>Skapa ny rapport</h3>
|
||||||
<p>Här kan du skicka rapporter om deltagaren till arbetsförmedlingen.</p>
|
<p>Här kan du skicka rapporter om deltagaren till arbetsförmedlingen.</p>
|
||||||
@@ -16,25 +16,26 @@
|
|||||||
Du måste välja en rapporttyp
|
Du måste välja en rapporttyp
|
||||||
</digi-form-validation-message>
|
</digi-form-validation-message>
|
||||||
</form>
|
</form>
|
||||||
<div
|
<div class="deltagare-tab-reports__cta-wrapper">
|
||||||
*ngIf="currentGenomforandeReferens$ | async as currentGenomforandeReferens"
|
|
||||||
class="deltagare-tab-reports__cta-wrapper"
|
|
||||||
>
|
|
||||||
<digi-ng-link-button
|
<digi-ng-link-button
|
||||||
(click)="onFormSubmitted($event, reportsFormControl.value, currentGenomforandeReferens)"
|
(click)="onFormSubmitted($event, reportsFormControl.value)"
|
||||||
afText="Skapa ny rapport"
|
afText="Skapa ny rapport"
|
||||||
></digi-ng-link-button>
|
></digi-ng-link-button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<ng-container *ngIf="reportsData; else loadingRef">
|
||||||
<h3>Inskickade rapporter</h3>
|
<h3>Inskickade rapporter</h3>
|
||||||
<msfa-reports-list
|
<msfa-reports-list
|
||||||
(paginated)="setNewPage($event)"
|
*ngIf="reportsData.data.length; else noReports"
|
||||||
[paginationMeta]="reportsData.meta"
|
|
||||||
[reports]="reportsData.data"
|
[reports]="reportsData.data"
|
||||||
|
[paginationMeta]="reportsData.meta"
|
||||||
|
(paginated)="emitNewPage($event)"
|
||||||
></msfa-reports-list>
|
></msfa-reports-list>
|
||||||
</div>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<ng-template #noReports>
|
||||||
|
<p>Inga rapporter finns registrerad.</p>
|
||||||
|
</ng-template>
|
||||||
<ng-template #loadingRef>
|
<ng-template #loadingRef>
|
||||||
<msfa-loader type="padded"></msfa-loader>
|
<msfa-loader type="padded"></msfa-loader>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { FormSelectItem } from '@af/digi-ng/_form/form-select';
|
import { FormSelectItem } from '@af/digi-ng/_form/form-select';
|
||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
|
import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { ReportsData } from '@msfa-models/reports.model';
|
import { ReportsData } from '@msfa-models/report.model';
|
||||||
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
|
import { RequiredValidator } from '@msfa-utils/validators/required.validator';
|
||||||
import { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';
|
|
||||||
import { DeltagareCardService } from '../../deltagare-card.service';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'msfa-deltagare-tab-reports',
|
selector: 'msfa-deltagare-tab-reports',
|
||||||
@@ -14,80 +12,50 @@ import { DeltagareCardService } from '../../deltagare-card.service';
|
|||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class DeltagareTabReportsComponent {
|
export class DeltagareTabReportsComponent {
|
||||||
|
@Input() reportsData: ReportsData;
|
||||||
|
@Input() genomforandeReferens: number;
|
||||||
|
@Output() reportsPaginated = new EventEmitter<number>();
|
||||||
|
|
||||||
readonly reportsFormControlName = 'reports';
|
readonly reportsFormControlName = 'reports';
|
||||||
public currentGenomforandeReferens$: Observable<number> = this.activatedRoute.params.pipe(
|
|
||||||
map(params => params.genomforandeReferens as string),
|
|
||||||
distinctUntilChanged(
|
|
||||||
([prevGenomforandeReferens], [currGenomforandeReferens]) => prevGenomforandeReferens === currGenomforandeReferens
|
|
||||||
),
|
|
||||||
map(genomforandeReferens => +genomforandeReferens)
|
|
||||||
);
|
|
||||||
reportPickerFormGroup: FormGroup = this.formBuilder.group({
|
reportPickerFormGroup: FormGroup = this.formBuilder.group({
|
||||||
// eslint-disable-next-line @typescript-eslint/unbound-method
|
reports: this.formBuilder.control('', [RequiredValidator('Rapporttyp')]),
|
||||||
reports: this.formBuilder.control('', [Validators.required]),
|
|
||||||
});
|
});
|
||||||
selectableReportTypes: Array<FormSelectItem> = [
|
selectableReportTypes: Array<FormSelectItem> = [
|
||||||
{ name: 'Avvikelse', value: 'avvikelse' },
|
{ name: 'Avvikelse', value: 'avvikelse' },
|
||||||
{ name: 'Gemensam Planering', value: 'planering' },
|
{ name: 'Gemensam Planering', value: 'planering' },
|
||||||
];
|
];
|
||||||
selectedReportType: FormSelectItem;
|
|
||||||
private _limit$ = new BehaviorSubject<number>(20);
|
|
||||||
private _page$ = new BehaviorSubject<number>(1);
|
|
||||||
reportsData$: Observable<ReportsData> = combineLatest([
|
|
||||||
this.currentGenomforandeReferens$,
|
|
||||||
this._limit$,
|
|
||||||
this._page$,
|
|
||||||
]).pipe(
|
|
||||||
switchMap(([genomforandeReferens, limit, page]) =>
|
|
||||||
this.deltagareCardService.fetchReports$(limit, page, genomforandeReferens)
|
|
||||||
),
|
|
||||||
shareReplay(1)
|
|
||||||
);
|
|
||||||
private _type$ = new BehaviorSubject<FormSelectItem>(null);
|
|
||||||
|
|
||||||
constructor(
|
constructor(private formBuilder: FormBuilder, private router: Router) {}
|
||||||
private activatedRoute: ActivatedRoute,
|
|
||||||
private deltagareCardService: DeltagareCardService,
|
|
||||||
private formBuilder: FormBuilder,
|
|
||||||
private router: Router
|
|
||||||
) {}
|
|
||||||
|
|
||||||
get reportsFormControl(): AbstractControl | null {
|
get reportsFormControl(): AbstractControl | null {
|
||||||
return this.reportPickerFormGroup?.get(this.reportsFormControlName);
|
return this.reportPickerFormGroup?.get(this.reportsFormControlName);
|
||||||
}
|
}
|
||||||
|
|
||||||
onFormSubmitted(event: Event, reportType: string, genomforandeReferens: number): void {
|
onFormSubmitted(event: Event, reportType: string): void {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
this.reportsFormControl.markAsTouched();
|
||||||
|
|
||||||
|
if (this.reportsFormControl.invalid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (reportType) {
|
switch (reportType) {
|
||||||
case 'planering':
|
case 'planering':
|
||||||
if (this.reportsFormControl.valid) {
|
void this.router.navigateByUrl(`/deltagare/${this.genomforandeReferens}/gemensam-planering`);
|
||||||
void this.router.navigate([`/deltagare/${genomforandeReferens}/gemensam-planering`]);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'avvikelse':
|
case 'avvikelse':
|
||||||
if (this.reportsFormControl.valid) {
|
void this.router.navigateByUrl(`/deltagare/${this.genomforandeReferens}/avvikelserapport`);
|
||||||
void this.router.navigate([`/deltagare/${genomforandeReferens}/avvikelserapport`]);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.reportsFormControl.markAsTouched();
|
|
||||||
|
|
||||||
if (!this.selectableReportTypes || this.reportPickerFormGroup.invalid) {
|
if (!this.selectableReportTypes || this.reportPickerFormGroup.invalid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectedReportType = this.selectableReportTypes.find(report => {
|
|
||||||
return report.value === this.reportsFormControl.value;
|
|
||||||
});
|
|
||||||
|
|
||||||
this._type$.next(selectedReportType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setNewPage(page: number): void {
|
emitNewPage(page: number): void {
|
||||||
this._page$.next(page);
|
this.reportsPaginated.emit(page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,11 @@
|
|||||||
*ngIf="reportingTabVisible"
|
*ngIf="reportingTabVisible"
|
||||||
>
|
>
|
||||||
<ng-container *ngIf="activeTab === '1'">
|
<ng-container *ngIf="activeTab === '1'">
|
||||||
<msfa-deltagare-tab-reports></msfa-deltagare-tab-reports>
|
<msfa-deltagare-tab-reports
|
||||||
|
[reportsData]="reportsData$ | async"
|
||||||
|
[genomforandeReferens]="currentGenomforandeReferens$ | async"
|
||||||
|
(reportsPaginated)="setNewPage($event)"
|
||||||
|
></msfa-deltagare-tab-reports>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</digi-navigation-tab>
|
</digi-navigation-tab>
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { ActivatedRoute } from '@angular/router';
|
|||||||
import { Feature } from '@msfa-enums/feature.enum';
|
import { Feature } from '@msfa-enums/feature.enum';
|
||||||
import { RoleEnum } from '@msfa-enums/role.enum';
|
import { RoleEnum } from '@msfa-enums/role.enum';
|
||||||
import { environment } from '@msfa-environment';
|
import { environment } from '@msfa-environment';
|
||||||
|
import { PaginationParams } from '@msfa-models/api/params.model';
|
||||||
import { Avrop } from '@msfa-models/avrop.model';
|
import { Avrop } from '@msfa-models/avrop.model';
|
||||||
import { ContactInformation } from '@msfa-models/contact-information.model';
|
import { ContactInformation } from '@msfa-models/contact-information.model';
|
||||||
import { Disability } from '@msfa-models/disability.model';
|
import { Disability } from '@msfa-models/disability.model';
|
||||||
@@ -10,6 +11,7 @@ import { DriversLicense } from '@msfa-models/drivers-license.model';
|
|||||||
import { Education } from '@msfa-models/education.model';
|
import { Education } from '@msfa-models/education.model';
|
||||||
import { Handledare } from '@msfa-models/handledare.model';
|
import { Handledare } from '@msfa-models/handledare.model';
|
||||||
import { HighestEducation } from '@msfa-models/highest-education.model';
|
import { HighestEducation } from '@msfa-models/highest-education.model';
|
||||||
|
import { ReportsData } from '@msfa-models/report.model';
|
||||||
import { Role } from '@msfa-models/role.model';
|
import { Role } from '@msfa-models/role.model';
|
||||||
import { WorkExperience } from '@msfa-models/work-experience.model';
|
import { WorkExperience } from '@msfa-models/work-experience.model';
|
||||||
import { UserService } from '@msfa-services/api/user.service';
|
import { UserService } from '@msfa-services/api/user.service';
|
||||||
@@ -25,6 +27,12 @@ import { DeltagareCardService } from './deltagare-card.service';
|
|||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class DeltagareCardComponent {
|
export class DeltagareCardComponent {
|
||||||
|
private _reportsParams$ = new BehaviorSubject<PaginationParams>({ page: 1, limit: 20 });
|
||||||
|
private _activeFeatures: Feature[] = environment.activeFeatures;
|
||||||
|
private _activeTab$ = new BehaviorSubject<string>('0');
|
||||||
|
activeTab$: Observable<string> = this._activeTab$.asObservable();
|
||||||
|
private _userRoles: Role[] = this.userService.userRolesSnapshot;
|
||||||
|
|
||||||
currentGenomforandeReferens$: Observable<number> = this.activatedRoute.params.pipe(
|
currentGenomforandeReferens$: Observable<number> = this.activatedRoute.params.pipe(
|
||||||
map(params => params.genomforandeReferens as string),
|
map(params => params.genomforandeReferens as string),
|
||||||
distinctUntilChanged(
|
distinctUntilChanged(
|
||||||
@@ -69,6 +77,12 @@ export class DeltagareCardComponent {
|
|||||||
distinctUntilChanged((prevAvrop, currAvrop) => prevAvrop.id === currAvrop.id),
|
distinctUntilChanged((prevAvrop, currAvrop) => prevAvrop.id === currAvrop.id),
|
||||||
switchMap(avropInformation => this.handledareService.fetchAvailableHandledare$([avropInformation.id]))
|
switchMap(avropInformation => this.handledareService.fetchAvailableHandledare$([avropInformation.id]))
|
||||||
);
|
);
|
||||||
|
reportsData$: Observable<ReportsData> = combineLatest([this._reportsParams$, this.currentGenomforandeReferens$]).pipe(
|
||||||
|
switchMap(([params, genomforandeReferens]) =>
|
||||||
|
this.deltagareCardService.fetchReports$(genomforandeReferens, params)
|
||||||
|
),
|
||||||
|
shareReplay(1)
|
||||||
|
);
|
||||||
tab0Loading$: Observable<boolean> = combineLatest([this.contactInformation$, this.avropInformation$]).pipe(
|
tab0Loading$: Observable<boolean> = combineLatest([this.contactInformation$, this.avropInformation$]).pipe(
|
||||||
map(([contactInformation, avropInformation]) => !(contactInformation && avropInformation)),
|
map(([contactInformation, avropInformation]) => !(contactInformation && avropInformation)),
|
||||||
startWith(true)
|
startWith(true)
|
||||||
@@ -93,10 +107,6 @@ export class DeltagareCardComponent {
|
|||||||
map(([disabilities, avropInformation, workLanguages]) => !(disabilities && avropInformation && workLanguages)),
|
map(([disabilities, avropInformation, workLanguages]) => !(disabilities && avropInformation && workLanguages)),
|
||||||
startWith(true)
|
startWith(true)
|
||||||
);
|
);
|
||||||
private _activeFeatures: Feature[] = environment.activeFeatures;
|
|
||||||
private _activeTab$ = new BehaviorSubject<string>('0');
|
|
||||||
activeTab$: Observable<string> = this._activeTab$.asObservable();
|
|
||||||
private _userRoles: Role[] = this.userService.userRolesSnapshot;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private activatedRoute: ActivatedRoute,
|
private activatedRoute: ActivatedRoute,
|
||||||
@@ -136,4 +146,8 @@ export class DeltagareCardComponent {
|
|||||||
setActiveTab(tab: number): void {
|
setActiveTab(tab: number): void {
|
||||||
this._activeTab$.next(tab.toString());
|
this._activeTab$.next(tab.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setNewPage(page: number): void {
|
||||||
|
this._reportsParams$.next({ ...this._reportsParams$.getValue(), page });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
import { PaginationParams } from '@msfa-models/api/params.model';
|
||||||
import { Avrop } from '@msfa-models/avrop.model';
|
import { Avrop } from '@msfa-models/avrop.model';
|
||||||
import { ContactInformation } from '@msfa-models/contact-information.model';
|
import { ContactInformation } from '@msfa-models/contact-information.model';
|
||||||
import { Disability } from '@msfa-models/disability.model';
|
import { Disability } from '@msfa-models/disability.model';
|
||||||
import { DriversLicense } from '@msfa-models/drivers-license.model';
|
import { DriversLicense } from '@msfa-models/drivers-license.model';
|
||||||
import { Education } from '@msfa-models/education.model';
|
import { Education } from '@msfa-models/education.model';
|
||||||
import { HighestEducation } from '@msfa-models/highest-education.model';
|
import { HighestEducation } from '@msfa-models/highest-education.model';
|
||||||
import { ReportsData } from '@msfa-models/reports.model';
|
import { ReportsData } from '@msfa-models/report.model';
|
||||||
import { WorkExperience } from '@msfa-models/work-experience.model';
|
import { WorkExperience } from '@msfa-models/work-experience.model';
|
||||||
import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service';
|
import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service';
|
||||||
import { HandledareService } from '@msfa-services/handledare.service';
|
import { HandledareService } from '@msfa-services/handledare.service';
|
||||||
@@ -52,7 +53,7 @@ export class DeltagareCardService {
|
|||||||
return this.deltagareApiService.fetchDisabilities$(genomforandeReferens);
|
return this.deltagareApiService.fetchDisabilities$(genomforandeReferens);
|
||||||
}
|
}
|
||||||
|
|
||||||
public fetchReports$(limit: number, page: number, genomforandeReferens: number): Observable<ReportsData> {
|
public fetchReports$(genomforandeReferens: number, params: PaginationParams): Observable<ReportsData> {
|
||||||
return this.deltagareApiService.fetchReports$(limit, page, genomforandeReferens);
|
return this.deltagareApiService.fetchReports$(genomforandeReferens, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
export enum ReportType {
|
export enum ReportType {
|
||||||
FRANVARO = 'franvaro',
|
FRANVARO = 'franvaro',
|
||||||
AVVIKELSE = 'avvikelse',
|
AVVIKELSE = 'avvikelse',
|
||||||
|
GemensamPlanering = 'Gemensam planering',
|
||||||
|
Franvaro = 'Frånvaro',
|
||||||
|
Avvikelse = 'Avvikelse',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
|
import { ReportType } from '@msfa-enums/report-type.enum';
|
||||||
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
||||||
import { Report } from '@msfa-models/reports.model';
|
|
||||||
|
|
||||||
export interface ReportResponse {
|
export interface ReportResponse {
|
||||||
data: Report[];
|
id: string;
|
||||||
|
genomforandeReferens: string;
|
||||||
|
typAvRapport: ReportType;
|
||||||
|
inskickadDatum: string;
|
||||||
|
statusRapport: string;
|
||||||
|
ciamUserId: string;
|
||||||
|
}
|
||||||
|
export interface ReportsDataResponse {
|
||||||
|
data: ReportResponse[];
|
||||||
meta: PaginationMeta;
|
meta: PaginationMeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ReportsApiResponseData {
|
|
||||||
type: string;
|
|
||||||
sendDate: Date;
|
|
||||||
status: string;
|
|
||||||
}
|
|
||||||
|
|||||||
29
apps/mina-sidor-fa/src/app/shared/models/report.model.ts
Normal file
29
apps/mina-sidor-fa/src/app/shared/models/report.model.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { ReportType } from '@msfa-enums/report-type.enum';
|
||||||
|
import { ReportResponse } from './api/report.response.model';
|
||||||
|
import { PaginationMeta } from './pagination-meta.model';
|
||||||
|
|
||||||
|
export interface Report {
|
||||||
|
id: string;
|
||||||
|
genomforandeReferens: string;
|
||||||
|
type: string;
|
||||||
|
date: Date;
|
||||||
|
status: string;
|
||||||
|
ciamUserId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ReportsData {
|
||||||
|
data: Report[];
|
||||||
|
meta: PaginationMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function mapResponseToReport(data: ReportResponse): Report {
|
||||||
|
const { id, genomforandeReferens, typAvRapport, inskickadDatum, statusRapport, ciamUserId } = data;
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
genomforandeReferens,
|
||||||
|
type: (ReportType[typAvRapport] as string) || 'Okänd',
|
||||||
|
date: new Date(inskickadDatum),
|
||||||
|
status: statusRapport,
|
||||||
|
ciamUserId,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import { ReportsApiResponseData } from './api/report.response.model';
|
|
||||||
import { PaginationMeta } from './pagination-meta.model';
|
|
||||||
|
|
||||||
export interface Report {
|
|
||||||
type: string;
|
|
||||||
sendDate: Date;
|
|
||||||
status: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ReportsData {
|
|
||||||
data: Report[];
|
|
||||||
meta: PaginationMeta;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function mapReportsResponseToReport(data: ReportsApiResponseData): Report {
|
|
||||||
const { type, sendDate, status } = data;
|
|
||||||
return {
|
|
||||||
type,
|
|
||||||
sendDate,
|
|
||||||
status
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,8 @@ import { DisabilityResponse } from '@msfa-models/api/disability.response.model';
|
|||||||
import { DriversLicenseResponse } from '@msfa-models/api/drivers-license.response.model';
|
import { DriversLicenseResponse } from '@msfa-models/api/drivers-license.response.model';
|
||||||
import { EducationsResponse } from '@msfa-models/api/educations.response.model';
|
import { EducationsResponse } from '@msfa-models/api/educations.response.model';
|
||||||
import { HighestEducationResponse } from '@msfa-models/api/highest-education.response.model';
|
import { HighestEducationResponse } from '@msfa-models/api/highest-education.response.model';
|
||||||
import { DeltagareParams, Params } from '@msfa-models/api/params.model';
|
import { DeltagareParams, PaginationParams, Params } from '@msfa-models/api/params.model';
|
||||||
|
import { ReportsDataResponse } from '@msfa-models/api/report.response.model';
|
||||||
import { TranslatorResponse } from '@msfa-models/api/translator.response.model';
|
import { TranslatorResponse } from '@msfa-models/api/translator.response.model';
|
||||||
import { WorkExperiencesResponse } from '@msfa-models/api/work-experiences.response.model';
|
import { WorkExperiencesResponse } from '@msfa-models/api/work-experiences.response.model';
|
||||||
import { WorkLanguagesResponse } from '@msfa-models/api/work-languages.response.model';
|
import { WorkLanguagesResponse } from '@msfa-models/api/work-languages.response.model';
|
||||||
@@ -20,7 +21,7 @@ import { DriversLicense, mapResponseToDriversLicense } from '@msfa-models/driver
|
|||||||
import { Education, mapResponseToEducation } from '@msfa-models/education.model';
|
import { Education, mapResponseToEducation } from '@msfa-models/education.model';
|
||||||
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
|
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
|
||||||
import { HighestEducation, mapResponseToHighestEducation } from '@msfa-models/highest-education.model';
|
import { HighestEducation, mapResponseToHighestEducation } from '@msfa-models/highest-education.model';
|
||||||
import { ReportsData } from '@msfa-models/reports.model';
|
import { mapResponseToReport, ReportsData } from '@msfa-models/report.model';
|
||||||
import { mapResponseToWorkExperience, WorkExperience } from '@msfa-models/work-experience.model';
|
import { mapResponseToWorkExperience, WorkExperience } from '@msfa-models/work-experience.model';
|
||||||
import { sortFromToDates } from '@msfa-utils/sort.util';
|
import { sortFromToDates } from '@msfa-utils/sort.util';
|
||||||
import { BehaviorSubject, Observable, of } from 'rxjs';
|
import { BehaviorSubject, Observable, of } from 'rxjs';
|
||||||
@@ -31,6 +32,7 @@ import { catchError, map } from 'rxjs/operators';
|
|||||||
})
|
})
|
||||||
export class DeltagareApiService {
|
export class DeltagareApiService {
|
||||||
private _apiBaseUrl = `${environment.api.url}/deltagare`;
|
private _apiBaseUrl = `${environment.api.url}/deltagare`;
|
||||||
|
private _apiReportUrl = `${environment.api.url}/handlingar`;
|
||||||
private _deltagareLoading$ = new BehaviorSubject<boolean>(false);
|
private _deltagareLoading$ = new BehaviorSubject<boolean>(false);
|
||||||
public deltagareLoading$: Observable<boolean> = this._deltagareLoading$.asObservable();
|
public deltagareLoading$: Observable<boolean> = this._deltagareLoading$.asObservable();
|
||||||
private _showUnauthorizedError$ = new BehaviorSubject<boolean>(false);
|
private _showUnauthorizedError$ = new BehaviorSubject<boolean>(false);
|
||||||
@@ -75,28 +77,24 @@ export class DeltagareApiService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public fetchReports$(limit: number, page: number, genomforandeReferens: number): Observable<ReportsData> {
|
public fetchReports$(genomforandeReferens: number, paginationParams: PaginationParams): Observable<ReportsData> {
|
||||||
return of({ data: [], meta: null });
|
const { page, limit } = paginationParams;
|
||||||
|
const params: { [param: string]: string | string[] } = {
|
||||||
|
genomforandeReferens: genomforandeReferens.toString(),
|
||||||
|
page: page.toString(),
|
||||||
|
limit: limit.toString(),
|
||||||
|
};
|
||||||
|
|
||||||
// TODO: When the API/Mock-API has implemented the endpoint, we can remove use following code
|
return this.httpClient
|
||||||
// to make API-requests.
|
.get<ReportsDataResponse>(`${this._apiReportUrl}`, { params })
|
||||||
|
.pipe(
|
||||||
// const params: { [param: string]: string | string[] } = {
|
map(({ data, meta }) => ({ data: data.map(report => mapResponseToReport(report)), meta })),
|
||||||
// id: genomforandeReferens.toString(),
|
catchError((error: Error) => {
|
||||||
// limit: limit.toString(),
|
throw new CustomError(
|
||||||
// page: page.toString(),
|
errorToCustomError({ ...error, message: `Kunde inte hämta rapporter.\n\n${error.message}` })
|
||||||
// };
|
);
|
||||||
|
})
|
||||||
// return this.httpClient
|
);
|
||||||
// .get<ReportResponse>(`${this._apiBaseUrl}/report`, {
|
|
||||||
// params,
|
|
||||||
// })
|
|
||||||
// .pipe(
|
|
||||||
// map(({ data, meta }) => {
|
|
||||||
// data.sort((reportA, reportB) => (+reportA.sendDate < +reportB.sendDate ? 1 : -1));
|
|
||||||
// return { data: data.map(report => mapReportsResponseToReport(report)), meta };
|
|
||||||
// })
|
|
||||||
// );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public fetchContactInformation$(genomforandeReferens: number): Observable<ContactInformation> {
|
public fetchContactInformation$(genomforandeReferens: number): Observable<ContactInformation> {
|
||||||
|
|||||||
Reference in New Issue
Block a user