diff --git a/src/frontend/app/actions/actions-list.component.html b/src/frontend/app/actions/actions-list.component.html index 66acb0e6d74164557290c8b7b4ab702ca0a96090..9b2757be75711705d76a0bd620ae3e9a7e83db08 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 87be79ea8a163cee55ad6efce89c4d87746e8bad..2a110d93138f6a6586e4643d1bf045d08c78c2ce 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 80208826c20561c94517ed27e5ac4c48d6ae35c9..37babcc36a19e3351ad483136f8b9be927140c85 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 c1561513cff42f783b7a7c53ee19f1e1d574619e..d27b20a55d16d40b50bcd264dd194194bcee0fdc 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 0000000000000000000000000000000000000000..bfd26e6b94fb1565f51b2d352376d193d4a1a5ef --- /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 0000000000000000000000000000000000000000..61643c31d02a3721325cc7d1bca10c3807668a48 --- /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 0000000000000000000000000000000000000000..1682a30c24fa76ed3631cbe41f5a64ef098483fa --- /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 74bead9e0bcccac56458dba2ac2792143d1cf98e..68916c2cf6b0df5d9fb7fd7ad791520029201ef7 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 a7d8b0c31315ff001baad2c7949bdb55d4d5ecd0..4015e67a2469ad09bb318929f173802afd188b0d 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 7534bb9d8c058e5b56ec8ed585af26a60050d576..6bd32e43956b6bf4935b5698b4a5f57cc4c675ad 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 ccaea40c66e2665fd3134deda159204c14948921..c9288357cd665420c949502822fcaf6ecdd0fbd0 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 };