From 5ebc60f8fa083839b86996492e16051f9d60bf3e Mon Sep 17 00:00:00 2001
From: Florent POITTEVIN <poittevin.florent@gmail.com>
Date: Wed, 3 Jun 2020 14:14:22 +0200
Subject: [PATCH] fix: sort org unit list by name on deposit and fix infinite
 load

---
 .../routables/deposit-list/deposit-list.routable.html      | 1 +
 .../routables/deposit-list/deposit-list.routable.ts        | 7 ++++++-
 .../deposit-authorized-organizational-unit.state.ts        | 6 +++++-
 .../shared-searchable-abstract-content.presentational.ts   | 5 +++--
 .../shared-searchable-multi-select.presentational.ts       | 4 ++++
 .../shared-searchable-single-select.presentational.ts      | 4 ++++
 6 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.html b/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.html
index 0dc5a8843..8285270af 100644
--- a/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.html
+++ b/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.html
@@ -44,6 +44,7 @@
                                               solidifyValidation
                                               [resourceNameSpace]="depositAuthorizedOrganizationalUnitNameSpace"
                                               [state]="depositAuthorizedOrganizationalUnitState"
+                                              [sort]="depositAuthorizedOrganizationalUnitSort"
                                               [formControl]="fd"
                                               [canDeleteValue]="false"
                                               [labelKey]="'name'"
