Merge branch 'next' into develop
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
<div class="deltagare-list">
|
<div class="deltagare-list">
|
||||||
|
<msfa-loader *ngIf="deltagareLoading" type="absolute"></msfa-loader>
|
||||||
<digi-table af-variation="secondary">
|
<digi-table af-variation="secondary">
|
||||||
<table class="deltagare-list__table">
|
<table class="deltagare-list__table">
|
||||||
<caption class="msfa__a11y-sr-only">
|
<caption class="msfa__a11y-sr-only">
|
||||||
@@ -77,6 +78,7 @@
|
|||||||
*ngIf="totalPage > 1"
|
*ngIf="totalPage > 1"
|
||||||
class="deltagare-list__pagination"
|
class="deltagare-list__pagination"
|
||||||
[afTotalPages]="totalPage"
|
[afTotalPages]="totalPage"
|
||||||
|
[afInitActivePage]="currentPage"
|
||||||
[afCurrentResultStart]="currentResultStart"
|
[afCurrentResultStart]="currentResultStart"
|
||||||
[afCurrentResultEnd]="currentResultEnd"
|
[afCurrentResultEnd]="currentResultEnd"
|
||||||
[afTotalResults]="count"
|
[afTotalResults]="count"
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
@import 'variables/gutters';
|
@import 'variables/gutters';
|
||||||
|
@import 'variables/z-index';
|
||||||
|
|
||||||
.deltagare-list {
|
.deltagare-list {
|
||||||
|
position: relative;
|
||||||
|
z-index: $msfa__z-index-default;
|
||||||
|
|
||||||
&__table {
|
&__table {
|
||||||
font-size: var(--digi--typography--font-size--s);
|
font-size: var(--digi--typography--font-size--s);
|
||||||
@@ -16,7 +19,8 @@
|
|||||||
border-width: 0;
|
border-width: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding: var(--digi--layout--gutter--s) $digi--layout--gutter--l var(--digi--layout--gutter--s) var(--digi--layout--gutter);
|
padding: var(--digi--layout--gutter--s) $digi--layout--gutter--l var(--digi--layout--gutter--s)
|
||||||
|
var(--digi--layout--gutter);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
font-weight: inherit;
|
font-weight: inherit;
|
||||||
@@ -46,5 +50,4 @@
|
|||||||
--digi-icon--height: 1rem;
|
--digi-icon--height: 1rem;
|
||||||
--digi-icon--width: 1rem;
|
--digi-icon--width: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
|
import { ErrorSeverity } from '@msfa-enums/error-severity.enum';
|
||||||
|
import { IconType } from '@msfa-enums/icon-type.enum';
|
||||||
import { SortOrder } from '@msfa-enums/sort-order.enum';
|
import { SortOrder } from '@msfa-enums/sort-order.enum';
|
||||||
import { DeltagareCompact } from '@msfa-models/deltagare.model';
|
import { DeltagareCompact } from '@msfa-models/deltagare.model';
|
||||||
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
||||||
import { Sort } from '@msfa-models/sort.model';
|
import { Sort } from '@msfa-models/sort.model';
|
||||||
import { IconType } from '@msfa-enums/icon-type.enum';
|
|
||||||
import { ErrorSeverity } from '@msfa-enums/error-severity.enum';
|
|
||||||
import { BehaviorSubject } from 'rxjs';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
@@ -17,6 +17,7 @@ import { map } from 'rxjs/operators';
|
|||||||
export class DeltagareListComponent {
|
export class DeltagareListComponent {
|
||||||
@Input() deltagare: DeltagareCompact[];
|
@Input() deltagare: DeltagareCompact[];
|
||||||
@Input() paginationMeta: PaginationMeta;
|
@Input() paginationMeta: PaginationMeta;
|
||||||
|
@Input() deltagareLoading: boolean;
|
||||||
@Input() sort: Sort<keyof DeltagareCompact>;
|
@Input() sort: Sort<keyof DeltagareCompact>;
|
||||||
@Output() sorted = new EventEmitter<keyof DeltagareCompact>();
|
@Output() sorted = new EventEmitter<keyof DeltagareCompact>();
|
||||||
@Output() paginated = new EventEmitter<number>();
|
@Output() paginated = new EventEmitter<number>();
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
|
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { DeltagareListComponent } from './deltagare-list.component';
|
|
||||||
import { IconModule } from '@msfa-shared/components/icon/icon.module';
|
import { IconModule } from '@msfa-shared/components/icon/icon.module';
|
||||||
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
import { LoaderModule } from '@msfa-shared/components/loader/loader.module';
|
||||||
import { DeltagareListHandelserDialogComponent } from './deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component';
|
import { DeltagareListHandelserDialogComponent } from './deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component';
|
||||||
|
import { DeltagareListComponent } from './deltagare-list.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
declarations: [DeltagareListComponent, DeltagareListHandelserDialogComponent],
|
declarations: [DeltagareListComponent, DeltagareListHandelserDialogComponent],
|
||||||
imports: [CommonModule, RouterModule, IconModule, DigiNgDialogModule],
|
imports: [CommonModule, RouterModule, IconModule, LoaderModule, DigiNgDialogModule],
|
||||||
exports: [DeltagareListComponent],
|
exports: [DeltagareListComponent],
|
||||||
})
|
})
|
||||||
export class DeltagareListModule {}
|
export class DeltagareListModule {}
|
||||||
|
|||||||
@@ -17,16 +17,15 @@
|
|||||||
(afOnChange)="setOnlyMyDeltagare($event.detail.target.checked)"
|
(afOnChange)="setOnlyMyDeltagare($event.detail.target.checked)"
|
||||||
></digi-form-checkbox>
|
></digi-form-checkbox>
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="(deltagareLoading$ | async) === false; else loadingRef">
|
<msfa-deltagare-list
|
||||||
<msfa-deltagare-list
|
*ngIf="allDeltagareData.data.length; else noDeltagare"
|
||||||
*ngIf="allDeltagareData.data.length; else noDeltagare"
|
[deltagare]="allDeltagareData.data"
|
||||||
[deltagare]="allDeltagareData.data"
|
[paginationMeta]="allDeltagareData.meta"
|
||||||
[paginationMeta]="allDeltagareData.meta"
|
[deltagareLoading]="deltagareLoading$ | async"
|
||||||
[sort]="sort$ | async"
|
[sort]="sort$ | async"
|
||||||
(sorted)="handleDeltagareSort($event)"
|
(sorted)="handleDeltagareSort($event)"
|
||||||
(paginated)="setNewPage($event)"
|
(paginated)="setNewPage($event)"
|
||||||
></msfa-deltagare-list>
|
></msfa-deltagare-list>
|
||||||
</ng-container>
|
|
||||||
</section>
|
</section>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</digi-typography>
|
</digi-typography>
|
||||||
@@ -37,7 +36,7 @@
|
|||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template #noDeltagare>
|
<ng-template #noDeltagare>
|
||||||
<p>
|
<p *ngIf="(deltagareLoading$ | async) === false">
|
||||||
Inga deltagare hittades{{(onlyMyDeltagare$ | async) ? '. Bocka ur "Visa endast mina tilldelade deltagare" för att se
|
Inga deltagare hittades{{(onlyMyDeltagare$ | async) ? '. Bocka ur "Visa endast mina tilldelade deltagare" för att se
|
||||||
deltagare som tillhör din organisation.' : ' som tillhör din organisation.' }}
|
deltagare som tillhör din organisation.' : ' som tillhör din organisation.' }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -1,3 +1,24 @@
|
|||||||
|
import { SortOrder } from '@msfa-enums/sort-order.enum';
|
||||||
|
import { DeltagareCompact } from '@msfa-models/deltagare.model';
|
||||||
|
import { EmployeeCompactResponse } from './employee.response.model';
|
||||||
|
|
||||||
export interface Params {
|
export interface Params {
|
||||||
[param: string]: string | string[];
|
[param: string]: string | string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface PaginationParams {
|
||||||
|
page: number;
|
||||||
|
limit: number;
|
||||||
|
order: SortOrder;
|
||||||
|
search?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DeltagareParams extends PaginationParams {
|
||||||
|
sort: keyof DeltagareCompact;
|
||||||
|
onlyMyDeltagare: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface EmployeeParams extends PaginationParams {
|
||||||
|
sort: keyof EmployeeCompactResponse;
|
||||||
|
onlyEmployeesWithoutAuthorization: boolean;
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,20 +8,19 @@ 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 { Params } from '@msfa-models/api/params.model';
|
import { DeltagareParams, Params } from '@msfa-models/api/params.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';
|
||||||
import { Avrop, mapAvropResponseToAvrop } from '@msfa-models/avrop.model';
|
import { Avrop, mapAvropResponseToAvrop } from '@msfa-models/avrop.model';
|
||||||
import { ContactInformation, mapResponseToContactInformation } from '@msfa-models/contact-information.model';
|
import { ContactInformation, mapResponseToContactInformation } from '@msfa-models/contact-information.model';
|
||||||
import { DeltagareCompact, DeltagareCompactData, mapResponseToDeltagareCompact } from '@msfa-models/deltagare.model';
|
import { DeltagareCompactData, mapResponseToDeltagareCompact } from '@msfa-models/deltagare.model';
|
||||||
import { Disability, mapResponseToDisability } from '@msfa-models/disability.model';
|
import { Disability, mapResponseToDisability } from '@msfa-models/disability.model';
|
||||||
import { DriversLicense, mapResponseToDriversLicense } from '@msfa-models/drivers-license.model';
|
import { DriversLicense, mapResponseToDriversLicense } from '@msfa-models/drivers-license.model';
|
||||||
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 { ReportsData } from '@msfa-models/reports.model';
|
||||||
import { Sort } from '@msfa-models/sort.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';
|
||||||
@@ -39,15 +38,11 @@ export class DeltagareApiService {
|
|||||||
|
|
||||||
constructor(private httpClient: HttpClient) {}
|
constructor(private httpClient: HttpClient) {}
|
||||||
|
|
||||||
public fetchAllDeltagare$(
|
public fetchAllDeltagare$(deltagareParams: DeltagareParams): Observable<DeltagareCompactData> {
|
||||||
limit: number,
|
const { sort, order, limit, page, onlyMyDeltagare } = deltagareParams;
|
||||||
page: number,
|
|
||||||
sort: Sort<keyof DeltagareCompact>,
|
|
||||||
onlyMyDeltagare?: boolean
|
|
||||||
): Observable<DeltagareCompactData> {
|
|
||||||
const params: Params = {
|
const params: Params = {
|
||||||
sort: sort.key as string,
|
sort,
|
||||||
order: sort.order as string,
|
order,
|
||||||
limit: limit.toString(),
|
limit: limit.toString(),
|
||||||
page: page.toString(),
|
page: page.toString(),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
EmployeeResponse,
|
EmployeeResponse,
|
||||||
EmployeesDataResponse,
|
EmployeesDataResponse,
|
||||||
} from '@msfa-models/api/employee.response.model';
|
} from '@msfa-models/api/employee.response.model';
|
||||||
import { Params } from '@msfa-models/api/params.model';
|
import { EmployeeParams, Params } from '@msfa-models/api/params.model';
|
||||||
import {
|
import {
|
||||||
Employee,
|
Employee,
|
||||||
EmployeesData,
|
EmployeesData,
|
||||||
@@ -23,15 +23,6 @@ import { ErrorService } from '@msfa-services/error.service';
|
|||||||
import { BehaviorSubject, combineLatest, Observable, of, throwError } from 'rxjs';
|
import { BehaviorSubject, combineLatest, Observable, of, throwError } from 'rxjs';
|
||||||
import { catchError, distinctUntilChanged, filter, map, switchMap, take, tap } from 'rxjs/operators';
|
import { catchError, distinctUntilChanged, filter, map, switchMap, take, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
interface EmployeeParams {
|
|
||||||
page: number;
|
|
||||||
limit: number;
|
|
||||||
sort: keyof EmployeeCompactResponse;
|
|
||||||
order: SortOrder;
|
|
||||||
search: string;
|
|
||||||
onlyEmployeesWithoutAuthorization: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root',
|
providedIn: 'root',
|
||||||
})
|
})
|
||||||
@@ -167,12 +158,10 @@ export class EmployeeService extends UnsubscribeDirective {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public setSort(sort: keyof EmployeeCompactResponse): void {
|
public setSort(sort: keyof EmployeeCompactResponse): void {
|
||||||
const currentParams = this._params$.getValue();
|
const params = this._params$.getValue();
|
||||||
const currentSort = currentParams.sort;
|
const order = params.sort === sort && params.order === SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;
|
||||||
const currentOrder = currentParams.order;
|
|
||||||
const order = currentSort === sort && currentOrder === SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;
|
|
||||||
|
|
||||||
this._params$.next({ ...this._params$.getValue(), sort, order });
|
this._params$.next({ ...params, sort, order });
|
||||||
}
|
}
|
||||||
|
|
||||||
public setPage(page: number): void {
|
public setPage(page: number): void {
|
||||||
|
|||||||
@@ -1,49 +1,51 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { SortOrder } from '@msfa-enums/sort-order.enum';
|
import { SortOrder } from '@msfa-enums/sort-order.enum';
|
||||||
|
import { DeltagareParams } from '@msfa-models/api/params.model';
|
||||||
import { DeltagareCompact, DeltagareCompactData } from '@msfa-models/deltagare.model';
|
import { DeltagareCompact, DeltagareCompactData } from '@msfa-models/deltagare.model';
|
||||||
import { Sort } from '@msfa-models/sort.model';
|
import { Sort } from '@msfa-models/sort.model';
|
||||||
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { switchMap } from 'rxjs/operators';
|
import { map, switchMap } from 'rxjs/operators';
|
||||||
import { DeltagareApiService } from './api/deltagare.api.service';
|
import { DeltagareApiService } from './api/deltagare.api.service';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root',
|
providedIn: 'root',
|
||||||
})
|
})
|
||||||
export class DeltagareService {
|
export class DeltagareService {
|
||||||
private _limit$ = new BehaviorSubject<number>(20);
|
private _params$ = new BehaviorSubject<DeltagareParams>({
|
||||||
private _page$ = new BehaviorSubject<number>(1);
|
page: 1,
|
||||||
private _sort$ = new BehaviorSubject<Sort<keyof DeltagareCompact>>({ key: 'fullName', order: SortOrder.ASC });
|
limit: 20,
|
||||||
public sort$: Observable<Sort<keyof DeltagareCompact>> = this._sort$.asObservable();
|
sort: 'fullName',
|
||||||
private _onlyMyDeltagare$ = new BehaviorSubject<boolean>(false);
|
order: SortOrder.ASC,
|
||||||
public onlyMyDeltagare$: Observable<boolean> = this._onlyMyDeltagare$.asObservable();
|
onlyMyDeltagare: false,
|
||||||
|
});
|
||||||
|
public sort$: Observable<Sort<keyof DeltagareCompact>> = this._params$.pipe(
|
||||||
|
map(({ sort, order }) => ({ key: sort, order }))
|
||||||
|
);
|
||||||
|
public onlyMyDeltagare$: Observable<boolean> = this._params$.pipe(map(({ onlyMyDeltagare }) => onlyMyDeltagare));
|
||||||
public showUnauthorizedError$: Observable<boolean> = this.deltagareApiService.showUnauthorizedError$;
|
public showUnauthorizedError$: Observable<boolean> = this.deltagareApiService.showUnauthorizedError$;
|
||||||
public deltagareLoading$: Observable<boolean> = this.deltagareApiService.deltagareLoading$;
|
public deltagareLoading$: Observable<boolean> = this.deltagareApiService.deltagareLoading$;
|
||||||
public allDeltagareData$: Observable<DeltagareCompactData> = combineLatest([
|
public allDeltagareData$: Observable<DeltagareCompactData> = this._params$.pipe(
|
||||||
this._limit$,
|
switchMap(params => this.deltagareApiService.fetchAllDeltagare$(params))
|
||||||
this._page$,
|
|
||||||
this._sort$,
|
|
||||||
this._onlyMyDeltagare$,
|
|
||||||
]).pipe(
|
|
||||||
switchMap(([limit, page, sort, onlyMyDeltagare]) =>
|
|
||||||
this.deltagareApiService.fetchAllDeltagare$(limit, page, sort, onlyMyDeltagare)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
constructor(private deltagareApiService: DeltagareApiService) {}
|
constructor(private deltagareApiService: DeltagareApiService) {}
|
||||||
|
|
||||||
public setSort(newSortKey: keyof DeltagareCompact): void {
|
public setSort(sort: keyof DeltagareCompact): void {
|
||||||
const currentSort = this._sort$.getValue();
|
const params = this._params$.getValue();
|
||||||
const order =
|
const order = params.sort === sort && params.order === SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;
|
||||||
currentSort.key === newSortKey && currentSort.order === SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;
|
|
||||||
|
|
||||||
this._sort$.next({ key: newSortKey, order });
|
this._params$.next({
|
||||||
|
...params,
|
||||||
|
sort,
|
||||||
|
order,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public setPage(page: number): void {
|
public setPage(page: number): void {
|
||||||
this._page$.next(page);
|
this._params$.next({ ...this._params$.getValue(), page });
|
||||||
}
|
}
|
||||||
|
|
||||||
public setOnlyMyDeltagare(value: boolean): void {
|
public setOnlyMyDeltagare(value: boolean): void {
|
||||||
this._onlyMyDeltagare$.next(value);
|
this._params$.next({ ...this._params$.getValue(), onlyMyDeltagare: value, page: 1 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,14 @@
|
|||||||
- **avrop:** Now showing spårnamn instead of spårkod inside avrop. [TV-691](https://jira.arbetsformedlingen.se/browse/TV-691)
|
- **avrop:** Now showing spårnamn instead of spårkod inside avrop. [TV-691](https://jira.arbetsformedlingen.se/browse/TV-691)
|
||||||
- **avrop:** Fixed error-state on handledare select. [TV-699](https://jira.arbetsformedlingen.se/browse/TV-699)
|
- **avrop:** Fixed error-state on handledare select. [TV-699](https://jira.arbetsformedlingen.se/browse/TV-699)
|
||||||
- **avrop:** Several bugfixes related to avrop. [TV-701](https://jira.arbetsformedlingen.se/browse/TV-701)
|
- **avrop:** Several bugfixes related to avrop. [TV-701](https://jira.arbetsformedlingen.se/browse/TV-701)
|
||||||
|
- **employees/deltagare:** Fixed issue with pagination inside employees and deltagare. [TV-676](https://jira.arbetsformedlingen.se/browse/TV-676)
|
||||||
|
- **deltagare:** Now handling undefined phonenumbers. [TV-696](https://jira.arbetsformedlingen.se/browse/TV-696)
|
||||||
|
- **avrop:** Text-changes to avrop. [TV-687](https://jira.arbetsformedlingen.se/browse/TV-687)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- **deltagare:** New column "Effekt" inside händelser. [TV-703](https://jira.arbetsformedlingen.se/browse/TV-703)
|
||||||
|
- **accessibility:** Added shortcomings to the tillgänglighetsredogörelsen. [TV-698](https://jira.arbetsformedlingen.se/browse/TV-698)
|
||||||
|
|
||||||
## [2.0.0](https://bitbucket.arbetsformedlingen.se/projects/tea/repos/mina-sidor-fa-web/compare/diff?targetBranch=refs%2Ftags%2Fv1.5.0&sourceBranch=refs%2Ftags%2Fv2.0.0) (2021-09-24)
|
## [2.0.0](https://bitbucket.arbetsformedlingen.se/projects/tea/repos/mina-sidor-fa-web/compare/diff?targetBranch=refs%2Ftags%2Fv1.5.0&sourceBranch=refs%2Ftags%2Fv2.0.0) (2021-09-24)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user