From 53ffb2081458b49b56aa89c60a20cad1c129fa0d Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Wed, 29 Jan 2020 15:13:04 +0100
Subject: [PATCH] feat: simplify home archive list for a simplest way to
 retrieve org unit name

---
 package-lock.json                             |  6 +-
 package.json                                  |  2 +-
 .../home-search/home-search.routable.html     |  4 +-
 .../home-search/home-search.routable.ts       | 79 ++++++-------------
 src/app/features/home/models/archive.model.ts |  2 +-
 src/app/features/home/stores/home.state.ts    |  3 +-
 .../shared-data-table.presentational.scss     |  1 -
 7 files changed, 33 insertions(+), 64 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 798845387..141859eeb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11327,9 +11327,9 @@
       }
     },
     "solidify-frontend": {
-      "version": "0.2.23",
-      "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-0.2.23.tgz",
-      "integrity": "sha512-FmmOmBbFqiPEbzTyhPkuRdzHzyz+duB4VBLWDl741Y2Pp7konxtRrZgCde3TApSXuUF54i/xgih538bfFNkJoQ==",
+      "version": "0.2.24",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-0.2.24.tgz",
+      "integrity": "sha512-oeiYewq+S1hb++TrG5+yI7VEM2a3w9yggr9ZLGC51t3qVqnp2wS/YR17MlaB1ST2vXVc6gDNzXnz7D2IIS1K5g==",
       "requires": {
         "tslib": "^1.9.0"
       }
diff --git a/package.json b/package.json
index f124c3614..7f9a7cdce 100644
--- a/package.json
+++ b/package.json
@@ -74,7 +74,7 @@
     "primeicons": "2.0.0",
     "primeng": "8.0.4",
     "rxjs": "6.5.3",
-    "solidify-frontend": "0.2.23",
+    "solidify-frontend": "0.2.24",
     "streamsaver": "2.0.3",
     "sync-pom-version-to-package": "1.3.1",
     "ts-key-enum": "2.0.0",
diff --git a/src/app/features/home/components/routables/home-search/home-search.routable.html b/src/app/features/home/components/routables/home-search/home-search.routable.html
index ff0594945..f9c5fc134 100644
--- a/src/app/features/home/components/routables/home-search/home-search.routable.html
+++ b/src/app/features/home/components/routables/home-search/home-search.routable.html
@@ -27,11 +27,11 @@
   </div>
 </div>
 
-<div [dlcmSpinner]="(isLoadingObs | async) || (isLoadingOrgUnitObs | async)"
+<div [dlcmSpinner]="(isLoadingObs | async)"
      class="wrapper"
 >
   <dlcm-shared-data-table *ngIf="(listAdaptedObs | async).length > 0;"
-                          [isLoading]="(isLoadingObs | async) || (isLoadingOrgUnitObs | async)"
+                          [isLoading]="isLoadingObs | async"
                           [columns]="columns"
                           [datas]="listAdaptedObs | async"
                           [skipInitialQuery]="true"
diff --git a/src/app/features/home/components/routables/home-search/home-search.routable.ts b/src/app/features/home/components/routables/home-search/home-search.routable.ts
index cb8afe28e..b8739d3e2 100644
--- a/src/app/features/home/components/routables/home-search/home-search.routable.ts
+++ b/src/app/features/home/components/routables/home-search/home-search.routable.ts
@@ -17,33 +17,25 @@ import {ArchiveMetadata} from "@app/shared/models/business/archive-metadata.mode
 import {DataTableColumns} from "@app/shared/models/data-table-columns.model";
 import {LocalStateModel} from "@app/shared/models/local-state.model";
 import {MetadataUtil} from "@app/shared/utils/metadata.util";
-import {HomeOrgUnitAction} from "@home/stores/organizational-unit/home-organizational-unit.action";
-import {HomeOrganizationalUnitState} from "@home/stores/organizational-unit/home-organizational-unit.state";
 import {TranslateService} from "@ngx-translate/core";
 import {Navigate} from "@ngxs/router-plugin";
 import {
   Actions,
-  ofActionCompleted,
   Select,
   Store,
 } from "@ngxs/store";
+import {DataTableComponentEnum} from "@shared/enums/data-table-component.enum";
 import {
   BehaviorSubject,
-  combineLatest,
   Observable,
 } from "rxjs";
-import {filter} from "rxjs/internal/operators/filter";
 import {tap} from "rxjs/internal/operators/tap";
 import {distinctUntilChanged} from "rxjs/operators";
 import {
-  ArrayUtil,
   isEmptyArray,
   isNullOrUndefined,
-  isTrue,
-  MemoizedUtil,
   OrderEnum,
   QueryParameters,
-  ResourceState,
   StoreUtil,
   TRANSLATE,
 } from "solidify-frontend";
@@ -82,10 +74,11 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements
 
     this.columns = [
       {
-        field: "organizationalUnit",
+        field: "organizationalUnitId",
         header: TRANSLATE("access.table.header.organizationalUnit"),
         type: FieldTypeEnum.string,
         order: OrderEnum.none,
+        component: DataTableComponentEnum.organizationalUnitName,
         isSortable: false,
         isFilterable: false,
       },
@@ -115,55 +108,31 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements
       },
     ];
 
