From 48705f53b372d48fe5ee0c2488381ec259f85d3b Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Mon, 27 Jan 2020 14:38:00 +0100
Subject: [PATCH] feat: add tooltips in administration forms

---
 .../admin-oai-set-form.presentational.html    | 10 +++++++++
 .../admin-oai-set-form.presentational.ts      |  3 +++
 .../admin-orgunit-form.presentational.html    | 21 ++++++++++++++++---
 .../admin-orgunit-form.presentational.ts      |  3 +++
 .../admin-person-form.presentational.html     |  1 -
 .../deposit-file/deposit-file.routable.ts     | 14 +++++++++++++
 src/assets/i18n/de.json                       | 11 ++++++++++
 src/assets/i18n/en.json                       | 11 ++++++++++
 src/assets/i18n/fr.json                       | 11 ++++++++++
 src/environments/environment.defaults.ts      |  2 +-
 10 files changed, 82 insertions(+), 5 deletions(-)

diff --git a/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.html b/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.html
index b9cece4ec..58c18bdb7 100644
--- a/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.html
+++ b/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.html
@@ -7,6 +7,11 @@
       <mat-form-field *ngIf="getFormControl(formDefinition.spec) as fd">
         <mat-label>{{'admin.oai-set.form.spec' | translate}}</mat-label>
         <input matInput
