From 72d5a8eed09e038f992a02b4defbdaeeba79f8d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Agneray?= <francois.agneray@lam.fr>
Date: Wed, 25 Aug 2021 12:41:12 +0200
Subject: [PATCH] Custom label for Instance navbar (admin)

---
 .../documentation-form-group.component.html        |  6 +++++-
 .../components/instance/instance-form.component.ts | 12 +++++++++++-
 .../instance/search-form-group.component.html      | 14 +++++++++++---
 .../instance/search-form-group.component.ts        | 10 ++++++++++
 client/src/app/instance/instance.component.ts      |  6 +++---
 client/src/app/metamodel/models/instance.model.ts  |  3 +++
 6 files changed, 43 insertions(+), 8 deletions(-)

diff --git a/client/src/app/admin/components/instance/documentation-form-group.component.html b/client/src/app/admin/components/instance/documentation-form-group.component.html
index 43949bec..38086d74 100644
--- a/client/src/app/admin/components/instance/documentation-form-group.component.html
+++ b/client/src/app/admin/components/instance/documentation-form-group.component.html
@@ -1,8 +1,12 @@
 <form [formGroup]="form" novalidate>
     <accordion-group heading="Documentation">
-        <div class="custom-control custom-switch">
+        <div class="custom-control custom-switch mb-2">
             <input class="custom-control-input" type="checkbox" id="documentation_allowed" name="documentation_allowed" formControlName="documentation_allowed">
             <label class="custom-control-label" for="documentation_allowed">Documentation allowed</label>
         </div>
+        <div class="form-group">
+            <label for="documentation_label">Label</label>
+            <input type="text" class="form-control" id="documentation_label" formControlName="documentation_label">
+        </div>
     </accordion-group>
 </form>
