From 11ec56529c9febb35f71b956c48c82ccc3b84e4d Mon Sep 17 00:00:00 2001
From: Florent POITTEVIN <poittevin.florent@gmail.com>
Date: Thu, 2 Jul 2020 16:23:11 +0200
Subject: [PATCH] feat: 1493 rework archive detail

---
 src/app/app.component.ts                      |  15 +-
 .../home-archive-detail.presentational.html   | 241 ++++++++++--------
 .../home-archive-detail.presentational.scss   | 222 ++++++++++++----
 .../home-archive-detail.presentational.ts     | 141 +++++-----
 .../home-archive-tile.presentational.html     |   5 +-
 .../home-archive-tile.presentational.scss     |  18 +-
 .../home-main-page-content.presentational.ts  |   9 +-
 .../home-search-facet.presentational.html     |  14 +-
 .../home-page/home-page.routable.html         |   2 +-
 .../routables/home-page/home-page.routable.ts |   4 +
 src/app/features/home/helpers/home.helper.ts  |   4 +
 .../shared-icon.presentational.html           |   1 +
 src/app/shared/enums/label-translate.enum.ts  |   2 +
 src/app/shared/utils/metadata.util.ts         |   2 +-
 src/assets/i18n/de.json                       |   5 +-
 src/assets/i18n/en.json                       |   5 +-
 src/assets/i18n/fr.json                       |   5 +-
 17 files changed, 445 insertions(+), 250 deletions(-)

diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index d722d2d5c..2b5667803 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -233,9 +233,22 @@ export class AppComponent extends SharedAbstractPresentational {
           this.isHomePage = false;
           if (urlState) {
             const url = urlState.url;
+
+            if (url.startsWith(urlSeparator + RoutesEnum.homeDetail)) {
+              this.currentModule = undefined;
+              return;
+            }
+
+            if (url.startsWith(urlSeparator + RoutesEnum.homeSearch)) {
+              this.currentModule = undefined;
+              this.isHomePage = true;
+              this.ignoreGrid = true;
+              return;
+            }
+
             if (url.startsWith(urlSeparator + RoutesEnum.homePage)) {
               this.currentModule = RoutesEnum.homePage;
-              this.isHomePage = url === (urlSeparator + RoutesEnum.homePage) || url.startsWith(urlSeparator + RoutesEnum.homePage + "?");
+              this.isHomePage = true;
               this.ignoreGrid = true;
               return;
             }
diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html
index e6393c8c0..e83cbe12f 100644
--- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html
+++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html
@@ -1,128 +1,145 @@
-<dl>
-  <ng-container *ngFor="let info of listInfo">
-    <ng-template [ngIf]="!(info.value | isNullOrUndefined) && info.value !== '' && info.code !== true">
-      <ng-container [ngSwitch]="info.type">
-        <div class="line doi-line"
-             *ngSwitchCase="typeInfoEnum.doi"
-             [matMenuTriggerFor]="doiMenu.menu"
-             [matTooltip]="'home.archive.doi.moreInfos' | translate"
-        >
-          <dt>{{info.labelToTranslate | translate}}
-            <dlcm-shared-icon class="lg doi-logo"
-                              [iconName]="iconNameEnum.doi"
-            >
-            </dlcm-shared-icon>
-          </dt>
-          <dlcm-shared-doi-menu #doiMenu="doiMenu"
-                                [doi]="info.value"
-                                [mode]="'archive'"
-                                (getShortDoi)="getShortDoi($event)"
-          ></dlcm-shared-doi-menu>
-          <dd class="doi-value">{{info.value}}</dd>
-        </div>
+<div class="main-infos">
+  <div class="image-wrapper">
+    <img [src]="defaultImageArchive"
+         alt="image"
+         class="image"
+    >
+  </div>
 
-        <div class="line"
-             *ngSwitchCase="typeInfoEnum.orgUnit"
-        >
-          <dt>{{info.labelToTranslate | translate }}</dt>
-          <dd>
-            <dlcm-shared-organizational-unit-name-container [id]="info.value"></dlcm-shared-organizational-unit-name-container>
-          </dd>
-        </div>
+  <div class="base-info">
+    <h1 class="title">{{metadataUtil.getTitle(metadata)}}</h1>
+    <h2 class="description">{{metadataUtil.getDescription(metadata)}}</h2>
 
-        <div class="line"
-             *ngSwitchCase="typeInfoEnum.valueToTranslate"
-        >
-          <dt>{{info.labelToTranslate | translate }}</dt>
-          <dd>{{info.value | translate}}</dd>
-        </div>
+    <ul class="base-info-list">
+      <ng-container *ngFor="let info of listInfo">
+        <ng-container [ngSwitch]="info.type">
+          <li class="doi-line"
+              *ngSwitchCase="typeInfoEnum.doi"
+              [matMenuTriggerFor]="doiMenu.menu"
+              [matTooltip]="'home.archive.doi.moreInfos' | translate"
+          >
+            <dt class="label">{{info.labelToTranslate | translate}}
+              <dlcm-shared-icon class="lg doi-logo"
+                                [iconName]="iconNameEnum.doi"
+              >
+              </dlcm-shared-icon>
 
-        <div class="line"
-             *ngSwitchDefault
-        >
-          <dt>{{info.labelToTranslate | translate }}</dt>
-          <dd>{{info.value}}</dd>
-        </div>
+              <dlcm-shared-doi-menu #doiMenu="doiMenu"
+                                    [doi]="info.value"
+                                    [mode]="'archive'"
+                                    (getShortDoi)="getShortDoi($event)"
+              ></dlcm-shared-doi-menu>
+            </dt>
+            <dd class="doi-value value">{{info.value}}</dd>
+          </li>
+
+          <li *ngSwitchCase="typeInfoEnum.orgUnit">
+            <dt class="label">{{info.labelToTranslate | translate }}</dt>
+            <dd class="value">
+              <dlcm-shared-organizational-unit-name-container [id]="info.value"></dlcm-shared-organizational-unit-name-container>
+            </dd>
+          </li>
+
+          <li *ngSwitchDefault>
+            <dt class="label">{{info.labelToTranslate | translate }}</dt>
+            <dd class="value">{{info.value}}</dd>
+          </li>
+        </ng-container>
       </ng-container>
+    </ul>
+  </div>
 
-    </ng-template>
-    <div *ngIf="info.code"
-         class="line"
-    >
-      <dt>{{info.labelToTranslate | translate }}</dt>
-      <dd>
-        <a (click)="showCode = !showCode">
-          <span *ngIf="showCode">{{labelTranslateEnum.hide | translate}}</span>
-          <span *ngIf="!showCode">{{labelTranslateEnum.show | translate}}</span>
-        </a>
-      </dd>
+  <div class="complementary-info">
+    <div class="year">
+      <dlcm-shared-icon [iconName]="iconNameEnum.creationDate"></dlcm-shared-icon>
+      <span class="label">{{labelTranslateEnum.publicationYear | translate}}</span>
+      <span>{{metadataUtil.getPublicationYear(metadata)}}</span>
     </div>
-    <div *ngIf="info.isList"
-         class="line"
+    <div class="access-level"
+         [class]="colorAccessLevel"
     >
-      <dt>{{info.labelToTranslate | translate }}</dt>
-      <dd>
-        <ul *ngFor="let author of getAuthorsList()">
-          <li>
-            {{author}}
+      <dlcm-shared-icon [iconName]="accessLevelIconName"
+                        size="xlg"
+      ></dlcm-shared-icon>
+      <span class="label">{{labelTranslateEnum.accessLevel | translate}}</span>
+      <span>{{enumUtil.getLabel(accessEnumTranslate, metadataUtil.getAccessLevel(metadata)) | translate}}</span>
+    </div>
+    <div class="contributor">
+      <dlcm-shared-icon [iconName]="iconNameEnum.contributor"></dlcm-shared-icon>
+      <div>
+        <span class="label">{{labelTranslateEnum.contributors | translate}}</span>
+        <ul class="list-contributors">
+          <li *ngFor="let contributor of metadataUtil.getContributors(metadata)">
+            {{contributor}}
           </li>
         </ul>
-      </dd>
+      </div>
+    </div>
+    <div class="size">
+      <dlcm-shared-icon [iconName]="iconNameEnum.foldersView"></dlcm-shared-icon>
+      <span>{{metadataUtil.getFileNumber(metadata)}} {{labelTranslateEnum.files | translate}}
+        ({{metadataUtil.getSize(metadata) | filesize}})
+      </span>
     </div>
-  </ng-container>
-  <div class="line">
-        <pre class="pre"
-             *ngIf="showCode"
-        >
-          <code [highlight]="getMetadata()"
-                class="code"
-          ></code>
-        </pre>
-  </div>
-</dl>
 
-<div class="button-wrapper">
-  <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate">
-    <button *ngIf="isLoggedIn"
-            mat-flat-button
-            [dlcmButtonSpinner]="isLoadingPrepareDownload"
-            color="primary"
-            solidifyShortCuts
-            [disabled]="!(isDownloadAuthorized() | solidifyAsync)"
-            (onEnter)="download(archiveMetadata)"
-            (click)="download(archiveMetadata)"
-    >
-      <dlcm-shared-icon [iconName]="iconNameEnum.download"></dlcm-shared-icon>
-      {{labelTranslateEnum.download | translate}}
-    </button>
-  </div>
+    <div class="button-wrapper">
+      <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate">
+        <button *ngIf="isLoggedIn"
+                mat-flat-button
+                [dlcmButtonSpinner]="isLoadingPrepareDownload"
+                color="primary"
+                solidifyShortCuts
+                [disabled]="!(isDownloadAuthorized() | solidifyAsync)"
+                (onEnter)="download(archiveMetadata)"
+                (click)="download(archiveMetadata)"
+        >
+          <dlcm-shared-icon [iconName]="iconNameEnum.download"></dlcm-shared-icon>
+          {{labelTranslateEnum.download | translate}}
+        </button>
+      </div>
 
-  <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate">
-    <button *ngIf="isLoggedIn"
-            mat-flat-button
-            class="add-to-cart-button"
-            color="primary"
-            solidifyShortCuts
-            [disabled]="!(isDownloadAuthorized() | solidifyAsync)"
-            (onEnter)="addToCart(archiveMetadata)"
-            (click)="addToCart(archiveMetadata)"
+      <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate">
+        <button *ngIf="isLoggedIn"
+                mat-flat-button
+                class="add-to-cart-button"
+                color="primary"
+                solidifyShortCuts
+                [disabled]="!(isDownloadAuthorized() | solidifyAsync)"
+                (onEnter)="addToCart(archiveMetadata)"
+                (click)="addToCart(archiveMetadata)"
 
-    >
-      <dlcm-shared-icon [iconName]="iconNameEnum.addToCart"></dlcm-shared-icon>
-      {{labelTranslateEnum.addToDownloadOrder | translate}}
-    </button>
-  </div>
+        >
+          <dlcm-shared-icon [iconName]="iconNameEnum.addToCart"></dlcm-shared-icon>
+          {{labelTranslateEnum.addToDownloadOrder | translate}}
+        </button>
+      </div>
 
-  <button *ngIf="isAskAccessAvailable() | solidifyAsync"
-          mat-flat-button
-          color="primary"
-          class="add-to-cart-button"
-          solidifyShortCuts
-          (onEnter)="askAccess(archiveMetadata)"
-          (click)="askAccess(archiveMetadata)"
+      <button *ngIf="isAskAccessAvailable() | solidifyAsync"
+              mat-flat-button
+              color="primary"
+              class="add-to-cart-button"
+              solidifyShortCuts
+              (onEnter)="askAccess(archiveMetadata)"
+              (click)="askAccess(archiveMetadata)"
 
-  >
-    <dlcm-shared-icon [iconName]="iconNameEnum.sendRequest"></dlcm-shared-icon>
-    {{labelTranslateEnum.requestAccess | translate}}
-  </button>
+      >
+        <dlcm-shared-icon [iconName]="iconNameEnum.sendRequest"></dlcm-shared-icon>
+        {{labelTranslateEnum.requestAccess | translate}}
+      </button>
+    </div>
+  </div>
 </div>
+<dlcm-shared-panel-expandable [titleToTranslate]="labelTranslateEnum.metadataDatacite | translate"
+                              [isOpen]="false"
+>
+  <pre class="pre">
+  <code [highlight]="getMetadataDatacite()"
+        class="code"
+  ></code>
+  </pre>
+</dlcm-shared-panel-expandable>
+
+<dlcm-shared-panel-expandable [titleToTranslate]="labelTranslateEnum.similarArchive | translate"
+                              [isOpen]="true"
+>
+</dlcm-shared-panel-expandable>
diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss
index f4bf9ba41..4e29e90eb 100644
--- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss
+++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss
@@ -3,60 +3,198 @@
 $padding-bottom-desktop: 20px;
 
 :host {
-  display: block;
-  padding-bottom: 25px;
+  display: flex;
+  flex-direction: column;
+
+  .main-infos {
+    padding-top: 20px;
+    display: grid;
+    //grid-template-columns: max-content 1fr max-content;
+    grid-template-areas: "image-wrapper base-info complementary-info";
+    grid-gap: 20px;
+    margin-bottom: 20px;
+
+
+    .image-wrapper {
+      grid-area: image-wrapper;
+      height: 100%;
+      width: 400px;
+      border: 1px solid $extra-light-grey;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+
+      .image {
+        max-width: 100%;
+        max-height: 100%;
+      }
+    }
 
-  .line {
-    display: flex;
-    flex-direction: row;
-    overflow: hidden;
+    .base-info {
+      grid-area: base-info;
+      display: grid;
+      border-right: 1px solid $extra-light-grey;
+      padding-right: 20px;
+
+      .title {
+        font-size: 18px;
+        line-height: 25px;
+        color: $light-grey;
+        margin-bottom: 0;
+      }
 
-    @include respond-to-breakpoint('xs') {
-      flex-direction: column;
-    }
-  }
+      .description {
+        font-size: 14px;
+        font-weight: bold;
+        color: $black;
+        line-height: 18px;
+        margin-bottom: 20px;
+      }
 
-  dt {
-    font-weight: bold;
-    width: 160px;
-    clear: left;
-    text-align: left;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    position: relative;
-
-    @include respond-to-breakpoint-and-bigger('sm') {
-      padding-bottom: $padding-bottom-desktop;
+      .base-info-list {
+        > li {
+          display: grid;
+          grid-template-columns: max(145px) 1fr;
+          @include respond-to-breakpoint('xs') {
+            flex-direction: column;
+          }
+
+          &.doi-line {
+            cursor: pointer;
+
+            .doi-logo {
+              position: absolute;
+              padding: 0 10px;
+
+              ::ng-deep {
+                img {
+                  position: relative;
+                }
+              }
+            }
+          }
+
+          .label {
+            width: 160px;
+            color: $light-grey;
+            line-height: 26px;
+          }
+
+          .value {
+            @include truncate-with-ellipsis;
+            margin-left: 20px;
+          }
+
+        }
+      }
     }
-  }
 
-  .doi-line {
-    cursor: pointer;
+    .complementary-info {
+      grid-area: complementary-info;
+      grid-template-rows: min-content min-content min-content min-content min-content;
+      display: grid;
+      grid-gap: 20px;
+
+      .year,
+      .access-level,
+      .contributor,
+      .size {
+        display: grid;
+        grid-template-columns: 24px 1fr;
+        grid-gap: 20px;
+        align-items: center;
+      }
 
-    .doi-logo {
-      position: absolute;
-      padding: 0 10px;
+      .year,
+      .access-level {
+        grid-template-columns: 24px max(135px) 1fr;
+      }
 
-      ::ng-deep {
-        img {
-          position: relative;
+      .access-level {
+        &.red {
+          color: $red;
+        }
+
+        &.orange {
+          color: $warning;
+        }
+
+        &.green {
+          color: $green-sweet;
         }
       }
+
+      .contributor {
+        align-items: start;
+
+        .list-contributors {
+          > li {
+            @include truncate-with-ellipsis;
+            max-width: 240px;
+          }
+        }
+      }
+
+      .label {
+        color: $light-grey;
+      }
+
+      .button-wrapper {
+        margin-top: 10px;
+        justify-content: center;
+        display: flex;
+      }
     }
-  }
 
-  dd {
-    margin-left: 0;
-    padding-bottom: 10px;
-    word-break: break-word;
+    @include respond-to-smaller-than-breakpoint('lg') {
+      //grid-template-areas: "image-wrapper image-wrapper . ."
+      //"base-info base-info base-info complementary-info";
 
-    @include respond-to-smaller-than-breakpoint('sm') {
-      width: 100%;
+      grid-template-areas: "image-wrapper base-info base-info"
+    "image-wrapper complementary-info complementary-info";
+
+      .base-info {
+        border: none !important;
+      }
+
+      .image-wrapper {
+        height: 100%;
+        width: 450px;
+      }
+    }
+
+    @include respond-to-smaller-than-breakpoint('md') {
+      grid-template-areas: "image-wrapper"
+    "base-info"
+    "complementary-info";
+
+      .base-info {
+        border: none;
+      }
+
+      .image-wrapper {
+        height: 220px;
+        width: 220px;
+      }
     }
 
-    &.doi-value {
-      cursor: pointer;
+    @include respond-to-smaller-than-breakpoint('sm') {
+      grid-template-areas: "image-wrapper"
+    "base-info"
+    "complementary-info";
+
+      .image-wrapper {
+        height: 220px;
+        width: 100%;
+      }
+
+      .base-info .base-info-list > li {
+        grid-template-columns: 1fr;
+
+        .value {
+          margin: 0;
+        }
+      }
     }
   }
 
@@ -80,8 +218,4 @@ $padding-bottom-desktop: 20px;
   .add-to-cart-button {
     margin-left: 10px;
   }
-
-  .button-wrapper {
-    display: flex;
-  }
 }
diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts
index 56007c4df..b3883fbd1 100644
--- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts
+++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts
@@ -9,7 +9,9 @@ import {SharedAbstractPresentational} from "@app/shared/components/presentationa
 import {ArchiveMetadata} from "@app/shared/models/business/archive-metadata.model";
 import {MetadataUtil} from "@app/shared/utils/metadata.util";
 import {Enums} from "@enums";
+import {environment} from "@environments/environment";
 import {GetShortDoiWrapper} from "@shared/components/presentationals/shared-doi-menu/shared-doi-menu.presentational";
+import {IconNameEnum} from "@shared/enums/icon-name.enum";
 import {LabelTranslateEnum} from "@shared/enums/label-translate.enum";
 import {ObservableOrPromiseOrValue} from "@shared/models/extra-button-toolbar.model";
 import {FileSizePipe} from "@shared/pipes/file-size.pipe";
@@ -22,7 +24,9 @@ import {map} from "rxjs/operators";
 import {
   DateUtil,
   EnumUtil,
+  isNonEmptyString,
   isNullOrUndefined,
+  KeyValue,
   MARK_AS_TRANSLATABLE,
   ObservableUtil,
 } from "solidify-frontend";
@@ -34,8 +38,6 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
 export class HomeArchiveDetailPresentational extends SharedAbstractPresentational implements OnInit {
-  listInfo: Info[];
-
   private readonly _downloadBS: BehaviorSubject<ArchiveMetadata | undefined> = new BehaviorSubject<ArchiveMetadata | undefined>(undefined);
   @Output("downloadChange")
   readonly downloadObs: Observable<ArchiveMetadata | undefined> = ObservableUtil.asObservable(this._downloadBS);
@@ -51,6 +53,29 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
   @Input()
   archiveMetadata: ArchiveMetadata;
 
+  get metadataUtil(): typeof MetadataUtil {
+    return MetadataUtil;
+  }
+
+  get metadata(): ArchiveMetadata.PublicMetadata | undefined {
+    if (isNullOrUndefined(this.archiveMetadata)) {
+      return undefined;
+    }
+    return this.archiveMetadata.metadata;
+  }
+
+  get enumUtil(): typeof EnumUtil {
+    return EnumUtil;
+  }
+
+  listInfo: Info[];
+
+  accessEnumTranslate: KeyValue[] = Enums.Deposit.AccessEnumTranslate;
+  accessLevelIconName: IconNameEnum;
+  colorAccessLevel: "red" | "orange" | "green";
+
+  defaultImageArchive: string = `assets/themes/${environment.theme}/toolbar-header-image.svg`;
+
   @Input()
   isLoadingPrepareDownload: boolean;
 
@@ -59,7 +84,7 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
 
   showCode: boolean = false;
 
-  fileSizePipe: FileSizePipe;
+  fileSizePipe: FileSizePipe = new FileSizePipe();
 
   private readonly _shortDoiBS: BehaviorSubject<GetShortDoiWrapper | undefined> = new BehaviorSubject<GetShortDoiWrapper | undefined>(undefined);
   @Output("getShortDoi")
@@ -74,98 +99,78 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
   }
 
   get orgUnitResId(): string {
-    return MetadataUtil.getOrganizationalUnitResId(this.archiveMetadata.metadata);
+    return MetadataUtil.getOrganizationalUnitResId(this.metadata);
   }
 
   ngOnInit(): void {
-    const metadata = this.archiveMetadata.metadata;
-    this.fileSizePipe = new FileSizePipe();
+    this._computeAccessLevelIcon();
+    this._defineListInfo();
+  }
+
+  private _computeAccessLevelIcon(): void {
+    switch (MetadataUtil.getAccessLevel(this.metadata)) {
+      case Enums.Deposit.AccessEnum.RESTRICTED:
+        this.accessLevelIconName = IconNameEnum.accessLevelRestricted;
+        this.colorAccessLevel = "orange";
+        break;
+      case Enums.Deposit.AccessEnum.CLOSED:
+        this.accessLevelIconName = IconNameEnum.accessLevelClosed;
+        this.colorAccessLevel = "red";
+        break;
+      case Enums.Deposit.AccessEnum.PUBLIC:
+      default:
+        this.accessLevelIconName = IconNameEnum.accessLevelPublic;
+        this.colorAccessLevel = "green";
+        break;
+    }
+  }
+
+  private _defineListInfo(): void {
     this.listInfo = [
-      {
-        labelToTranslate: LabelTranslateEnum.title,
-        value: MetadataUtil.getTitle(metadata),
-      },
-      {
-        labelToTranslate: LabelTranslateEnum.description,
-        value: MetadataUtil.getDescription(metadata),
-      },
       {
         labelToTranslate: LabelTranslateEnum.organizationalUnit,
-        value: MetadataUtil.getOrganizationalUnitResId(metadata),
+        value: MetadataUtil.getOrganizationalUnitResId(this.metadata),
         type: TypeInfoEnum.orgUnit,
       },
       {
         labelToTranslate: LabelTranslateEnum.type,
-        value: MetadataUtil.getType(metadata),
-      },
-      {
-        labelToTranslate: LabelTranslateEnum.contributors,
-        isList: true,
-      },
-      {
-        labelToTranslate: LabelTranslateEnum.publicationYear,
-        value: MetadataUtil.getPublicationYear(metadata),
+        value: MetadataUtil.getType(this.metadata),
       },
       {
         labelToTranslate: LabelTranslateEnum.doi,
-        value: MetadataUtil.getDOI(metadata),
+        value: MetadataUtil.getDOI(this.metadata),
         type: TypeInfoEnum.doi,
       },
       {
         labelToTranslate: LabelTranslateEnum.license,
-        value: MetadataUtil.getLicenses(metadata),
+        value: MetadataUtil.getLicenses(this.metadata),
       },
       {
-        labelToTranslate: LabelTranslateEnum.accessLevel,
-        value: EnumUtil.getLabel(Enums.Deposit.AccessEnumTranslate, MetadataUtil.getAccessLevel(metadata)),
-        type: TypeInfoEnum.valueToTranslate,
+        labelToTranslate: LabelTranslateEnum.acceptedDate,
+        value: DateUtil.convertDateToDateTimeString(MetadataUtil.getAcceptedDate(this.metadata)),
       },
       {
         labelToTranslate: LabelTranslateEnum.embargoAccessLevel,
-        value: MetadataUtil.getEmbargoAccessLevel(metadata),
-      },
-      {
-        labelToTranslate: LabelTranslateEnum.size,
-        value: this.fileSizePipe.transform(MetadataUtil.getSize(metadata)),
-      },
-      {
-        labelToTranslate: LabelTranslateEnum.files,
-        value: MetadataUtil.getFileNumber(metadata),
+        value: MetadataUtil.getEmbargoAccessLevel(this.metadata),
       },
       {
         labelToTranslate: LabelTranslateEnum.embargoEndDate,
-        value: DateUtil.convertDateToDateString(MetadataUtil.getEmbargoEndDate(metadata)),
+        value: DateUtil.convertDateToDateString(MetadataUtil.getEmbargoEndDate(this.metadata)),
       },
       {
         labelToTranslate: LabelTranslateEnum.submittedDate,
-        value: DateUtil.convertDateToDateTimeString(MetadataUtil.getSubmittedDate(metadata)),
-      },
-      {
-        labelToTranslate: LabelTranslateEnum.acceptedDate,
-        value: DateUtil.convertDateToDateTimeString(MetadataUtil.getAcceptedDate(metadata)),
-      },
-      {
-        labelToTranslate: this.getMetadataLabel(),
-        value: MetadataUtil.getDatacite(this.archiveMetadata.metadata),
-        code: true,
+        value: DateUtil.convertDateToDateTimeString(MetadataUtil.getSubmittedDate(this.metadata)),
       },
     ];
-  }
-
-  getAuthorsList(): string[] {
-    return MetadataUtil.getAuthors(this.archiveMetadata.metadata);
+    this.listInfo = this.listInfo.filter(i => isNonEmptyString(i.value));
   }
 
   download(archiveMetadata: ArchiveMetadata): void {
     this._downloadBS.next(archiveMetadata);
   }
 
-  getMetadataLabel(): string {
-    return MARK_AS_TRANSLATABLE("homePage.archive.detail.datacite");
-  }
-
-  getMetadata(): string {
-    return MetadataUtil.getDatacite(this.archiveMetadata.metadata);
+  getMetadataDatacite(): string {
+    return MetadataUtil.getDatacite(this.metadata);
   }
 
   getShortDoi(longDoi: GetShortDoiWrapper): void {
@@ -181,24 +186,22 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
   }
 
   isPublicMetadata(): boolean {
-    if (isNullOrUndefined(this.archiveMetadata)) {
-      return false;
-    }
-    return MetadataUtil.getAccessLevel(this.archiveMetadata.metadata) === Enums.Deposit.AccessEnum.PUBLIC;
+    return this._checkCurrentAccessLevelIs(Enums.Deposit.AccessEnum.PUBLIC);
   }
 
   isRestrictedMetadata(): boolean {
-    if (isNullOrUndefined(this.archiveMetadata)) {
-      return false;
-    }
-    return MetadataUtil.getAccessLevel(this.archiveMetadata.metadata) === Enums.Deposit.AccessEnum.RESTRICTED;
+    return this._checkCurrentAccessLevelIs(Enums.Deposit.AccessEnum.RESTRICTED);
   }
 
   isClosedMetadata(): boolean {
+    return this._checkCurrentAccessLevelIs(Enums.Deposit.AccessEnum.CLOSED);
+  }
+
+  private _checkCurrentAccessLevelIs(accessLevel: Enums.Deposit.AccessEnum): boolean {
     if (isNullOrUndefined(this.archiveMetadata)) {
       return false;
     }
-    return MetadataUtil.getAccessLevel(this.archiveMetadata.metadata) === Enums.Deposit.AccessEnum.CLOSED;
+    return MetadataUtil.getAccessLevel(this.metadata) === accessLevel;
   }
 
   isDownloadAuthorized(): ObservableOrPromiseOrValue<boolean> {
@@ -260,12 +263,10 @@ class Info {
   labelToTranslate: string;
   value?: string;
   code?: boolean = false;
-  isList?: boolean = false;
   type?: TypeInfoEnum;
 }
 
 enum TypeInfoEnum {
   doi = 1,
   orgUnit = 2,
-  valueToTranslate = 3,
 }
diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html
index 734e86352..fdfb7c039 100644
--- a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html
+++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html
@@ -15,9 +15,9 @@
   ></dlcm-shared-organizational-unit-name-container>
   <span class="title">{{archive.title}}</span>
   <div class="detailed-infos">
-  <span class="year">
+    <span class="year">
       <dlcm-shared-icon [iconName]="iconNameEnum.creationDate"></dlcm-shared-icon>
-    {{archive.yearPublicationDate}}
+      {{archive.yearPublicationDate}}
     </span>
     <span class="access-level"
           [class]="colorAccessLevel"
@@ -31,7 +31,6 @@
     </span>
   </div>
 
-
   <div class="button-wrapper">
     <button mat-flat-button
             color="primary"
diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss
index 6b193e944..06962da7d 100644
--- a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss
+++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss
@@ -6,10 +6,6 @@
   border: 1px solid $extra-light-grey;
   padding: 10px 20px;
 
-  &:hover {
-    cursor: pointer;
-  }
-
   .grid {
     display: grid;
     text-align: center;
@@ -25,7 +21,8 @@
         width: 100px;
 
         .image {
-          height: 100%;
+          max-width: 100%;
+          max-height: 100%;
         }
       }
     }
@@ -83,6 +80,17 @@
     .button-wrapper {
       margin-top: 10px;
       text-align: center;
+      visibility: hidden;
+    }
+  }
+
+  &:hover {
+    cursor: pointer;
+
+    .grid {
+      .button-wrapper {
+        visibility: initial;
+      }
     }
   }
 }
diff --git a/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts b/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts
index 327ec0bc8..56215b9aa 100644
--- a/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts
+++ b/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts
@@ -4,7 +4,6 @@ import {
   Output,
 } from "@angular/core";
 import {SharedAbstractPresentational} from "@shared/components/presentationals/shared-abstract/shared-abstract.presentational";
-import {RoutesEnum} from "@shared/enums/routes.enum";
 import {
   BehaviorSubject,
   Observable,
@@ -18,9 +17,9 @@ import {ObservableUtil} from "solidify-frontend";
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
 export class HomeMainPageContentPresentational extends SharedAbstractPresentational {
-  private readonly _navigateBS: BehaviorSubject<RoutesEnum> = new BehaviorSubject<RoutesEnum>(undefined);
-  @Output("navigateChange")
-  readonly navigateObs: Observable<RoutesEnum> = ObservableUtil.asObservable(this._navigateBS);
+  private readonly _goToSearchBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);
+  @Output("goToSearch")
+  readonly goToSearchObs: Observable<void> = ObservableUtil.asObservable(this._goToSearchBS);
 
   private readonly _goToDepositOrLoginBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);
   @Output("goToDepositOrLogin")
@@ -31,6 +30,6 @@ export class HomeMainPageContentPresentational extends SharedAbstractPresentatio
   }
 
   goToSearchResult(): void {
-    // TODO
+    this._goToSearchBS.next();
   }
 }
diff --git a/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html b/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html
index ed021aa17..d1a7d6611 100644
--- a/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html
+++ b/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html
@@ -1,5 +1,6 @@
+<div class="active-criteria-sentence">{{labelTranslateEnum.refineResearch | translate}} <span class="number">({{numberCriteriaActive}})</span></div>
+
 <ng-template [ngIf]="numberCriteriaActive > 0">
-  <div class="active-criteria-sentence">{{labelTranslateEnum.refineResearch | translate}} <span class="number">({{numberCriteriaActive}})</span></div>
 
   <div class="panel panel-active-criteria">
     <div class="active-criteria">
@@ -21,7 +22,6 @@
       </mat-chip-list>
     </div>
 
-
     <div class="button-wrapper">
       <button mat-flat-button
               color="primary"
@@ -60,4 +60,14 @@
                                 [isOpen]="true"
   >
   </dlcm-shared-panel-expandable>
+  <dlcm-shared-panel-expandable class="section"
+                                [titleToTranslate]="labelTranslateEnum.publicationYear | translate"
+                                [isOpen]="true"
+  >
+  </dlcm-shared-panel-expandable>
+  <dlcm-shared-panel-expandable class="section"
+                                [titleToTranslate]="labelTranslateEnum.researchArea | translate"
+                                [isOpen]="true"
+  >
+  </dlcm-shared-panel-expandable>
 </div>
diff --git a/src/app/features/home/components/routables/home-page/home-page.routable.html b/src/app/features/home/components/routables/home-page/home-page.routable.html
index 96497256e..ef9ca8e75 100644
--- a/src/app/features/home/components/routables/home-page/home-page.routable.html
+++ b/src/app/features/home/components/routables/home-page/home-page.routable.html
@@ -20,7 +20,7 @@
   <div class="news-wrapper">
     <div class="left-part">
       <dlcm-home-main-page-content class="main-page-content"
-                                   (navigateChange)="navigate($event)"
+                                   (goToSearch)="getToSearch()"
                                    (goToDepositOrLogin)="goToDeposit()"
       ></dlcm-home-main-page-content>
       <dlcm-home-partners class="partner"
diff --git a/src/app/features/home/components/routables/home-page/home-page.routable.ts b/src/app/features/home/components/routables/home-page/home-page.routable.ts
index 95a062982..6ba70330c 100644
--- a/src/app/features/home/components/routables/home-page/home-page.routable.ts
+++ b/src/app/features/home/components/routables/home-page/home-page.routable.ts
@@ -95,4 +95,8 @@ export class HomePageRoutable extends SharedAbstractPresentational implements On
       this._oauthService.initAuthorizationCodeFlow(AppRoutesEnum.deposit);
     }
   }
+
+  getToSearch(): void {
+    this.store.dispatch(new Navigate([RoutesEnum.homeSearch], HomeHelper.getDefaultSearchQueryParams()));
+  }
 }
diff --git a/src/app/features/home/helpers/home.helper.ts b/src/app/features/home/helpers/home.helper.ts
index 6f6246e36..b18dd8d95 100644
--- a/src/app/features/home/helpers/home.helper.ts
+++ b/src/app/features/home/helpers/home.helper.ts
@@ -11,6 +11,10 @@ import {
 export class HomeHelper {
   static SEARCH_QUERY_PARAM: string = "search";
 
+  static getDefaultSearchQueryParams(): any {
+    return {[this.SEARCH_QUERY_PARAM]: "*"};
+  }
+
   static navigateToSearch(store: Store, searchTerm?: string | undefined, url?: string | string[] | undefined): Observable<any> {
     if (isNullOrUndefined(url)) {
       url = RoutesEnum.homeSearch;
diff --git a/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html b/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html
index 699d8ba45..eaf2acc4d 100644
--- a/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html
+++ b/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html
@@ -12,5 +12,6 @@
          [alt]="iconNameEnum[iconInfo.name]"
          class="icon"
     >
+    <!--        SHOULD BE class="image" HERE -->
   </ng-container>
 </ng-template>
\ No newline at end of file
diff --git a/src/app/shared/enums/label-translate.enum.ts b/src/app/shared/enums/label-translate.enum.ts
index 6a8721caf..7150f28b7 100644
--- a/src/app/shared/enums/label-translate.enum.ts
+++ b/src/app/shared/enums/label-translate.enum.ts
@@ -302,6 +302,8 @@ export class LabelTranslateEnum {
   static clearFilters: string = MARK_AS_TRANSLATABLE("general.label.clearFilters");
   static listView: string = MARK_AS_TRANSLATABLE("general.label.listView");
   static tilesView: string = MARK_AS_TRANSLATABLE("general.label.tilesView");
+  static metadataDatacite: string = MARK_AS_TRANSLATABLE("general.label.metadataDatacite");
+  static similarArchive: string = MARK_AS_TRANSLATABLE("general.label.similarArchive");
 
   static hide: string = MARK_AS_TRANSLATABLE("general.link.hide");
   static show: string = MARK_AS_TRANSLATABLE("general.link.show");
diff --git a/src/app/shared/utils/metadata.util.ts b/src/app/shared/utils/metadata.util.ts
index 721d5e51b..bd5317cf1 100644
--- a/src/app/shared/utils/metadata.util.ts
+++ b/src/app/shared/utils/metadata.util.ts
@@ -74,7 +74,7 @@ export class MetadataUtil {
     return this.getInformation(xpath, metadata);
   }
 
-  static getAuthors(metadata: Metadata): string[] {
+  static getContributors(metadata: Metadata): string[] {
     const xpath = "/d:resource/d:creators/d:creator/d:creatorName";
     const results = [];
     const xmlDoc = this.parse(metadata[MetadataEnum.dataciteXml]);
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index 9392d1fbd..3a938f0dd 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -1117,6 +1117,7 @@
       "matchingPeople": "Passende Personen",
       "message": "Nachricht",
       "metadata": "Metadaten",
+      "metadataDatacite": "Datacite-Metadaten",
       "metadataType": "Metadaten-Typ",
       "metadataTypes": "Metadaten-Typen",
       "metadataVersion": "Metadaten-Version",
@@ -1178,6 +1179,7 @@
       "selectLanguage": "Sprache auswählen",
       "sentRequest": "Gesendete Anfrage",
       "sentRequests": "Gesendete Anfragen",
+      "similarArchive": "Ähnliches archiv",
       "sip": "SIP",
       "size": "Größe",
       "source": "Quelle",
@@ -1297,8 +1299,7 @@
         "buttonDisabledReason": {
           "needToBeMember": "Sie müssen Mitglied der Organisationseinheit sein, um diese Aktion durchführen zu können",
           "needToBeSteward": "Sie müssen ein Steward der Organisationseinheit sein, um diese Aktion durchzuführen."
-        },
-        "datacite": "Datacite-Metadaten"
+        }
       }
     }
   },
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 1ebd8629c..030d5e84c 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -1117,6 +1117,7 @@
       "matchingPeople": "Matching people",
       "message": "Message",
       "metadata": "Metadata",
+      "metadataDatacite": "Datacite metadata",
       "metadataType": "Metadata type",
       "metadataTypes": "Metadata types",
       "metadataVersion": "Metadata version",
@@ -1178,6 +1179,7 @@
       "selectLanguage": "Select language",
       "sentRequest": "Sent request",
       "sentRequests": "Sent requests",
+      "similarArchive": "Similar archive",
       "sip": "SIP",
       "size": "Size",
       "source": "Source",
@@ -1297,8 +1299,7 @@
         "buttonDisabledReason": {
           "needToBeMember": "You must be a member of the organizational unit to do this action",
           "needToBeSteward": "You must be Steward of the organizational unit to do this action"
-        },
-        "datacite": "Datacite metadata"
+        }
       }
     }
   },
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 2da552280..321545bb9 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -1117,6 +1117,7 @@
       "matchingPeople": "Personnes pouvant correspondre",
       "message": "Message",
       "metadata": "Métadonnées",
+      "metadataDatacite": "Datacite métadonnées",
       "metadataType": "Type de métadonnées",
       "metadataTypes": "Types de métadonnées",
       "metadataVersion": "Version des métadonnées",
@@ -1178,6 +1179,7 @@
       "selectLanguage": "Sélectionner une langue",
       "sentRequest": "Demande envoyée",
       "sentRequests": "Demandes envoyées",
+      "similarArchive": "Archives similaires",
       "sip": "SIP",
       "size": "Taille",
       "source": "Source",
@@ -1297,8 +1299,7 @@
         "buttonDisabledReason": {
           "needToBeMember": "Vous devez être membre de l'unité organisationnelle pour faire cette action",
           "needToBeSteward": "Vous devez être steward de l'unité organisationnelle pour faire cette action"
-        },
-        "datacite": "Datacite métadonnées"
+        }
       }
     }
   },
-- 
GitLab