+               [matTooltip]="'admin.oai-set.tooltips.spec' | translate"
+               [matTooltipPosition]="'left'"
+               [matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
+               aria-label="submission policy tooltip"
+               matTooltipClass="tooltip"
                [solidifyValidation]="errors"
                [formControl]="fd"
                [required]="formValidationHelper.hasRequiredField(fd)"
@@ -39,6 +44,11 @@
       <mat-form-field *ngIf="getFormControl(formDefinition.query) as fd">
         <mat-label>{{'admin.oai-set.form.query' | translate}}</mat-label>
         <input matInput
+               [matTooltip]="'admin.oai-set.tooltips.query' | translate"
+               [matTooltipPosition]="'left'"
+               [matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
+               aria-label="submission policy tooltip"
+               matTooltipClass="tooltip"
                [solidifyValidation]="errors"
                [formControl]="fd"
                [required]="formValidationHelper.hasRequiredField(fd)"
diff --git a/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.ts b/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.ts
index 16cbfffb2..ef847fe36 100644
--- a/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.ts
+++ b/src/app/features/admin/oai-set/components/presentationals/admin-oai-set-form/admin-oai-set-form.presentational.ts
@@ -8,6 +8,7 @@ import {
   Validators,
 } from "@angular/forms";
 import {OaiSet} from "@app/generated-api";
+import {environment} from "@environments/environment";
 import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
 import {BaseFormDefinition} from "@shared/models/base-form-definition.model";
 import {
@@ -24,6 +25,8 @@ import {
 export class AdminOaiSetFormPresentational extends SharedAbstractFormPresentational<OaiSet> {
   formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
 
+  readonly TIME_BEFORE_DISPLAY_TOOLTIP: number = environment.timeBeforeDisplayTooltipOnInput;
+
   constructor(protected readonly _changeDetectorRef: ChangeDetectorRef,
               private readonly _fb: FormBuilder) {
     super(_changeDetectorRef);
diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html
index cfbf5315f..ba1f8b0de 100644
--- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html
+++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html
@@ -15,7 +15,12 @@
         <mat-error #errors></mat-error>
       </mat-form-field>
 
-      <dlcm-shared-multi-select *ngIf="getFormControl(formDefinition.submissionPolicies) as fd"
+      <dlcm-shared-multi-select [matTooltip]="'orgUnit.tooltips.submissionPolicy' | translate"
+                                [matTooltipPosition]="'left'"
+                                [matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
+                                aria-label="submission policy tooltip"
+                                matTooltipClass="tooltip"
+                                *ngIf="getFormControl(formDefinition.submissionPolicies) as fd"
                                 [list]="listSubmissionPolicies"
                                 [formControl]="fd"
                                 [formControlDefault]="getFormControl(formDefinition.defaultSubmissionPolicy)"
@@ -30,7 +35,12 @@
       >
       </dlcm-shared-multi-select>
 
-      <dlcm-shared-multi-select *ngIf="getFormControl(formDefinition.preservationPolicies) as fd"
+      <dlcm-shared-multi-select [matTooltip]="'orgUnit.tooltips.preservationPolicy' | translate"
+                                [matTooltipPosition]="'left'"
+                                [matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
+                                aria-label="preservation policy tooltip"
+                                matTooltipClass="tooltip"
+                                *ngIf="getFormControl(formDefinition.preservationPolicies) as fd"
                                 [list]="listPreservationPolicies"
                                 [formControl]="fd"
                                 [formControlDefault]="getFormControl(formDefinition.defaultPreservationPolicy)"
@@ -45,7 +55,12 @@
       >
       </dlcm-shared-multi-select>
 
-      <dlcm-shared-multi-select *ngIf="getFormControl(formDefinition.disseminationPolicies) as fd"
+      <dlcm-shared-multi-select [matTooltip]="'orgUnit.tooltips.disseminationPolicy' | translate"
+                                [matTooltipPosition]="'left'"
+                                [matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
+                                aria-label="dissemination policy tooltip"
+                                matTooltipClass="tooltip"
+                                *ngIf="getFormControl(formDefinition.disseminationPolicies) as fd"
                                 [list]="listDisseminationPolicies"
                                 [formControl]="fd"
                                 [formControlDefault]="getFormControl(formDefinition.defaultDisseminationPolicy)"
diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
index 9071e7b03..371ffc3f0 100644
--- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
+++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
@@ -19,6 +19,7 @@ import {
   Role,
   SubmissionPolicy,
 } from "@app/generated-api";
+import {environment} from "@environments/environment";
 import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
 import {PersonOrgUnitRoleMode} from "@shared/components/presentationals/shared-person-orgunit-role/shared-person-orgunit-role.presentational";
 import {LocalModelAttributeEnum} from "@shared/enums/model-attribute.enum";
@@ -86,6 +87,8 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
   @Input()
   listRole: Role[];
 
+  readonly TIME_BEFORE_DISPLAY_TOOLTIP: number = environment.timeBeforeDisplayTooltipOnInput;
+
   get personOrgUnitRoleMode(): typeof PersonOrgUnitRoleMode {
     return PersonOrgUnitRoleMode;
   }
diff --git a/src/app/features/admin/person/components/presentationals/admin-person-form/admin-person-form.presentational.html b/src/app/features/admin/person/components/presentationals/admin-person-form/admin-person-form.presentational.html
index 9aec9a139..505415171 100644
--- a/src/app/features/admin/person/components/presentationals/admin-person-form/admin-person-form.presentational.html
+++ b/src/app/features/admin/person/components/presentationals/admin-person-form/admin-person-form.presentational.html
@@ -34,7 +34,6 @@
         >
         <mat-error>{{formValidationHelper.getFormError(fd)}}</mat-error>
       </mat-form-field>
-
       <dlcm-shared-multi-select [list]="listInstitutions"
                                 [formControl]="form.get(formDefinition.institutions)"
                                 [required]="isRequired(formDefinition.institutions)"
diff --git a/src/app/features/deposit/components/routables/deposit-file/deposit-file.routable.ts b/src/app/features/deposit/components/routables/deposit-file/deposit-file.routable.ts
index e7af93fba..bf47d1cee 100644
--- a/src/app/features/deposit/components/routables/deposit-file/deposit-file.routable.ts
+++ b/src/app/features/deposit/components/routables/deposit-file/deposit-file.routable.ts
@@ -227,6 +227,20 @@ export class DepositFileRoutable extends SharedAbstractDetailEditRoutable<Deposi
         component: DataTableComponentEnum.conformityLevelStar,
         filterEnum: ComplianceLevelEnumHelper.getListKeyValue(),
       },
+      {
+        field: "status",
+        header: StringUtil.stringEmpty,
+        type: FieldTypeEnum.singleSelect,
+        order: OrderEnum.none,
+        sortableField: "dataFile.status" as any,
+        filterableField: "dataFile.status" as any,
+        isSortable: false,
+        isFilterable: false,
+        translate: false,
+        component: DataTableComponentEnum.dataFileQuickStatus,
+        width: "35px",
+        // filterEnum: ComplianceLevelEnumHelper.getListKeyValue(),
+      },
     ];
   }
 
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index cfebcda1e..e82d77828 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -289,6 +289,10 @@
           "name": "Name",
           "spec": "Spec"
         }
+      },
+      "tooltips": {
+        "query": "admin.oai-set.tooltips.query",
+        "spec": "admin.oai-set.tooltips.spec"
       }
     },
     "oauth2": {
@@ -1619,6 +1623,13 @@
       }
     }
   },
+  "orgUnit": {
+    "tooltips": {
+      "disseminationPolicy": "orgUnit.tooltips.disseminationPolicy",
+      "preservationPolicy": "orgUnit.tooltips.preservationPolicy",
+      "submissionPolicy": "orgUnit.tooltips.submissionPolicy"
+    }
+  },
   "organizationalUnit": {
     "closingDate": "Closing Date",
     "description": "Description",
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index cfebcda1e..66541d70b 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -289,6 +289,10 @@
           "name": "Name",
           "spec": "Spec"
         }
+      },
+      "tooltips": {
+        "query": "Query to search for the OAI set. Only works within this repository.",
+        "spec": "The OAI set's identifier. Must be lower case."
       }
     },
     "oauth2": {
@@ -1619,6 +1623,13 @@
       }
     }
   },
