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> {{'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