Updated avrop loading
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<msfa-layout>
|
<msfa-layout>
|
||||||
<section class="avrop" *ngIf="currentStep$ | async as currentStep; else: loadingRef">
|
<section class="avrop" *ngIf="currentStep$ | async as currentStep">
|
||||||
<digi-typography>
|
<digi-typography>
|
||||||
<header class="avrop__header">
|
<header class="avrop__header">
|
||||||
<h1>Nya deltagare</h1>
|
<h1>Nya deltagare</h1>
|
||||||
@@ -75,6 +75,7 @@
|
|||||||
[isSubmitted]="avropIsSubmitted$ | async"
|
[isSubmitted]="avropIsSubmitted$ | async"
|
||||||
[handledare]="selectedHandledare$ | async"
|
[handledare]="selectedHandledare$ | async"
|
||||||
[handledareConfirmed]="handledareConfirmed$ | async"
|
[handledareConfirmed]="handledareConfirmed$ | async"
|
||||||
|
[avropLoading]="avropLoading$ | async"
|
||||||
(selectionChanged)="updateSelectedAvrop($event)"
|
(selectionChanged)="updateSelectedAvrop($event)"
|
||||||
(paginated)="setNewPage($event)"
|
(paginated)="setNewPage($event)"
|
||||||
></msfa-avrop-list>
|
></msfa-avrop-list>
|
||||||
@@ -118,7 +119,7 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<ng-template #loadingRef>
|
<ng-template #loadingRef>
|
||||||
<digi-icon-spinner class="msfa__spinner" af-title="Laddar innehåll"></digi-icon-spinner>
|
<msfa-loader></msfa-loader>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<ng-template #noAvailabeHandledare>
|
<ng-template #noAvailabeHandledare>
|
||||||
<!-- lägg in lämpligt innehåll -->
|
<!-- lägg in lämpligt innehåll -->
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { Avrop, AvropCompactData } from '@msfa-models/avrop.model';
|
import { Avrop, AvropCompactData } from '@msfa-models/avrop.model';
|
||||||
import { Handledare } from '@msfa-models/handledare.model';
|
import { Handledare } from '@msfa-models/handledare.model';
|
||||||
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
|
|
||||||
import { AvropService } from '@msfa-services/avrop.service';
|
import { AvropService } from '@msfa-services/avrop.service';
|
||||||
|
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -25,6 +25,7 @@ export class AvropComponent {
|
|||||||
avropIsLocked$: Observable<boolean> = this.avropService.avropIsLocked$;
|
avropIsLocked$: Observable<boolean> = this.avropService.avropIsLocked$;
|
||||||
handledareConfirmed$: Observable<boolean> = this.avropService.handledareIsConfirmed$;
|
handledareConfirmed$: Observable<boolean> = this.avropService.handledareIsConfirmed$;
|
||||||
avropIsSubmitted$: Observable<boolean> = this.avropService.avropIsSubmitted$;
|
avropIsSubmitted$: Observable<boolean> = this.avropService.avropIsSubmitted$;
|
||||||
|
avropLoading$: Observable<boolean> = this.avropService.avropLoading$;
|
||||||
|
|
||||||
constructor(private avropService: AvropService) {}
|
constructor(private avropService: AvropService) {}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ 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 { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
|
import { LoaderModule } from '@msfa-shared/components/loader/loader.module';
|
||||||
import { AvropComponent } from './avrop.component';
|
import { AvropComponent } from './avrop.component';
|
||||||
import { AvropFiltersModule } from './components/avrop-filters/avrop-filters.module';
|
import { AvropFiltersModule } from './components/avrop-filters/avrop-filters.module';
|
||||||
import { AvropListModule } from './components/avrop-list/avrop-list.module';
|
import { AvropListModule } from './components/avrop-list/avrop-list.module';
|
||||||
@@ -19,6 +20,7 @@ import { AvropListModule } from './components/avrop-list/avrop-list.module';
|
|||||||
AvropFiltersModule,
|
AvropFiltersModule,
|
||||||
DigiNgProgressProgressbarModule,
|
DigiNgProgressProgressbarModule,
|
||||||
DigiNgSkeletonBaseModule,
|
DigiNgSkeletonBaseModule,
|
||||||
|
LoaderModule,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AvropModule {}
|
export class AvropModule {}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<div class="avrop-filters">
|
<div class="avrop-filters" *ngIf="filtersAreLoading$ | async; else loadingRef">
|
||||||
<div class="avrop-filters__filter-wrapper" *ngIf="availableTjanster$ | async; let availableTjanster; else loadingRef">
|
<div class="avrop-filters__filter-wrapper" *ngIf="availableTjanster$ | async as availableTjanster">
|
||||||
<msfa-multiselect
|
<msfa-multiselect
|
||||||
[multiselectTitle]="'Tjänster'"
|
[multiselectTitle]="'Tjänster'"
|
||||||
[availableOptions]="availableTjanster"
|
[availableOptions]="availableTjanster"
|
||||||
@@ -8,7 +8,10 @@
|
|||||||
(selectedOptionsChange)="updateSelectedTjanster($event)"
|
(selectedOptionsChange)="updateSelectedTjanster($event)"
|
||||||
></msfa-multiselect>
|
></msfa-multiselect>
|
||||||
</div>
|
</div>
|
||||||
<div class="avrop-filters__filter-wrapper" *ngIf="availableUtforandeVerksamheter$ | async; let availableUtforandeVerksamheter; else loadingRef">
|
<div
|
||||||
|
class="avrop-filters__filter-wrapper"
|
||||||
|
*ngIf="availableUtforandeVerksamheter$ | async as availableUtforandeVerksamheter"
|
||||||
|
>
|
||||||
<msfa-multiselect
|
<msfa-multiselect
|
||||||
[multiselectTitle]="'Utförande verksamheter'"
|
[multiselectTitle]="'Utförande verksamheter'"
|
||||||
confirmButtonText="Uppdatera filter"
|
confirmButtonText="Uppdatera filter"
|
||||||
@@ -18,7 +21,7 @@
|
|||||||
></msfa-multiselect>
|
></msfa-multiselect>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="avrop-filters__filter-wrapper" *ngIf="availableKommuner$ | async; let availableKommuner; else loadingRef">
|
<div class="avrop-filters__filter-wrapper" *ngIf="availableKommuner$ | async as availableKommuner">
|
||||||
<msfa-multiselect
|
<msfa-multiselect
|
||||||
[multiselectTitle]="'Kommuner'"
|
[multiselectTitle]="'Kommuner'"
|
||||||
[availableOptions]="availableKommuner"
|
[availableOptions]="availableKommuner"
|
||||||
@@ -46,7 +49,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ng-template #loadingRef>
|
<ng-template #loadingRef>
|
||||||
<div class="avrop-filters__loading-spinner">
|
<msfa-loader></msfa-loader>
|
||||||
<digi-icon-spinner af-title="Laddar innehåll"></digi-icon-spinner>
|
|
||||||
</div>
|
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
|
|
||||||
import { AvropService } from '@msfa-services/avrop.service';
|
import { AvropService } from '@msfa-services/avrop.service';
|
||||||
import { Observable } from 'rxjs';
|
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
|
||||||
|
import { combineLatest, Observable } from 'rxjs';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'msfa-avrop-filters',
|
selector: 'msfa-avrop-filters',
|
||||||
@@ -19,6 +20,12 @@ export class AvropFiltersComponent {
|
|||||||
.filteredUtforandeVerksamheter$;
|
.filteredUtforandeVerksamheter$;
|
||||||
filteredKommuner$: Observable<MultiselectFilterOption[]> = this.avropService.filteredKommuner$;
|
filteredKommuner$: Observable<MultiselectFilterOption[]> = this.avropService.filteredKommuner$;
|
||||||
|
|
||||||
|
filtersAreLoading$: Observable<boolean> = combineLatest([
|
||||||
|
this.availableKommuner$,
|
||||||
|
this.availableTjanster$,
|
||||||
|
this.availableUtforandeVerksamheter$,
|
||||||
|
]).pipe(map(([kommuner, tjanster, uv]) => !!(kommuner && tjanster && uv)));
|
||||||
|
|
||||||
constructor(private avropService: AvropService) {}
|
constructor(private avropService: AvropService) {}
|
||||||
|
|
||||||
updateSelectedTjanster(filterOptions: MultiselectFilterOption[]): void {
|
updateSelectedTjanster(filterOptions: MultiselectFilterOption[]): void {
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
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 { AvropFiltersComponent } from './avrop-filters.component';
|
import { LoaderModule } from '@msfa-shared/components/loader/loader.module';
|
||||||
import { MultiselectModule } from '@msfa-shared/components/multiselect/multiselect.module';
|
import { MultiselectModule } from '@msfa-shared/components/multiselect/multiselect.module';
|
||||||
|
import { AvropFiltersComponent } from './avrop-filters.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
declarations: [AvropFiltersComponent],
|
declarations: [AvropFiltersComponent],
|
||||||
imports: [CommonModule, MultiselectModule],
|
imports: [CommonModule, MultiselectModule, LoaderModule],
|
||||||
exports: [AvropFiltersComponent],
|
exports: [AvropFiltersComponent],
|
||||||
})
|
})
|
||||||
export class AvropFiltersModule {}
|
export class AvropFiltersModule {}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<div class="avrop-list">
|
<digi-ng-skeleton-base *ngIf="avropLoading" [afCount]="3" afText="Laddar nya deltagare"></digi-ng-skeleton-base>
|
||||||
|
<div *ngIf="availableAvrop?.length" class="avrop-list">
|
||||||
<div class="avrop-list__select-all">
|
<div class="avrop-list__select-all">
|
||||||
<digi-form-checkbox
|
<digi-form-checkbox
|
||||||
*ngIf="!isLocked"
|
*ngIf="!isLocked"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ export class AvropListComponent {
|
|||||||
@Input() isLocked: boolean;
|
@Input() isLocked: boolean;
|
||||||
@Input() isSubmitted: boolean;
|
@Input() isSubmitted: boolean;
|
||||||
@Input() handledareConfirmed: boolean;
|
@Input() handledareConfirmed: boolean;
|
||||||
|
@Input() avropLoading: boolean;
|
||||||
@Output() selectionChanged = new EventEmitter<AvropCompact[]>();
|
@Output() selectionChanged = new EventEmitter<AvropCompact[]>();
|
||||||
@Output() paginated = new EventEmitter<number>();
|
@Output() paginated = new EventEmitter<number>();
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { DigiNgSkeletonBaseModule } from '@af/digi-ng/_skeleton/skeleton-base';
|
||||||
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 { AvropRowModule } from '../avrop-row/avrop-row.module';
|
import { AvropRowModule } from '../avrop-row/avrop-row.module';
|
||||||
@@ -6,7 +7,7 @@ import { AvropListComponent } from './avrop-list.component';
|
|||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
declarations: [AvropListComponent],
|
declarations: [AvropListComponent],
|
||||||
imports: [CommonModule, AvropRowModule],
|
imports: [CommonModule, AvropRowModule, DigiNgSkeletonBaseModule],
|
||||||
exports: [AvropListComponent],
|
exports: [AvropListComponent],
|
||||||
})
|
})
|
||||||
export class AvropListModule {}
|
export class AvropListModule {}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: var(--digi--ui--color--background--tertiary);
|
background-color: var(--digi--ui--color--background--tertiary);
|
||||||
height: 70px;
|
padding: $digi--layout--gutter $digi--layout--gutter--l;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__no-options-available {
|
&__no-options-available {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { Handledare } from '@msfa-models/handledare.model';
|
|||||||
import { AvropApiService } from '@msfa-services/api/avrop-api.service';
|
import { AvropApiService } from '@msfa-services/api/avrop-api.service';
|
||||||
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
|
import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option';
|
||||||
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
|
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
|
||||||
import { filter, map, switchMap } from 'rxjs/operators';
|
import { filter, map, switchMap, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
type Step = 1 | 2 | 3 | 4;
|
type Step = 1 | 2 | 3 | 4;
|
||||||
|
|
||||||
@@ -24,6 +24,8 @@ export class AvropService {
|
|||||||
private _handledareIsConfirmed$ = new BehaviorSubject<boolean>(false);
|
private _handledareIsConfirmed$ = new BehaviorSubject<boolean>(false);
|
||||||
private _avropIsSubmitted$ = new BehaviorSubject<boolean>(false);
|
private _avropIsSubmitted$ = new BehaviorSubject<boolean>(false);
|
||||||
private _error$ = new BehaviorSubject<string>(null);
|
private _error$ = new BehaviorSubject<string>(null);
|
||||||
|
private _avropLoading$ = new BehaviorSubject<boolean>(false);
|
||||||
|
public avropLoading$: Observable<boolean> = this._avropLoading$.asObservable();
|
||||||
|
|
||||||
public filteredTjanster$: Observable<MultiselectFilterOption[]> = this._filteredTjanster$.asObservable();
|
public filteredTjanster$: Observable<MultiselectFilterOption[]> = this._filteredTjanster$.asObservable();
|
||||||
public filteredUtforandeVerksamheter$: Observable<
|
public filteredUtforandeVerksamheter$: Observable<
|
||||||
@@ -50,7 +52,16 @@ export class AvropService {
|
|||||||
this._filteredKommuner$,
|
this._filteredKommuner$,
|
||||||
this._page$,
|
this._page$,
|
||||||
this._limit$,
|
this._limit$,
|
||||||
]).pipe(switchMap(() => this.avropApiService.fetchAvrop$(this.filtersForAvrop)));
|
]).pipe(
|
||||||
|
switchMap(() => {
|
||||||
|
this._avropLoading$.next(true);
|
||||||
|
return this.avropApiService.fetchAvrop$(this.filtersForAvrop).pipe(
|
||||||
|
tap(() => {
|
||||||
|
this._avropLoading$.next(false);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
public availableTjanster$: Observable<MultiselectFilterOption[]> = combineLatest([
|
public availableTjanster$: Observable<MultiselectFilterOption[]> = combineLatest([
|
||||||
this._filteredUtforandeVerksamheter$,
|
this._filteredUtforandeVerksamheter$,
|
||||||
|
|||||||
Reference in New Issue
Block a user