-    this.subscribe(this._actions$.pipe(
-      ofActionCompleted(HomeOrgUnitAction.GetByListIdSuccess),
-      distinctUntilChanged(),
-      filter(r => isTrue(r.result.successful)),
-      tap((result) => {
-        const listArchives = this.store.selectSnapshot(HomeState.list);
-        const searchScope = this.store.selectSnapshot(HomeState.searchScope);
-        const listOrgUnit = ResourceState.listSnapshot(this.store, HomeOrganizationalUnitState);
-        const newList: Archive[] = [];
-        listArchives.forEach((archive: ArchiveMetadata) => {
-          newList.push({
-            resId: archive.resId,
-            organizationalUnit: this.getOrganizationalUnitNameFromId(MetadataUtil.getOrganizationalUnitResId(archive.metadata), listOrgUnit),
-            title: MetadataUtil.getTitle(searchScope, archive.metadata),
-            yearPublicationDate: MetadataUtil.getPublicationYear(searchScope, archive.metadata),
-            accessLevel: MetadataUtil.getAccessLevel(searchScope, archive.metadata) as Deposit.AccessEnum,
+    this.subscribe(this.listArchiveMetadataObs
+      .pipe(
+        distinctUntilChanged(),
+        tap((listArchives) => {
+          if (isNullOrUndefined(listArchives) || isEmptyArray(listArchives)) {
+            this.listAdaptedBS.next([]);
+            return;
+          }
+          const searchScope = this.store.selectSnapshot(HomeState.searchScope);
+          const newList: Archive[] = [];
+          listArchives.forEach((archive: ArchiveMetadata) => {
+            newList.push({
+              resId: archive.resId,
+              organizationalUnitId: MetadataUtil.getOrganizationalUnitResId(archive.metadata),
+              title: MetadataUtil.getTitle(searchScope, archive.metadata),
+              yearPublicationDate: MetadataUtil.getPublicationYear(searchScope, archive.metadata),
+              accessLevel: MetadataUtil.getAccessLevel(searchScope, archive.metadata) as Deposit.AccessEnum,
+            });
           });
-        });
-        this.listAdaptedBS.next(newList);
-      }),
-    ));
-
-    this.subscribe(
-      combineLatest(this.listArchiveMetadataObs, this.searchScopeObs)
-        .pipe(
-          distinctUntilChanged(),
-          tap(([listArchives, searchScope]) => {
-            if (isNullOrUndefined(listArchives) || isEmptyArray(listArchives)) {
-              this.listAdaptedBS.next([]);
-              return;
-            }
-            let listOrgUnitResId = listArchives.map(a => MetadataUtil.getOrganizationalUnitResId(a.metadata));
-            listOrgUnitResId = ArrayUtil.distinct(listOrgUnitResId);
-            this.store.dispatch(new HomeOrgUnitAction.GetByListId(listOrgUnitResId, true));
-          }),
-        ),
+          this.listAdaptedBS.next(newList);
+        }),
+      ),
     );
   }
 
-  getOrganizationalUnitNameFromId(resId: string, listOrgUnits: AccessOrganizationalUnit[]): string {
-    if (!isNullOrUndefined(listOrgUnits)) {
-      const orgUnits = listOrgUnits.find(o => o.resId === resId);
-      if (orgUnits) {
-        return orgUnits.name;
-      }
-    }
-    return this.translate.instant("access.organizationalUnitNotFound");
-  }
-
   search(searchTerm: string, queryParameters?: QueryParameters): void {
     this.store.dispatch(new HomeAction.Search(true, searchTerm, queryParameters));
   }
diff --git a/src/app/features/home/models/archive.model.ts b/src/app/features/home/models/archive.model.ts
index 0dff2d828..4c4869480 100644
--- a/src/app/features/home/models/archive.model.ts
+++ b/src/app/features/home/models/archive.model.ts
@@ -2,7 +2,7 @@ import {Deposit} from "@app/generated-api";
 
 export interface Archive {
   resId?: string;
-  organizationalUnit: string;
+  organizationalUnitId: string;
   title: string;
   yearPublicationDate: string;
   accessLevel: Deposit.AccessEnum;
diff --git a/src/app/features/home/stores/home.state.ts b/src/app/features/home/stores/home.state.ts
index d1f3f73c7..aed677795 100644
--- a/src/app/features/home/stores/home.state.ts
+++ b/src/app/features/home/stores/home.state.ts
@@ -170,7 +170,8 @@ export class HomeState {
     });
 
     const pathFilter = "query";
-    MappingObjectUtil.set(queryParameters.search.searchItems, pathFilter, searchString);
+    queryParameters = QueryParametersUtil.clone(queryParameters);
+    MappingObjectUtil.set(QueryParametersUtil.getSearchItems(queryParameters), pathFilter, searchString);
 
     if (searchString === StringUtil.stringEmpty) {
       ctx.dispatch(new HomeAction.SearchSuccess(null));
diff --git a/src/app/shared/components/presentationals/shared-data-table/shared-data-table.presentational.scss b/src/app/shared/components/presentationals/shared-data-table/shared-data-table.presentational.scss
index 929574941..4ad2325ff 100644
--- a/src/app/shared/components/presentationals/shared-data-table/shared-data-table.presentational.scss
+++ b/src/app/shared/components/presentationals/shared-data-table/shared-data-table.presentational.scss
@@ -71,7 +71,6 @@ $inputGroupTextColor: #444444;
       top: 0;
       z-index: $z-index-sticky;
       background-color: $white;
-      // TODO Manage shadow
     }
   }
 
-- 
GitLab