From a88d78ad81cdafee9976dd8e3ede05914bc344c7 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Mon, 23 Nov 2020 19:51:09 +0100
Subject: [PATCH] FEAT #15407 TIME 1:30 Add associated documents

---
 src/frontend/app/app.module.ts                |   2 +
 .../associated-documents.component.html       |  24 ++++
 .../associated-documents.component.scss       | 111 ++++++++++++++++++
 .../associated-documents.component.ts         |  23 ++++
 .../app/document/document.component.html      |   7 +-
 .../app/document/document.component.ts        |  20 ++--
 src/frontend/app/sidebar/sidebar.component.ts |  15 ---
 7 files changed, 174 insertions(+), 28 deletions(-)
 create mode 100644 src/frontend/app/document/associated-documents/associated-documents.component.html
 create mode 100644 src/frontend/app/document/associated-documents/associated-documents.component.scss
 create mode 100644 src/frontend/app/document/associated-documents/associated-documents.component.ts

diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts
index 6aafe8dce3..6accd557d5 100755
--- a/src/frontend/app/app.module.ts
+++ b/src/frontend/app/app.module.ts
@@ -49,6 +49,7 @@ import { OverlayComponent } from './overlay/overlay.component';
 import { VisaWorkflowComponent } from './document/visa-workflow/visa-workflow.component';
 import { DocumentListComponent } from './document/document-list/document-list.component';
 import { MainDocumentDetailComponent } from './document/main-document-detail/main-document-detail.component';
+import { AssociatedDocumentsComponent } from './document/associated-documents/associated-documents.component';
 import { UpdatePasswordComponent } from './login/updatePassword/updatePassword.component';
 import { PasswordModificationComponent } from './login/passwordModification/password-modification.component';
 import { VisaWorkflowModelsComponent } from './document/visa-workflow/models/visa-workflow-models.component';
@@ -109,6 +110,7 @@ import { SortPipe } from './plugins/sorting.pipe';
     VisaWorkflowComponent,
     DocumentListComponent,
     MainDocumentDetailComponent,
+    AssociatedDocumentsComponent,
     AdministrationComponent,
     UsersListComponent,
     UserComponent,