diff --git a/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.ts b/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.ts
index bccb221e5..6a27f5ec8 100644
--- a/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.ts
+++ b/src/app/features/deposit/components/routables/deposit-list/deposit-list.routable.ts
@@ -70,6 +70,7 @@ import {
   isNullOrUndefined,
   isUndefined,
   MappingObjectUtil,
+  MARK_AS_TRANSLATABLE,
   MemoizedUtil,
   OrderEnum,
   Override,
@@ -79,7 +80,7 @@ import {
   ResourceNameSpace,
   ResourceState,
   SolidifyValidator,
-  MARK_AS_TRANSLATABLE,
+  Sort,
 } from "solidify-frontend";
 
 @Component({
@@ -97,6 +98,10 @@ export class DepositListRoutable extends SharedAbstractListRoutable<Deposit, Dep
   readonly KEY_ORGANIZATIONAL_UNIT: keyof Deposit & string = "organizationalUnitId";
   readonly KEY_STATUS: keyof Deposit & string = "status";
 
+  depositAuthorizedOrganizationalUnitSort: Sort = {
+    field: "name" as keyof OrganizationalUnit,
+    order: OrderEnum.ascending,
+  };
   depositAuthorizedOrganizationalUnitNameSpace: ResourceNameSpace = depositAuthorizedOrganizationalUnitNameSpace;
   depositAuthorizedOrganizationalUnitState: typeof DepositAuthorizedOrganizationalUnitState = DepositAuthorizedOrganizationalUnitState;
 
diff --git a/src/app/features/deposit/stores/authorized-organizational-unit/deposit-authorized-organizational-unit.state.ts b/src/app/features/deposit/stores/authorized-organizational-unit/deposit-authorized-organizational-unit.state.ts
index 0fc6a0942..6d4e04189 100644
--- a/src/app/features/deposit/stores/authorized-organizational-unit/deposit-authorized-organizational-unit.state.ts
+++ b/src/app/features/deposit/stores/authorized-organizational-unit/deposit-authorized-organizational-unit.state.ts
@@ -14,6 +14,7 @@ import {
   defaultResourceStateInitValue,
   MappingObjectUtil,
   NotificationService,
+  OrderEnum,
   QueryParameters,
   ResourceState,
   ResourceStateModel,
@@ -30,7 +31,10 @@ export const defaultDepositAuthorizedOrgUnitValue: () => DepositAuthorizedOrgani
 
 // WARNING : IN SOME CASE WE NEED TO FILTER TO GET ONLY OPENED ORG UNIT
 const getQueryParameter = () => {
-  const queryParameters = new QueryParameters(environment.defaultEnumValuePageSizeLazyLoad);
+  const queryParameters = new QueryParameters(environment.defaultEnumValuePageSizeLazyLoad, {
+    field: "name" as keyof OrganizationalUnit,
+    order: OrderEnum.ascending,
+  });
   MappingObjectUtil.set(queryParameters.search.searchItems, "openOnly", "true");
   return queryParameters;
 };
diff --git a/src/app/shared/components/presentationals/shared-searchable-abstract-content/shared-searchable-abstract-content.presentational.ts b/src/app/shared/components/presentationals/shared-searchable-abstract-content/shared-searchable-abstract-content.presentational.ts
index 10d0e7e82..72fd14db3 100644
--- a/src/app/shared/components/presentationals/shared-searchable-abstract-content/shared-searchable-abstract-content.presentational.ts
+++ b/src/app/shared/components/presentationals/shared-searchable-abstract-content/shared-searchable-abstract-content.presentational.ts
@@ -66,7 +66,8 @@ export abstract class SharedSearchableAbstractContentPresentational<TResource ex
     }
     const currentPosition = this._elementRef.nativeElement.scrollTop + this._elementRef.nativeElement.offsetHeight;
     const maxPosition = this._elementRef.nativeElement.scrollHeight;
-    if (currentPosition === maxPosition) {
+
+    if (currentPosition >= maxPosition) {
       this.loadNextChunk();
     }
   }
@@ -158,7 +159,7 @@ export abstract class SharedSearchableAbstractContentPresentational<TResource ex
   }
 
   private _dispatchInitDataLoad(): void {
-    const queryParameters = new QueryParameters(this._pageSize);
+    const queryParameters = new QueryParameters(this._pageSize, this.host.sort);
     if (isNotNullNorUndefined(this.host.extraSearchQueryParam)) {
       queryParameters.search.searchItems = MappingObjectUtil.copy(this.host.extraSearchQueryParam);
     }
diff --git a/src/app/shared/components/presentationals/shared-searchable-multi-select/shared-searchable-multi-select.presentational.ts b/src/app/shared/components/presentationals/shared-searchable-multi-select/shared-searchable-multi-select.presentational.ts
index 83d898337..e3b4eb603 100644
--- a/src/app/shared/components/presentationals/shared-searchable-multi-select/shared-searchable-multi-select.presentational.ts
+++ b/src/app/shared/components/presentationals/shared-searchable-multi-select/shared-searchable-multi-select.presentational.ts
@@ -39,6 +39,7 @@ import {
   ResourceNameSpace,
   ResourceState,
   ResourceStateModel,
+  Sort,
   Type,
 } from "solidify-frontend";
 
@@ -68,6 +69,9 @@ export class SharedSearchableMultiSelectPresentational<TStateModel extends Resou
   @Input()
   searchKey: string;
 
+  @Input()
+  sort: Sort | undefined;
+
   @ViewChild("inputElementRef", {static: true})
   inputElementRef: ElementRef;
 
diff --git a/src/app/shared/components/presentationals/shared-searchable-single-select/shared-searchable-single-select.presentational.ts b/src/app/shared/components/presentationals/shared-searchable-single-select/shared-searchable-single-select.presentational.ts
index 94241210a..e04e55ad5 100644
--- a/src/app/shared/components/presentationals/shared-searchable-single-select/shared-searchable-single-select.presentational.ts
+++ b/src/app/shared/components/presentationals/shared-searchable-single-select/shared-searchable-single-select.presentational.ts
@@ -57,6 +57,7 @@ import {
   ResourceNameSpace,
   ResourceState,
   ResourceStateModel,
+  Sort,
   Type,
 } from "solidify-frontend";
 
@@ -124,6 +125,9 @@ export class SharedSearchableSingleSelectPresentational<TStateModel extends Reso
   @Input()
   defaultValue: string | undefined;
 
+  @Input()
+  sort: Sort | undefined;
+
   isDefaultValueSelected: boolean = false;
 
   private url: string;
-- 
GitLab