From 9cb9e48e21ef7c04b439959e09728a0760e5548b Mon Sep 17 00:00:00 2001 From: Florent POITTEVIN <poittevin.florent@gmail.com> Date: Wed, 3 Jun 2020 15:41:11 +0200 Subject: [PATCH] fix: 1427 org unit display is not the good one on list when change filter --- ...ed-organizational-unit-name.container.html | 5 +- ...ared-organizational-unit-name.container.ts | 49 ++++++++++++++----- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.html b/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.html index 2661dfe8f..e7d76e4f8 100644 --- a/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.html +++ b/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.html @@ -1 +1,4 @@ -{{name | async}} +<div [dlcmSpinner]="isLoading" + [dlcmSpinnerStrokeWidth]="2" + [dlcmSpinnerDiameter]="24" +>{{name}}</div> diff --git a/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.ts b/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.ts index 88e5c17d4..912dd40ae 100644 --- a/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.ts +++ b/src/app/shared/components/containers/shared-organizational-unit-name/shared-organizational-unit-name.container.ts @@ -1,5 +1,6 @@ import { ChangeDetectionStrategy, + ChangeDetectorRef, Component, Input, } from "@angular/core"; @@ -9,8 +10,13 @@ import {SharedAbstractContainer} from "@shared/components/containers/shared-abst import {SharedOrgUnitAction} from "@shared/stores/organizational-unit/shared-organizational-unit.action"; import {SharedOrganizationalUnitState} from "@shared/stores/organizational-unit/shared-organizational-unit.state"; import {Observable} from "rxjs"; -import {map} from "rxjs/operators"; import { + distinctUntilChanged, + filter, + take, +} from "rxjs/operators"; +import { + isNotNullNorUndefined, isNullOrUndefined, ResourceState, StringUtil, @@ -23,36 +29,57 @@ import { changeDetection: ChangeDetectionStrategy.OnPush, }) export class SharedOrganizationalUnitNameContainer extends SharedAbstractContainer { - name: Observable<string> = ResourceState.list(this._store, SharedOrganizationalUnitState).pipe( - map(list => this.mapOrgUnitName(list)), - ); + name: string; + listOrgUnitObs: Observable<OrganizationalUnit[]> = ResourceState.list(this._store, SharedOrganizationalUnitState); + + isLoading: boolean = false; _id: string; @Input() set id(id: string) { - if (!isNullOrUndefined(id)) { + this._id = id; + if (isNullOrUndefined(id)) { + this.name = StringUtil.stringEmpty; + return; + } + const listSnapshot = ResourceState.listSnapshot(this._store, SharedOrganizationalUnitState); + const orgUnit = this.getOrgUnit(listSnapshot); + if (isNullOrUndefined(orgUnit)) { + this.name = StringUtil.stringEmpty; + this.subscribe(this.listOrgUnitObs.pipe( + distinctUntilChanged(), + filter(list => isNotNullNorUndefined(this.getOrgUnit(list))), + take(1), + ), list => { + this.name = this.getOrgUnit(list)?.name; + this.isLoading = false; + this._changeDetector.detectChanges(); + }); this._store.dispatch(new SharedOrgUnitAction.AddInListById(id, true)); + this.isLoading = true; + } else { + this.name = orgUnit.name; } - this._id = id; } get id(): string { return this._id; } - constructor(public readonly _store: Store) { + constructor(public readonly _store: Store, + private readonly _changeDetector: ChangeDetectorRef) { super(); } - private mapOrgUnitName(list: OrganizationalUnit[]): string { + private getOrgUnit(list: OrganizationalUnit[]): OrganizationalUnit { if (isNullOrUndefined(list)) { - return StringUtil.stringEmpty; + return undefined; } const organizationalUnit = list.find(o => o.resId === this._id); if (isNullOrUndefined(organizationalUnit)) { - return StringUtil.stringEmpty; + return undefined; } - return organizationalUnit.name; + return organizationalUnit; } } -- GitLab