diff --git a/src/frontend/app/document/associated-documents/associated-documents.component.html b/src/frontend/app/document/associated-documents/associated-documents.component.html
new file mode 100644
index 0000000000..70a77aca1e
--- /dev/null
+++ b/src/frontend/app/document/associated-documents/associated-documents.component.html
@@ -0,0 +1,24 @@
+<ion-header [translucent]="true">
+    <ion-toolbar color="primary">
+        <ion-buttons slot="start">
+            <ion-button disabled>
+                <ion-icon slot="icon-only" name="link-outline"></ion-icon>
+            </ion-button>
+        </ion-buttons>
+        <ion-title class="ion-text-center"><b class="secondary">{{associatedDocuments?.length}}</b>&nbsp;{{'lang.associatedDocuments' | translate}}</ion-title>
+    </ion-toolbar>
+</ion-header>
+
+<ion-content>
+    <div style="display: flex;flex-direction: column;height: 100%;">
+        <ion-list>
+            <ion-item *ngFor="let document of associatedDocuments" class="doc-item" (click)="goTo(document.id)">
+                <div>
+                    <ion-label class="sub-label">{{document.reference}}</ion-label>
+                    <ion-label class="ion-text-wrap" color="primary">{{document.title | shorten: 50: '...'}}</ion-label>
+                </div>
+                <ion-icon slot="end" color="medium" name="arrow-forward-outline"></ion-icon>
+            </ion-item>
+        </ion-list>
+    </div>
+</ion-content>
diff --git a/src/frontend/app/document/associated-documents/associated-documents.component.scss b/src/frontend/app/document/associated-documents/associated-documents.component.scss
new file mode 100644
index 0000000000..54e432aff3
--- /dev/null
+++ b/src/frontend/app/document/associated-documents/associated-documents.component.scss
@@ -0,0 +1,111 @@
+@import '../../../css/vars.scss';
+
+.mat-list-item {
+    height: auto !important;
+    text-align: center;
+}
+
+.mat-card {
+    box-shadow: none;
+    border: solid 1px #E0E0E0;
+}
+
+.infosPj {
+    background: #F9F9F9;
+    border-top: solid 1px rgba(0, 0, 0, 0.12);
+    position: absolute;
+    width: 100%;
+    bottom: 0;
+    padding: 5px;
+
+    ::ng-deep.mat-expansion-panel-body {
+        padding: 0px;
+    }
+
+    ::ng-deep.mat-form-field-label {
+        color: $primary;
+    }
+}
+
+.subInfos {
+    display: block;
+    font-size: 12px;
+    color: $primary;
+    font-weight: bold;
+}
+
+.subInfosBottom {
+    font-size: 12px;
+    color: #666;
+}
+
+.mat-icon {
+    height: auto;
+}
+
+.pjToolsContent {
+    position: absolute;
+    border: solid 1px #E0E0E0;
+    border-bottom-left-radius: 5px;
+    background: white;
+    padding: 10px;
+    font-weight: 600;
+    color: #135F7F;
+    font-size: 14px;
+    top: 10px;
+}
+
+.current {
+    box-shadow: 0px 0px 20px 0px #656565;
+}
+
+.panel-header {
+    box-shadow: 0px 0px 10px 0px #656565;
+    color: white;
+    background: $primary;
+    height: 65px;
+    display: flex;
+    justify-content: center;
+    position: relative;
+    font-size: 20px;
+    align-items: center;
+}
+.pjListContent {
+    padding-left: 30px;
+    padding-right: 30px;
+    flex: 1;
+    overflow: auto;
+}
+.panel-content {
+    display: flex;
+    flex-direction: column;
+    position: relative;
+    height: 100%;
+    overflow: hidden;
+}
+
+.closePanel {
+    position: absolute;
+    left: 0px;
+    font-size: 24px;
+}
+
+img {
+    pointer-events: none;
+}
+
+.secondary {
+    color: var(--ion-color-secondary);
+}
+
+.doc-item {
+    --inner-padding-bottom: 10px;
+    --inner-padding-top: 10px;
+    cursor: pointer;
+}
+
+.sub-label {
+    font-size: 11px;
+    --color: var(--ion-color-medium);
+}
+  
\ No newline at end of file
diff --git a/src/frontend/app/document/associated-documents/associated-documents.component.ts b/src/frontend/app/document/associated-documents/associated-documents.component.ts
new file mode 100644
index 0000000000..ce4adb8318
--- /dev/null
+++ b/src/frontend/app/document/associated-documents/associated-documents.component.ts
@@ -0,0 +1,23 @@
+import { Component, Input, OnInit, Output, EventEmitter, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+
+@Component({
+    selector: 'app-associated-documents',
+    templateUrl: 'associated-documents.component.html',
+    styleUrls: ['associated-documents.component.scss'],
+})
+export class AssociatedDocumentsComponent implements OnInit {
+
+    @Input() associatedDocuments: any;
+
+    constructor(
+        public router: Router
+    ) { }
+
+    ngOnInit(): void {
+    }
+
+    goTo(id: number) {
+      this.router.navigate([`/documents/${id}`]);
+  }
+}
diff --git a/src/frontend/app/document/document.component.html b/src/frontend/app/document/document.component.html
index d6724986b1..ad1a3d03a9 100755
--- a/src/frontend/app/document/document.component.html
+++ b/src/frontend/app/document/document.component.html
@@ -16,9 +16,9 @@
                     {{mainDocument.attachments.length + 1}}
                 </ion-badge>
             </ion-segment-button>
-            <ion-segment-button value="linkeddoc"
+            <ion-segment-button value="associatedDocuments"
                 *ngIf="mainDocument.linkedDocuments !== undefined && mainDocument.linkedDocuments.length > 0"
-                (click)="openDocumentList();">
+                (click)="openAssociatedDocuments();">
                 <ion-label color="primary">{{'lang.associatedDocuments' | translate | ucfirst}}</ion-label>
                 <ion-icon color="primary" name="link-outline"></ion-icon>
                 <ion-badge color="danger" style="position: absolute;top: 10px;right: 40%;">
@@ -136,6 +136,9 @@
     <app-document-list #appDocumentList [currentDocId]="currentDoc" [snavRightComponent]="this.snavRight"
         [docList]="docList" *ngIf="signaturesService.sideNavRigtDatas.mode == 'documentList'"
         (triggerEvent)="loadDoc($event)" style="display: contents;"></app-document-list>
+    <app-associated-documents #appAssociatedDocuments [snavRightComponent]="this.snavRight"
+        [associatedDocuments]="mainDocument.linkedDocuments" *ngIf="signaturesService.sideNavRigtDatas.mode == 'associatedDocuments'"
+        style="display: contents;"></app-associated-documents>
     <app-main-document-detail #appMainDocumentDetail [snavRightComponent]="this.snavRight" [mainDocument]="mainDocument"
         *ngIf="signaturesService.sideNavRigtDatas.mode == 'mainDocumentDetail'" style="display: contents;">
     </app-main-document-detail>
diff --git a/src/frontend/app/document/document.component.ts b/src/frontend/app/document/document.component.ts
index 932c1db3fb..b5df95012e 100755
--- a/src/frontend/app/document/document.component.ts
+++ b/src/frontend/app/document/document.component.ts
@@ -815,6 +815,15 @@ export class DocumentComponent implements OnInit {
         };
     }
 
+    openAssociatedDocuments() {
+        this.menu.open('right-menu');
+        this.signaturesService.sideNavRigtDatas = {
+            mode: 'associatedDocuments',
+            width: '450px',
+            locked: false,
+        };
+    }
+
     openMainDocumentDetail() {
         this.menu.open('right-menu');
         this.signaturesService.sideNavRigtDatas = {
@@ -844,17 +853,6 @@ export class DocumentComponent implements OnInit {
         }
     }
 
-    gotTo(documentId: number, i: any) {
-        this.router.navigate(['/documents/' + documentId]);
-        this.signaturesService.mainDocumentId = documentId;
-        // this.signaturesService.indexDocumentsList = i;
-        this.signaturesService.sideNavRigtDatas = {
-            mode: 'mainDocumentDetail',
-            width: '450px',
-            locked: false,
-        };
-    }
-
     ionViewWillLeave() {
         this.signaturesService.detachTemplate('rightContent');
     }
diff --git a/src/frontend/app/sidebar/sidebar.component.ts b/src/frontend/app/sidebar/sidebar.component.ts
index 649e5e66af..aba0017f93 100755
--- a/src/frontend/app/sidebar/sidebar.component.ts
+++ b/src/frontend/app/sidebar/sidebar.component.ts
@@ -63,21 +63,6 @@ export class SidebarComponent implements OnInit {
         this.filter('');
     }
 
-
-    gotTo(documentId: number, i: any) {
-        this.router.navigate(['/documents/' + documentId]);
-        this.signaturesService.mainDocumentId = documentId;
-        this.signaturesService.indexDocumentsList = i;
-        this.signaturesService.sideNavRigtDatas = {
-            mode: 'mainDocumentDetail',
-            width: '450px',
-            locked: false,
-        };
-        if (this.signaturesService.mobileMode) {
-            // this.sidenav.close();
-        }
-    }
-
     async openProfile() {
         const modal = await this.modalController.create({
             component: ProfileComponent,
-- 
GitLab