+  "orgUnit": {
+    "tooltips": {
+      "disseminationPolicy": "Sets a dissemination policy for the organizational unit",
+      "preservationPolicy": "Sets the organizational unit's available preservation policies.",
+      "submissionPolicy": "Sets the organizational unit's available submission policies:\n\n1) Deposit without approval: \nThe archiving process will automatically start when the deposit is submitted.\n\n2) Deposit with approval: \nWhen the deposit is submitted, it will be sent to validation, where an approver or higher will need to approve it for archiving."
+    }
+  },
   "organizationalUnit": {
     "closingDate": "Closing Date",
     "description": "Description",
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 23198650b..9a10a7718 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -289,6 +289,10 @@
           "name": "Nom",
           "spec": "Spec"
         }
+      },
+      "tooltips": {
+        "query": "Requête permettant de rechercher le set OAI au sein de cette plateforme",
+        "spec": "L'identifiant de ce set OAI. Il doit être écrit en minuscule"
       }
     },
     "oauth2": {
@@ -1619,6 +1623,13 @@
       }
     }
   },
+  "orgUnit": {
+    "tooltips": {
+      "disseminationPolicy": "Défini une politique de dissémination pour cette unité organisationnelle",
+      "preservationPolicy": "Défini quelles politiques de préservation seront disponibles pour cette unité organisationnelle",
+      "submissionPolicy": "Défini quelles politiques de soumission seront disponibles pour cette unité organisationnelle :\n\n1) 'Deposit without approval' : \nLe processus d'archivage sera automatiquement déclenché une fois le dépôt soumis.\n\n2) 'Deposit with approval' : \nUne fois le dépôt soumis, il sera envoyé en validation, où une personne ayant au moins le rôle 'approver' devra l'approuver avant que le processus d'archivage ne se déclenche."
+    }
+  },
   "organizationalUnit": {
     "closingDate": "Date de fermeture",
     "description": "Description",
diff --git a/src/environments/environment.defaults.ts b/src/environments/environment.defaults.ts
index f10d29233..f3118807d 100644
--- a/src/environments/environment.defaults.ts
+++ b/src/environments/environment.defaults.ts
@@ -90,7 +90,7 @@ export const defaultEnvironment: DlcmEnvironment = {
 
   // Tooltip duration
   timeBeforeDisplayTooltipOnDataTable: 500,
-  timeBeforeDisplayTooltipOnInput: 500,
+  timeBeforeDisplayTooltipOnInput: 0,
 
   doiLink: "https://doi.org/",
 
-- 
GitLab