\ No newline at end of file
diff --git a/client/src/app/admin/components/instance/instance-form.component.ts b/client/src/app/admin/components/instance/instance-form.component.ts
index 450692ba..8d440376 100644
--- a/client/src/app/admin/components/instance/instance-form.component.ts
+++ b/client/src/app/admin/components/instance/instance-form.component.ts
@@ -32,12 +32,15 @@ export class InstanceFormComponent implements OnInit {
 
     public searchFormGroup = new FormGroup({
         search_by_criteria_allowed: new FormControl(true),
+        search_by_criteria_label: new FormControl({value: 'Search', disabled: true}),
         search_multiple_allowed: new FormControl(false),
+        search_multiple_label: new FormControl({value: 'Search multiple', disabled: true}),
         search_multiple_all_datasets_selected: new FormControl({value: false, disabled: true})
     });
 
     public documentationFormGroup = new FormGroup({
-        documentation_allowed: new FormControl(false)
+        documentation_allowed: new FormControl(false),
+        documentation_label: new FormControl({value: 'Documentation', disabled: true})
     });
 
     public form = new FormGroup({
@@ -55,8 +58,15 @@ export class InstanceFormComponent implements OnInit {
         if (this.instance) {
             this.form.patchValue(this.instance);
             if (this.searchFormGroup.controls.search_multiple_allowed.value) {
+                this.searchFormGroup.controls.search_multiple_label.enable();
                 this.searchFormGroup.controls.search_multiple_all_datasets_selected.enable();
             }
+            if (this.searchFormGroup.controls.search_by_criteria_allowed.value) {
+                this.searchFormGroup.controls.search_by_criteria_label.enable();
+            }
+            if (this.documentationFormGroup.controls.documentation_allowed) {
+                this.documentationFormGroup.controls.documentation_label.enable();
+            }
         }
     }
 
diff --git a/client/src/app/admin/components/instance/search-form-group.component.html b/client/src/app/admin/components/instance/search-form-group.component.html
index 4caf2ca7..1c12343c 100644
--- a/client/src/app/admin/components/instance/search-form-group.component.html
+++ b/client/src/app/admin/components/instance/search-form-group.component.html
@@ -1,13 +1,21 @@
 <form [formGroup]="form" novalidate>
     <accordion-group heading="Search">
-        <div class="custom-control custom-switch">
-            <input class="custom-control-input" type="checkbox" id="search_by_criteria_allowed" name="search_by_criteria_allowed" formControlName="search_by_criteria_allowed">
+        <div class="custom-control custom-switch mb-2">
+            <input class="custom-control-input" type="checkbox" id="search_by_criteria_allowed" name="search_by_criteria_allowed" formControlName="search_by_criteria_allowed" (change)="checkDisableSearchByCriteriaAllowed()">
             <label class="custom-control-label" for="search_by_criteria_allowed">Classic search allowed</label>
         </div>
-        <div class="custom-control custom-switch">
+        <div class="form-group">
+            <label for="search_by_criteria_label">Label</label>
+            <input type="text" class="form-control" id="search_by_criteria_label" formControlName="search_by_criteria_label">
+        </div>
+        <div class="custom-control custom-switch mb-2">
             <input class="custom-control-input" type="checkbox" id="search_multiple_allowed" name="search_multiple_allowed" formControlName="search_multiple_allowed" (change)="checkDisableAllDatasetsSelected()">
             <label class="custom-control-label" for="search_multiple_allowed">Search multiple allowed</label>
         </div>
+        <div class="form-group">
+            <label for="search_multiple_label">Label</label>
+            <input type="text" class="form-control" id="search_multiple_label" formControlName="search_multiple_label">
+        </div>
         <div class="custom-control custom-switch">
             <input class="custom-control-input"
                 type="checkbox"
diff --git a/client/src/app/admin/components/instance/search-form-group.component.ts b/client/src/app/admin/components/instance/search-form-group.component.ts
index 3751aa37..4a96c1bf 100644
--- a/client/src/app/admin/components/instance/search-form-group.component.ts
+++ b/client/src/app/admin/components/instance/search-form-group.component.ts
@@ -17,10 +17,20 @@ import { FormGroup } from '@angular/forms';
 export class SearchFormGroupComponent {
     @Input() form: FormGroup;
 
+    checkDisableSearchByCriteriaAllowed() {
+        if (this.form.controls.search_by_criteria_allowed.value) {
+            this.form.controls.search_by_criteria_label.enable();
+        } else {
+            this.form.controls.search_by_criteria_label.disable();
+        }
+    }
+
     checkDisableAllDatasetsSelected() {
         if (this.form.controls.search_multiple_allowed.value) {
+            this.form.controls.search_multiple_label.enable();
             this.form.controls.search_multiple_all_datasets_selected.enable();
         } else {
+            this.form.controls.search_multiple_label.disable();
             this.form.controls.search_multiple_all_datasets_selected.setValue(false);
             this.form.controls.search_multiple_all_datasets_selected.disable();
         }
diff --git a/client/src/app/instance/instance.component.ts b/client/src/app/instance/instance.component.ts
index b6f2875b..202dddf8 100644
--- a/client/src/app/instance/instance.component.ts
+++ b/client/src/app/instance/instance.component.ts
@@ -54,13 +54,13 @@ export class InstanceComponent implements OnInit, OnDestroy {
         Promise.resolve(null).then(() => this.store.dispatch(surveyActions.loadSurveyList()));
         this.instanceSubscription = this.instance.subscribe(instance => {
             if (instance.config.search.search_by_criteria_allowed) {
-                this.links.push({ label: 'Search', icon: 'fas fa-search', routerLink: 'search' });
+                this.links.push({ label: instance.config.search.search_by_criteria_label, icon: 'fas fa-search', routerLink: 'search' });
             }
             if (instance.config.search.search_multiple_allowed) {
-                this.links.push({ label: 'Search multiple', icon: 'fas fa-search-plus', routerLink: 'search-multiple' });
+                this.links.push({ label: instance.config.search.search_multiple_label, icon: 'fas fa-search-plus', routerLink: 'search-multiple' });
             }
             if (instance.config.documentation.documentation_allowed) {
-                this.links.push({ label: 'Documentation', icon: 'fas fa-question', routerLink: 'documentation' });
+                this.links.push({ label: instance.config.documentation.documentation_label, icon: 'fas fa-question', routerLink: 'documentation' });
             }
             if (instance.config.design.design_favicon !== '') {
                 this.favIcon.href = `${this.config.apiUrl}/download-instance-file/${instance.name}/${instance.config.design.design_favicon}`;
diff --git a/client/src/app/metamodel/models/instance.model.ts b/client/src/app/metamodel/models/instance.model.ts
index 6faeb2e7..8967807a 100644
--- a/client/src/app/metamodel/models/instance.model.ts
+++ b/client/src/app/metamodel/models/instance.model.ts
@@ -19,11 +19,14 @@ export interface Instance {
         };
         search: {
             search_by_criteria_allowed: boolean;
+            search_by_criteria_label: string;
             search_multiple_allowed: boolean;
+            search_multiple_label: string;
             search_multiple_all_datasets_selected: boolean;
         };
         documentation: {
             documentation_allowed: boolean;
+            documentation_label: string;
         };
     };
     nb_dataset_families: number;
-- 
GitLab