From 403476ab4b4e88f911220cd555ef0de7abc5fa7f Mon Sep 17 00:00:00 2001
From: Florent POITTEVIN <poittevin.florent@gmail.com>
Date: Thu, 4 Feb 2021 17:16:00 +0100
Subject: [PATCH] feat: 262 dedicated component for access level with embargo
 on deposit document file list

---
 package-lock.json                             |  6 +--
 package.json                                  |  2 +-
 .../deposit-document-file.container.ts        | 28 +----------
 ...ess-level-with-embargo.presentational.html | 20 ++++++++
 ...ess-level-with-embargo.presentational.scss | 14 ++++++
 ...ccess-level-with-embargo.presentational.ts | 46 +++++++++++++++++++
 .../shared/enums/data-table-component.enum.ts |  1 +
 .../helpers/data-table-component.helper.ts    | 26 +++++++++++
 src/app/shared/shared.module.ts               |  2 +
 9 files changed, 115 insertions(+), 30 deletions(-)
 create mode 100644 src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.html
 create mode 100644 src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.scss
 create mode 100644 src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.ts

diff --git a/package-lock.json b/package-lock.json
index acedb42dc..122f950bf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14836,9 +14836,9 @@
       }
     },
     "solidify-frontend": {
-      "version": "1.1.18",
-      "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-1.1.18.tgz",
-      "integrity": "sha512-p+2z11gj9VAgBFYzRNMrtYOsURi4/W0+y4KUX5LEvBSsjhqbi6kXSQJG7zKMoI7eZRjoDWDt7Pyi+m3fCcVk0g==",
+      "version": "1.1.19",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/solidify-frontend/-/solidify-frontend-1.1.19.tgz",
+      "integrity": "sha512-S2FS4tWkAkj7N5dIuVgg1k/rLJ60hGEcY+TlXv56ivHCspsVe+9pUcBbZYRoSHcDoZ8fBjuDAe0L8OkkBkVsiQ==",
       "requires": {
         "tslib": "^2.0.0"
       }
diff --git a/package.json b/package.json
index 1e7678a96..4036bd59c 100644
--- a/package.json
+++ b/package.json
@@ -93,7 +93,7 @@
     "normalize.css": "8.0.1",
     "patch-package": "6.2.2",
     "rxjs": "6.6.0",
-    "solidify-frontend": "1.1.18",
+    "solidify-frontend": "1.1.19",
     "streamsaver": "2.0.4",
     "sync-pom-version-to-package": "1.5.0",
     "ts-key-enum": "2.0.3",
diff --git a/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.ts b/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.ts
index 6d399e548..f2c6523ee 100644
--- a/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.ts
+++ b/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.ts
@@ -206,13 +206,12 @@ export class DepositDocumentFileContainer extends SharedAbstractRoutable impleme
               protected readonly _securityService: SecurityService
               /*@Inject(FILE_VISUALIZERS) private readonly _fileVisualizers: AbstractFileVisualizer[]*/) {
     super();
+    this._defineColumns();
   }
 
   ngOnInit(): void {
     super.ngOnInit();
 
-    this._defineColumns();
-
     if (this.canEdit) {
       this._createPollingListenerForFileReady();
     }
@@ -241,30 +240,7 @@ export class DepositDocumentFileContainer extends SharedAbstractRoutable impleme
         isFilterable: true,
         translate: true,
         filterEnum: Enums.DocumentFile.AccessLevelEnumTranslate,
-        component: DataTableComponentHelper.get(DataTableComponentEnum.accessLevel),
-      },
-      {
-        field: "embargoAccessLevel",
-        header: LabelTranslateEnum.embargoAccessLevel,
-        type: DataTableFieldTypeEnum.singleSelect,
-        order: OrderEnum.none,
-        filterableField: "embargoAccessLevel" as any,
-        sortableField: "embargoAccessLevel" as any,
-        isSortable: true,
-        isFilterable: true,
-        translate: true,
-        filterEnum: Enums.DocumentFile.AccessLevelEnumTranslate,
-        component: DataTableComponentHelper.get(DataTableComponentEnum.accessLevel),
-      },
-      {
-        field: "embargoEndDate",
-        header: LabelTranslateEnum.embargoEndDate,
-        type: DataTableFieldTypeEnum.date,
-        order: OrderEnum.none,
-        filterableField: "embargoEndDate" as any,
-        sortableField: "embargoEndDate" as any,
-        isSortable: true,
-        isFilterable: false,
+        component: DataTableComponentHelper.get(DataTableComponentEnum.accessLevelWithEmbargo),
       },
       {
         field: "documentFileType.value",
diff --git a/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.html b/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.html
new file mode 100644
index 000000000..4cd078a08
--- /dev/null
+++ b/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.html
@@ -0,0 +1,20 @@
+<ng-template [ngIf]="embargoAccessLevel | isNotNullNorUndefined">
+  <aou-shared-access-level [accessLevel]="embargoAccessLevel"
+                           [withTooltip]="withTooltip"
+                           [size]="size"
+  ></aou-shared-access-level>
+  <solidify-icon [iconName]="iconNameEnum.next"
+                 class="xs"
+  ></solidify-icon>
+</ng-template>
+
+<aou-shared-access-level [accessLevel]="accessLevel"
+                         [withTooltip]="withTooltip"
+                         [size]="size"
+></aou-shared-access-level>
+
+<span *ngIf="(embargoAccessLevel | isNotNullNorUndefined) && (embargoEndDate | isNotNullNorUndefined)"
+      class="date"
+>
+  {{dateUtil.convertDateToDateString(embargoEndDate)}}
+</span>
diff --git a/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.scss b/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.scss
new file mode 100644
index 000000000..037f54b80
--- /dev/null
+++ b/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.scss
@@ -0,0 +1,14 @@
+:host {
+  display: grid;
+  grid-template-columns: min-content min-content min-content max-content;
+  align-items: center;
+  grid-gap: 4px;
+
+  .date {
+    padding-left: 5px;
+  }
+}
+
+:host(:not(.have-embargo)) {
+  grid-template-columns: 1fr;
+}
diff --git a/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.ts b/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.ts
new file mode 100644
index 000000000..ef752f288
--- /dev/null
+++ b/src/app/shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational.ts
@@ -0,0 +1,46 @@
+import {
+  ChangeDetectionStrategy,
+  ChangeDetectorRef,
+  Component,
+  HostBinding,
+  Input,
+} from "@angular/core";
+import {Enums} from "@enums";
+import {SharedAbstractPresentational} from "@shared/components/presentationals/shared-abstract/shared-abstract.presentational";
+import {IconNameEnum} from "@shared/enums/icon-name.enum";
+import {
+  DateUtil,
+  EnumUtil,
+} from "solidify-frontend";
+
+@Component({
+  selector: "aou-shared-access-level-with-embargo",
+  templateUrl: "./shared-access-level-with-embargo.presentational.html",
+  styleUrls: ["./shared-access-level-with-embargo.presentational.scss"],
+  changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class SharedAccessLevelWithEmbargoPresentational extends SharedAbstractPresentational {
+  @Input()
+  accessLevel: Enums.DocumentFile.AccessLevelEnum;
+
+  @Input()
+  @HostBinding("class.have-embargo")
+  embargoAccessLevel: Enums.DocumentFile.AccessLevelEnum;
+
+  @Input()
+  embargoEndDate: Date;
+
+  @Input()
+  size: string = "xlg";
+
+  @Input()
+  withTooltip: boolean = false;
+
+  get dateUtil(): typeof DateUtil {
+    return DateUtil;
+  }
+
+  constructor(private readonly _changeDetector: ChangeDetectorRef) {
+    super();
+  }
+}
diff --git a/src/app/shared/enums/data-table-component.enum.ts b/src/app/shared/enums/data-table-component.enum.ts
index 130fe7d39..ef0bf6f42 100644
--- a/src/app/shared/enums/data-table-component.enum.ts
+++ b/src/app/shared/enums/data-table-component.enum.ts
@@ -4,6 +4,7 @@ enum DataTableComponentExtendEnum {
   status = "status",
   logo = "logo",
   accessLevel = "accessLevel",
+  accessLevelWithEmbargo = "accessLevelWithEmbargo",
   documentFileQuickStatus = "documentFileQuickStatus",
 }
 
diff --git a/src/app/shared/helpers/data-table-component.helper.ts b/src/app/shared/helpers/data-table-component.helper.ts
index 0c219bf01..d10a666b6 100644
--- a/src/app/shared/helpers/data-table-component.helper.ts
+++ b/src/app/shared/helpers/data-table-component.helper.ts
@@ -1,4 +1,5 @@
 import {SharedLogoWrapperContainer} from "@shared/components/containers/shared-logo-wrapper/shared-logo-wrapper.container";
+import {SharedAccessLevelWithEmbargoPresentational} from "@shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational";
 import {SharedAccessLevelPresentational} from "@shared/components/presentationals/shared-access-level/shared-access-level.presentational";
 import {SharedDocumentFileQuickStatusPresentational} from "@shared/components/presentationals/shared-document-file-quick-status/shared-document-file-quick-status.presentational";
 import {DataTableComponentEnum} from "@shared/enums/data-table-component.enum";
@@ -10,6 +11,7 @@ import {
   StatusPresentational,
   ValueType,
 } from "solidify-frontend";
+import {DataTableComponentInput} from "../../../../../Solidify-Frontend/projects/solidify-frontend";
 
 export class DataTableComponentHelper<TResource> extends DataTableComponentPartialHelper {
   static listComponent: MappingObject<DataTableComponent> | any = {
@@ -75,6 +77,30 @@ export class DataTableComponentHelper<TResource> extends DataTableComponentParti
         },
       ],
     },
+    [DataTableComponentEnum.accessLevelWithEmbargo]: {
+      componentType: SharedAccessLevelWithEmbargoPresentational,
+      inputs: [
+        {
+          key: "accessLevel",
+          valueType: ValueType.isColData,
+        },
+        {
+          key: "withTooltip",
+          valueType: ValueType.isStatic,
+          staticValue: true,
+        },
+        {
+          key: "embargoAccessLevel",
+          valueType: ValueType.isOtherColData,
+          dataCol: "embargoAccessLevel",
+        } as DataTableComponentInput,
+        {
+          key: "embargoEndDate",
+          valueType: ValueType.isOtherColData,
+          dataCol: "embargoEndDate",
+        } as DataTableComponentInput,
+      ],
+    },
     [DataTableComponentEnum.documentFileQuickStatus]: {
       componentType: SharedDocumentFileQuickStatusPresentational,
       inputs: [
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index 9a163b155..543d550f3 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -30,6 +30,7 @@ import {SharedImageUploadWrapperContainer} from "@shared/components/containers/s
 import {SharedLogoWrapperContainer} from "@shared/components/containers/shared-logo-wrapper/shared-logo-wrapper.container";
 import {SharedUserguideSidebarContainer} from "@shared/components/containers/shared-userguide-sidebar/shared-userguide-sidebar.container";
 import {SharedUploadImageDialog} from "@shared/components/dialogs/shared-upload-image/shared-upload-image.dialog";
+import {SharedAccessLevelWithEmbargoPresentational} from "@shared/components/presentationals/shared-access-level-with-embargo/shared-access-level-with-embargo.presentational";
 import {SharedAccessLevelPresentational} from "@shared/components/presentationals/shared-access-level/shared-access-level.presentational";
 import {SharedAvatarPresentational} from "@shared/components/presentationals/shared-avatar/shared-avatar.presentational";
 import {SharedDocumentFileQuickStatusPresentational} from "@shared/components/presentationals/shared-document-file-quick-status/shared-document-file-quick-status.presentational";
@@ -78,6 +79,7 @@ const contents = [];
 const presentationals = [
   SharedAvatarPresentational,
   SharedAccessLevelPresentational,
+  SharedAccessLevelWithEmbargoPresentational,
   SharedTocPresentational,
   SharedErrorPresentational,
   SharedPersonFormPresentational,
-- 
GitLab