From ccbece3b57b47da356e7546b4e18769708143195 Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Fri, 23 Aug 2019 15:11:12 +0200 Subject: [PATCH] FEAT #11291 TIME 5:30 add classify folder action --- .../app/actions/actions-list.component.html | 2 + .../app/actions/actions-list.component.scss | 4 +- .../app/actions/actions-list.component.ts | 12 ++++- src/frontend/app/app.module.ts | 4 +- .../folder-menu/folder-menu.component.html | 7 +++ .../folder-menu/folder-menu.component.scss | 18 +++++++ .../folder-menu/folder-menu.component.ts | 53 +++++++++++++++++++ .../app/list/basket-list.component.html | 4 +- src/frontend/lang/lang-en.ts | 1 + src/frontend/lang/lang-fr.ts | 1 + src/frontend/lang/lang-nl.ts | 1 + 11 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 src/frontend/app/folder/folder-menu/folder-menu.component.html create mode 100644 src/frontend/app/folder/folder-menu/folder-menu.component.scss create mode 100644 src/frontend/app/folder/folder-menu/folder-menu.component.ts diff --git a/src/frontend/app/actions/actions-list.component.html b/src/frontend/app/actions/actions-list.component.html index 66acb0e6d74..9b2757be757 100644 --- a/src/frontend/app/actions/actions-list.component.html +++ b/src/frontend/app/actions/actions-list.component.html @@ -13,4 +13,6 @@ mat-menu-item (click)="launchEvent(action);"> <span>{{action.label_action}}</span> </button> + <mat-divider></mat-divider> + <folder-menu [resIds]="selectedRes" (refreshList)="refreshList()"></folder-menu> </mat-menu> \ No newline at end of file diff --git a/src/frontend/app/actions/actions-list.component.scss b/src/frontend/app/actions/actions-list.component.scss index 87be79ea8a1..2a110d93138 100644 --- a/src/frontend/app/actions/actions-list.component.scss +++ b/src/frontend/app/actions/actions-list.component.scss @@ -1,3 +1,5 @@ +@import '../../css/vars.scss'; + .mat-icon { height: auto; } @@ -13,4 +15,4 @@ padding-top: 0; padding-bottom: 0; } -} +} \ No newline at end of file diff --git a/src/frontend/app/actions/actions-list.component.ts b/src/frontend/app/actions/actions-list.component.ts index 80208826c20..37babcc36a1 100644 --- a/src/frontend/app/actions/actions-list.component.ts +++ b/src/frontend/app/actions/actions-list.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angu import { HttpClient } from '@angular/common/http'; import { LANG } from '../translate.component'; import { NotificationService } from '../notification.service'; -import { MatDialog } from '@angular/material/dialog'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { MatMenuTrigger } from '@angular/material/menu'; import { ConfirmActionComponent } from './confirm-action/confirm-action.component'; @@ -21,6 +21,8 @@ import { Router } from '@angular/router'; import { ViewDocActionComponent } from './view-doc-action/view-doc-action.component'; import { RedirectActionComponent } from './redirect-action/redirect-action.component'; import { SendShippingActionComponent } from './send-shipping-action/send-shipping-action.component'; +import { map, tap } from 'rxjs/operators'; +import { ConfirmComponent } from '../../plugins/modal/confirm.component'; @Component({ selector: 'app-actions-list', @@ -51,8 +53,12 @@ export class ActionsListComponent implements OnInit { @Input('contextMode') contextMode: boolean; @Input('currentBasketInfo') currentBasketInfo: any; + @Output('refreshEvent') refreshEvent = new EventEmitter<string>(); + constructor(public http: HttpClient, private notify: NotificationService, public dialog: MatDialog, private router: Router) { } + dialogRef: MatDialogRef<any>; + ngOnInit(): void { } open(x: number, y: number, row: any) { @@ -490,4 +496,8 @@ export class ActionsListComponent implements OnInit { this.http.put('../../rest/resourcesList/users/' + this.currentBasketInfo.ownerId + '/groups/' + this.currentBasketInfo.groupId + '/baskets/' + this.currentBasketInfo.basketId + '/unlock', { resources: this.arrRes }) .subscribe((data: any) => { }, (err: any) => { }); } + + refreshList() { + this.refreshEvent.emit(); + } } diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts index c1561513cff..d27b20a55d1 100755 --- a/src/frontend/app/app.module.ts +++ b/src/frontend/app/app.module.ts @@ -26,6 +26,7 @@ import { ActionsListComponent } from './actions/actions-list.com import { FolderTreeComponent } from './folder/folder-tree.component'; import { FolderDocumentListComponent } from './folder/document-list/folder-document-list.component'; import { PanelFolderComponent } from './folder/panel/panel-folder.component'; +import { FolderMenuComponent } from './folder/folder-menu/folder-menu.component'; /*ACTIONS PAGES */ import { ConfirmActionComponent } from './actions/confirm-action/confirm-action.component'; @@ -117,7 +118,8 @@ import { PrintSeparatorComponent } from './separator/prin PrintSeparatorComponent, FolderTreeComponent, PanelFolderComponent, - FolderDocumentListComponent + FolderDocumentListComponent, + FolderMenuComponent ], entryComponents: [ CustomSnackbarComponent, diff --git a/src/frontend/app/folder/folder-menu/folder-menu.component.html b/src/frontend/app/folder/folder-menu/folder-menu.component.html new file mode 100644 index 00000000000..bfd26e6b94f --- /dev/null +++ b/src/frontend/app/folder/folder-menu/folder-menu.component.html @@ -0,0 +1,7 @@ +<button mat-menu-item [matMenuTriggerFor]="folders" class="folderAction" (menuOpened)="getFolders()"> + <mat-icon class="fa fa-folder fa-2x"></mat-icon> + <span>{{lang.classifyIn}}</span> +</button> +<mat-menu #folders="matMenu"> + <button mat-menu-item *ngFor="let folder of foldersList | sortBy : 'label'" class="labelFolder" [class.private]="!folder.public" (click)="classifyDocuments(folder)" [title]="folder.label">{{folder.label}}</button> +</mat-menu> \ No newline at end of file diff --git a/src/frontend/app/folder/folder-menu/folder-menu.component.scss b/src/frontend/app/folder/folder-menu/folder-menu.component.scss new file mode 100644 index 00000000000..61643c31d02 --- /dev/null +++ b/src/frontend/app/folder/folder-menu/folder-menu.component.scss @@ -0,0 +1,18 @@ +@import '../../../css/vars.scss'; + +.folderAction { + font-style: italic; + + .mat-icon { + font-size:20px; + color: $primary; + } +} + +.labelFolder { + color: $primary; +} + +.private { + color: $warn; +} \ No newline at end of file diff --git a/src/frontend/app/folder/folder-menu/folder-menu.component.ts b/src/frontend/app/folder/folder-menu/folder-menu.component.ts new file mode 100644 index 00000000000..1682a30c24f --- /dev/null +++ b/src/frontend/app/folder/folder-menu/folder-menu.component.ts @@ -0,0 +1,53 @@ +import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; +import { LANG } from '../../translate.component'; +import { HttpClient } from '@angular/common/http'; +import { map, tap, catchError } from 'rxjs/operators'; +import { of } from 'rxjs'; +import { NotificationService } from '../../notification.service'; + +@Component({ + selector: 'folder-menu', + templateUrl: "folder-menu.component.html", + styleUrls: ['folder-menu.component.scss'], + providers: [NotificationService], +}) +export class FolderMenuComponent implements OnInit { + + lang: any = LANG; + + foldersList: any[] = []; + @Input('resIds') resIds: number[]; + + @Output('refreshList') refreshList = new EventEmitter<string>(); + + constructor( + public http: HttpClient, + private notify: NotificationService + ) { } + + ngOnInit(): void { } + + getFolders() { + this.http.get("../../rest/folders").pipe( + map((data: any) => data.folders), + tap((data: any) => { + this.foldersList = data; + }), + ).subscribe(); + } + + classifyDocuments(folder: any) { + + this.http.post('../../rest/folders/' + folder.id + '/resources', { resources: this.resIds }).pipe( + tap(() => { + this.refreshList.emit(); + this.notify.success('Courrier classé'); + }), + catchError((err) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + +} diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html index 74bead9e0bc..68916c2cf6b 100644 --- a/src/frontend/app/list/basket-list.component.html +++ b/src/frontend/app/list/basket-list.component.html @@ -47,7 +47,7 @@ </div> <div class="table-head-tool"> <span> - <app-actions-list #actionsList (triggerEvent)="refreshDaoAfterAction()" + <app-actions-list #actionsList (refreshEvent)="refreshDao()" [contextMode]="false" [totalRes]="allResInBasket.length" [selectedRes]="selectedRes" [currentBasketInfo]="currentBasketInfo"></app-actions-list> </span> @@ -199,6 +199,6 @@ <mat-divider></mat-divider> </mat-sidenav> </mat-sidenav-container> - <app-actions-list (triggerEvent)="refreshDaoAfterAction()" #actionsListContext [contextMode]="true" + <app-actions-list (refreshEvent)="refreshDao()" #actionsListContext [contextMode]="true" [totalRes]="allResInBasket.length" [selectedRes]="selectedRes" [currentBasketInfo]="currentBasketInfo"> </app-actions-list> \ No newline at end of file diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index a7d8b0c3131..4015e67a246 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1055,4 +1055,5 @@ export const LANG_EN = { "classifyInFolder" : "Classify this mail in a folder", "getFolders" : "Folders (fixed postion)", "getFoldersSample" : "Litigation", + "classifyIn" : "Classify in ...", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 7534bb9d8c0..6bd32e43956 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1092,4 +1092,5 @@ export const LANG_FR = { "classifyInFolder" : "Placer le courrier suivant dans un dossier", "getFolders" : "Dossiers (emplacement fixe)", "getFoldersSample" : "Litiges", + "classifyIn" : "Classer dans ...", }; \ No newline at end of file diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index ccaea40c66e..c9288357cd6 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1081,4 +1081,5 @@ export const LANG_NL = { "classifyInFolder" : "Classify this mail in a folder", //_TO_TRANSLATE "getFolders" : "Folders (fixed postion)", //_TO_TRANSLATE "getFoldersSample" : "Litigation", //_TO_TRANSLATE + "classifyIn" : "Classify in ...", //_TO_TRANSLATE }; -- GitLab