diff --git a/src/frontend/app/folder/document-list/folder-document-list.component.html b/src/frontend/app/folder/document-list/folder-document-list.component.html index b276fce86704911fb2f919cc317243685ea66918..ae6820341a249613d40543f653a0676062b4f88c 100644 --- a/src/frontend/app/folder/document-list/folder-document-list.component.html +++ b/src/frontend/app/folder/document-list/folder-document-list.component.html @@ -7,7 +7,7 @@ <menu-nav></menu-nav> <basket-home *ngIf="homeData" #basketHome [homeData]="homeData" [snavL]="snav"></basket-home> <mat-divider></mat-divider> - <panel-folder #panelFolder [selectedId]="folderInfo.id"></panel-folder> + <panel-folder #panelFolder *ngIf="folderInfo.id !== '' && folderInfo.id !== undefined" [selectedId]="folderInfo.id"></panel-folder> </mat-sidenav> <mat-sidenav-content> <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;"><img style="max-height: 100vh;" src="{{thumbnailUrl}}" /></mat-card> @@ -55,7 +55,7 @@ </div> </div> <div style="height:90%;overflow:auto;position:absolute;width:100%;"> - <table #tableBasketListSort="matSort" cdkDropList id="folder-list" [cdkDropListConnectedTo]="panelFolder.getDragIds()" [cdkDropListData]="data" mat-table [dataSource]="data" matSort + <table #tableBasketListSort="matSort" cdkDropList id="folder-list" [cdkDropListConnectedTo]="listTodrag()" [cdkDropListData]="data" mat-table [dataSource]="data" matSort matSortActive="res_id" matSortDisableClear matSortDirection="asc" style="width:100%;"> <ng-container matColumnDef="res_id"> @@ -70,7 +70,10 @@ </span> <span *ngIf="!appService.getViewMode()" style="cursor:pointer;" class="main-info-status" (click)="launch(defaultAction,row);"> <mat-icon *ngIf="row.isLocked !== true" title="{{row.statusLabel}}" [ngStyle]="{'color': row.priorityColor}" color="primary" - class="{{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}} {{row.statusImage}} {{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}}-2x"> + class="{{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}} {{row.statusImage}} {{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}}-2x statusIcon"> + </mat-icon> + <mat-icon *ngIf="row.isLocked !== true" title="{{row.statusLabel}}" [ngStyle]="{'color': row.priorityColor}" color="primary" + class="fa fa-folder-open fa-2x"> </mat-icon> <span *ngIf="row.confidentiality === 'Y'" class="watermark">{{lang.confidential}}</span> <mat-icon *ngIf="row.isLocked === true" title="{{lang.warnLockResInProgress}} : {{row.locker}}" style="color: red;" class="fa fa-lock fa-2x"> diff --git a/src/frontend/app/folder/document-list/folder-document-list.component.scss b/src/frontend/app/folder/document-list/folder-document-list.component.scss index 0b92c670d61f23dca1f61917e92f0cc46b9ab9de..ad012d5d5f93e70595f870bed6698d7264b05004 100644 --- a/src/frontend/app/folder/document-list/folder-document-list.component.scss +++ b/src/frontend/app/folder/document-list/folder-document-list.component.scss @@ -2,9 +2,19 @@ .dragPreview { text-align: center; - border-radius:5px; + border-radius: 5px; background: white; padding: 10px; - box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),0 8px 10px 1px rgba(0, 0, 0, 0.14),0 3px 14px 2px rgba(0, 0, 0, 0.12); + box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12); color: $primary; - } \ No newline at end of file +} + +.statusIcon { + font-size: 10px; + position: absolute; + right: 0px; + background: white; + padding: 3px; + border-radius: 10px; + border: solid 1px; +} \ No newline at end of file diff --git a/src/frontend/app/folder/document-list/folder-document-list.component.ts b/src/frontend/app/folder/document-list/folder-document-list.component.ts index 3fb40df78c35222f7eeda3e97d410ff7e4ac24c6..a696fd6d9695fc6135c600b3c485a371287a0c41 100644 --- a/src/frontend/app/folder/document-list/folder-document-list.component.ts +++ b/src/frontend/app/folder/document-list/folder-document-list.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, ViewChild, EventEmitter, ViewContainerRef } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { LANG } from '../../translate.component'; -import { merge, Observable, of as observableOf, Subject } from 'rxjs'; +import { merge, Observable, of as observableOf, Subject, of } from 'rxjs'; import { NotificationService } from '../../notification.service'; -import { MatDialog } from '@angular/material/dialog'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { MatPaginator } from '@angular/material/paginator'; import { MatSidenav } from '@angular/material/sidenav'; import { MatSort } from '@angular/material/sort'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; -import { startWith, switchMap, map, catchError, takeUntil, tap } from 'rxjs/operators'; +import { startWith, switchMap, map, catchError, takeUntil, tap, exhaustMap, filter } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { HeaderService } from '../../../service/header.service'; @@ -17,6 +17,8 @@ import { Overlay } from '@angular/cdk/overlay'; import { PanelListComponent } from '../../list/panel/panel-list.component'; import { AppService } from '../../../service/app.service'; import { PanelFolderComponent } from '../panel/panel-folder.component'; +import { BasketHomeComponent } from '../../basket/basket-home.component'; +import { ConfirmComponent } from '../../../plugins/modal/confirm.component'; declare function $j(selector: any): any; @@ -35,7 +37,7 @@ export class FolderDocumentListComponent implements OnInit { public innerHtml: SafeHtml; basketUrl: string; homeData: any; - + injectDatasParam = { resId: 0, editable: false @@ -44,6 +46,8 @@ export class FolderDocumentListComponent implements OnInit { filtersChange = new EventEmitter(); + dialogRef: MatDialogRef<any>; + @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav; @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav; @@ -87,20 +91,21 @@ export class FolderDocumentListComponent implements OnInit { @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; @ViewChild('tableBasketListSort', { static: true }) sort: MatSort; - @ViewChild('panelFolder', { static: true }) panelFolder: PanelFolderComponent; + @ViewChild('panelFolder', { static: false }) panelFolder: PanelFolderComponent; + @ViewChild('basketHome', { static: true }) basketHome: BasketHomeComponent; constructor( - private router: Router, - private route: ActivatedRoute, - public http: HttpClient, - public dialog: MatDialog, - private sanitizer: DomSanitizer, - private headerService: HeaderService, - private notify: NotificationService, - public overlay: Overlay, + private router: Router, + private route: ActivatedRoute, + public http: HttpClient, + public dialog: MatDialog, + private sanitizer: DomSanitizer, + private headerService: HeaderService, + private notify: NotificationService, + public overlay: Overlay, public viewContainerRef: ViewContainerRef, public appService: AppService) { - $j("link[href='merged_css.php']").remove(); + $j("link[href='merged_css.php']").remove(); } ngOnInit(): void { @@ -116,13 +121,17 @@ export class FolderDocumentListComponent implements OnInit { this.route.params.subscribe(params => { this.destroy$.next(true); - this.basketUrl = '../../rest/folders/' + params['folderId'] + '/resources'; - this.folderInfo = - { - "id": params['folderId'], - "label": 'test' + this.http.get('../../rest/folders/' + params['folderId']) + .subscribe((data: any) => { + this.folderInfo = + { + 'id': params['folderId'], + 'label': data.folder.label + }; - }; + this.headerService.setHeader('Dossier : ' + this.folderInfo.label); + }); + this.basketUrl = '../../rest/folders/' + params['folderId'] + '/resources'; this.selectedRes = []; this.sidenavRight.close(); window['MainHeaderComponent'].setSnav(this.sidenavLeft); @@ -161,7 +170,7 @@ export class FolderDocumentListComponent implements OnInit { this.isLoadingResults = false; data = this.processPostData(data); this.resultsLength = data.countResources; - //this.allResInBasket = data.count; + this.allResInBasket = data.allResources; //this.headerService.setHeader('Dossier : ' + this.folderInfo.label); return data.resources; }), @@ -192,13 +201,13 @@ export class FolderDocumentListComponent implements OnInit { } togglePanel(mode: string, row: any) { - let thisSelect = { checked : true }; - let thisDeselect = { checked : false }; + let thisSelect = { checked: true }; + let thisDeselect = { checked: false }; row.checked = true; this.toggleAllRes(thisDeselect); this.toggleRes(thisSelect, row); - if(this.currentResource.res_id == row.res_id && this.sidenavRight.opened && this.currentMode == mode) { + if (this.currentResource.res_id == row.res_id && this.sidenavRight.opened && this.currentMode == mode) { this.sidenavRight.close(); } else { this.currentMode = mode; @@ -210,7 +219,7 @@ export class FolderDocumentListComponent implements OnInit { refreshBadgeNotes(nb: number) { this.currentResource.countNotes = nb; - } + } refreshBadgeAttachments(nb: number) { this.currentResource.countAttachments = nb; @@ -221,6 +230,14 @@ export class FolderDocumentListComponent implements OnInit { this.filtersChange.emit(); } + refreshDaoAfterAction() { + this.sidenavRight.close(); + this.refreshDao(); + this.basketHome.refreshBasketHome(); + const e: any = { checked: false }; + this.toggleAllRes(e); + } + viewThumbnail(row: any) { this.thumbnailUrl = '../../rest/res/' + row.res_id + '/thumbnail'; $j('#viewThumbnail').show(); @@ -277,7 +294,11 @@ export class FolderDocumentListComponent implements OnInit { } unclassify() { - this.http.request('DELETE', '../../rest/folders/' + this.folderInfo.id + '/resources', { body: { resources: this.selectedRes } }).pipe( + this.dialogRef = this.dialog.open(ConfirmComponent, { autoFocus: false, disableClose: true, data: { title: this.lang.delete, msg: 'Voulez-vous enlever <b>' + this.selectedRes.length + '</b> document(s) du classement ?' } }); + + this.dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + exhaustMap(() => this.http.request('DELETE', '../../rest/folders/' + this.folderInfo.id + '/resources', { body: { resources: this.selectedRes } })), tap((data: any) => { this.notify.success(this.lang.removedFromFolder); this.resultsLength = data.countResources; @@ -286,14 +307,24 @@ export class FolderDocumentListComponent implements OnInit { this.data.splice(key, 1); } }); + this.refreshDaoAfterAction(); }) ).subscribe(); } + + listTodrag() { + if (this.panelFolder !== undefined) { + return this.panelFolder.getDragIds(); + } else { + return []; + } + } } export interface BasketList { folder: any; resources: any[]; countResources: number; + allResources: number[]; } export class ResultListHttpDao { diff --git a/src/frontend/app/folder/folder-tree.component.ts b/src/frontend/app/folder/folder-tree.component.ts index 9e16999216b917f9c1e257c807aebdc8c2cae8d7..a6fe1f1493ef5d859edee74c4d76c6089de1eeea 100644 --- a/src/frontend/app/folder/folder-tree.component.ts +++ b/src/frontend/app/folder/folder-tree.component.ts @@ -122,9 +122,11 @@ export class FolderTreeComponent implements OnInit { map((data: any) => this.flatToNestedObject(data.folders)), filter((data: any) => data.length > 0), tap((data) => this.initTree(data)), - filter(() => this.seletedId !== undefined), - tap(() => this.openTree(this.seletedId)), - tap(() => this.selectTree(this.seletedId)) + //filter(() => this.seletedId !== undefined), + tap(() => { + this.openTree(this.seletedId); + this.selectTree(this.seletedId); + }) ).subscribe(); } @@ -135,8 +137,8 @@ export class FolderTreeComponent implements OnInit { }); } - openTree(id: number) { - let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(id); + openTree(id: any) { + let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(parseInt(id)); while (indexSelectedFolder != -1) { indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(this.treeControl.dataNodes[indexSelectedFolder].parent_id); @@ -146,8 +148,8 @@ export class FolderTreeComponent implements OnInit { } } - selectTree(id: number) { - let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(id); + selectTree(id: any) { + let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(parseInt(id)); if (indexSelectedFolder != -1) { this.treeControl.dataNodes[indexSelectedFolder].selected = true; } diff --git a/src/frontend/app/folder/panel/panel-folder.component.ts b/src/frontend/app/folder/panel/panel-folder.component.ts index 847100f822bea095062817dfd193ca816ebe74f4..b613cfaa15bd8eef3e616afb689de32ef59d2fcf 100644 --- a/src/frontend/app/folder/panel/panel-folder.component.ts +++ b/src/frontend/app/folder/panel/panel-folder.component.ts @@ -27,4 +27,8 @@ export class PanelFolderComponent implements OnInit { return []; } } + + initTree() { + this.folderTree.openTree(this.id); + } }