Skip to content
Snippets Groups Projects
Verified Commit 247eb978 authored by Alex ORLUC's avatar Alex ORLUC
Browse files

FEAT #11291 TIME 6 open folder tree in folder document list + fix selection res in folder list

parent 19c61ebc
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<menu-nav></menu-nav> <menu-nav></menu-nav>
<basket-home *ngIf="homeData" #basketHome [homeData]="homeData" [snavL]="snav"></basket-home> <basket-home *ngIf="homeData" #basketHome [homeData]="homeData" [snavL]="snav"></basket-home>
<mat-divider></mat-divider> <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>
<mat-sidenav-content> <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> <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 @@ ...@@ -55,7 +55,7 @@
</div> </div>
</div> </div>
<div style="height:90%;overflow:auto;position:absolute;width:100%;"> <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%;"> matSortActive="res_id" matSortDisableClear matSortDirection="asc" style="width:100%;">
<ng-container matColumnDef="res_id"> <ng-container matColumnDef="res_id">
...@@ -70,7 +70,10 @@ ...@@ -70,7 +70,10 @@
</span> </span>
<span *ngIf="!appService.getViewMode()" style="cursor:pointer;" class="main-info-status" (click)="launch(defaultAction,row);"> <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" <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> </mat-icon>
<span *ngIf="row.confidentiality === 'Y'" class="watermark">{{lang.confidential}}</span> <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"> <mat-icon *ngIf="row.isLocked === true" title="{{lang.warnLockResInProgress}} : {{row.locker}}" style="color: red;" class="fa fa-lock fa-2x">
......
...@@ -2,9 +2,19 @@ ...@@ -2,9 +2,19 @@
.dragPreview { .dragPreview {
text-align: center; text-align: center;
border-radius:5px; border-radius: 5px;
background: white; background: white;
padding: 10px; 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; 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
import { Component, OnInit, ViewChild, EventEmitter, ViewContainerRef } from '@angular/core'; import { Component, OnInit, ViewChild, EventEmitter, ViewContainerRef } from '@angular/core';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { LANG } from '../../translate.component'; 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 { NotificationService } from '../../notification.service';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { MatPaginator } from '@angular/material/paginator'; import { MatPaginator } from '@angular/material/paginator';
import { MatSidenav } from '@angular/material/sidenav'; import { MatSidenav } from '@angular/material/sidenav';
import { MatSort } from '@angular/material/sort'; import { MatSort } from '@angular/material/sort';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; 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 { ActivatedRoute, Router } from '@angular/router';
import { HeaderService } from '../../../service/header.service'; import { HeaderService } from '../../../service/header.service';
...@@ -17,6 +17,8 @@ import { Overlay } from '@angular/cdk/overlay'; ...@@ -17,6 +17,8 @@ import { Overlay } from '@angular/cdk/overlay';
import { PanelListComponent } from '../../list/panel/panel-list.component'; import { PanelListComponent } from '../../list/panel/panel-list.component';
import { AppService } from '../../../service/app.service'; import { AppService } from '../../../service/app.service';
import { PanelFolderComponent } from '../panel/panel-folder.component'; 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; declare function $j(selector: any): any;
...@@ -35,7 +37,7 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -35,7 +37,7 @@ export class FolderDocumentListComponent implements OnInit {
public innerHtml: SafeHtml; public innerHtml: SafeHtml;
basketUrl: string; basketUrl: string;
homeData: any; homeData: any;
injectDatasParam = { injectDatasParam = {
resId: 0, resId: 0,
editable: false editable: false
...@@ -44,6 +46,8 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -44,6 +46,8 @@ export class FolderDocumentListComponent implements OnInit {
filtersChange = new EventEmitter(); filtersChange = new EventEmitter();
dialogRef: MatDialogRef<any>;
@ViewChild('snav', { static: true }) sidenavLeft: MatSidenav; @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav;
@ViewChild('snav2', { static: true }) sidenavRight: MatSidenav; @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav;
...@@ -87,20 +91,21 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -87,20 +91,21 @@ export class FolderDocumentListComponent implements OnInit {
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
@ViewChild('tableBasketListSort', { static: true }) sort: MatSort; @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( constructor(
private router: Router, private router: Router,
private route: ActivatedRoute, private route: ActivatedRoute,
public http: HttpClient, public http: HttpClient,
public dialog: MatDialog, public dialog: MatDialog,
private sanitizer: DomSanitizer, private sanitizer: DomSanitizer,
private headerService: HeaderService, private headerService: HeaderService,
private notify: NotificationService, private notify: NotificationService,
public overlay: Overlay, public overlay: Overlay,
public viewContainerRef: ViewContainerRef, public viewContainerRef: ViewContainerRef,
public appService: AppService) { public appService: AppService) {
$j("link[href='merged_css.php']").remove(); $j("link[href='merged_css.php']").remove();
} }
ngOnInit(): void { ngOnInit(): void {
...@@ -116,13 +121,17 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -116,13 +121,17 @@ export class FolderDocumentListComponent implements OnInit {
this.route.params.subscribe(params => { this.route.params.subscribe(params => {
this.destroy$.next(true); this.destroy$.next(true);
this.basketUrl = '../../rest/folders/' + params['folderId'] + '/resources'; this.http.get('../../rest/folders/' + params['folderId'])
this.folderInfo = .subscribe((data: any) => {
{ this.folderInfo =
"id": params['folderId'], {
"label": 'test' 'id': params['folderId'],
'label': data.folder.label
};
}; this.headerService.setHeader('Dossier : ' + this.folderInfo.label);
});
this.basketUrl = '../../rest/folders/' + params['folderId'] + '/resources';
this.selectedRes = []; this.selectedRes = [];
this.sidenavRight.close(); this.sidenavRight.close();
window['MainHeaderComponent'].setSnav(this.sidenavLeft); window['MainHeaderComponent'].setSnav(this.sidenavLeft);
...@@ -161,7 +170,7 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -161,7 +170,7 @@ export class FolderDocumentListComponent implements OnInit {
this.isLoadingResults = false; this.isLoadingResults = false;
data = this.processPostData(data); data = this.processPostData(data);
this.resultsLength = data.countResources; this.resultsLength = data.countResources;
//this.allResInBasket = data.count; this.allResInBasket = data.allResources;
//this.headerService.setHeader('Dossier : ' + this.folderInfo.label); //this.headerService.setHeader('Dossier : ' + this.folderInfo.label);
return data.resources; return data.resources;
}), }),
...@@ -192,13 +201,13 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -192,13 +201,13 @@ export class FolderDocumentListComponent implements OnInit {
} }
togglePanel(mode: string, row: any) { togglePanel(mode: string, row: any) {
let thisSelect = { checked : true }; let thisSelect = { checked: true };
let thisDeselect = { checked : false }; let thisDeselect = { checked: false };
row.checked = true; row.checked = true;
this.toggleAllRes(thisDeselect); this.toggleAllRes(thisDeselect);
this.toggleRes(thisSelect, row); 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(); this.sidenavRight.close();
} else { } else {
this.currentMode = mode; this.currentMode = mode;
...@@ -210,7 +219,7 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -210,7 +219,7 @@ export class FolderDocumentListComponent implements OnInit {
refreshBadgeNotes(nb: number) { refreshBadgeNotes(nb: number) {
this.currentResource.countNotes = nb; this.currentResource.countNotes = nb;
} }
refreshBadgeAttachments(nb: number) { refreshBadgeAttachments(nb: number) {
this.currentResource.countAttachments = nb; this.currentResource.countAttachments = nb;
...@@ -221,6 +230,14 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -221,6 +230,14 @@ export class FolderDocumentListComponent implements OnInit {
this.filtersChange.emit(); this.filtersChange.emit();
} }
refreshDaoAfterAction() {
this.sidenavRight.close();
this.refreshDao();
this.basketHome.refreshBasketHome();
const e: any = { checked: false };
this.toggleAllRes(e);
}
viewThumbnail(row: any) { viewThumbnail(row: any) {
this.thumbnailUrl = '../../rest/res/' + row.res_id + '/thumbnail'; this.thumbnailUrl = '../../rest/res/' + row.res_id + '/thumbnail';
$j('#viewThumbnail').show(); $j('#viewThumbnail').show();
...@@ -277,7 +294,11 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -277,7 +294,11 @@ export class FolderDocumentListComponent implements OnInit {
} }
unclassify() { 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) => { tap((data: any) => {
this.notify.success(this.lang.removedFromFolder); this.notify.success(this.lang.removedFromFolder);
this.resultsLength = data.countResources; this.resultsLength = data.countResources;
...@@ -286,14 +307,24 @@ export class FolderDocumentListComponent implements OnInit { ...@@ -286,14 +307,24 @@ export class FolderDocumentListComponent implements OnInit {
this.data.splice(key, 1); this.data.splice(key, 1);
} }
}); });
this.refreshDaoAfterAction();
}) })
).subscribe(); ).subscribe();
} }
listTodrag() {
if (this.panelFolder !== undefined) {
return this.panelFolder.getDragIds();
} else {
return [];
}
}
} }
export interface BasketList { export interface BasketList {
folder: any; folder: any;
resources: any[]; resources: any[];
countResources: number; countResources: number;
allResources: number[];
} }
export class ResultListHttpDao { export class ResultListHttpDao {
......
...@@ -122,9 +122,11 @@ export class FolderTreeComponent implements OnInit { ...@@ -122,9 +122,11 @@ export class FolderTreeComponent implements OnInit {
map((data: any) => this.flatToNestedObject(data.folders)), map((data: any) => this.flatToNestedObject(data.folders)),
filter((data: any) => data.length > 0), filter((data: any) => data.length > 0),
tap((data) => this.initTree(data)), tap((data) => this.initTree(data)),
filter(() => this.seletedId !== undefined), //filter(() => this.seletedId !== undefined),
tap(() => this.openTree(this.seletedId)), tap(() => {
tap(() => this.selectTree(this.seletedId)) this.openTree(this.seletedId);
this.selectTree(this.seletedId);
})
).subscribe(); ).subscribe();
} }
...@@ -135,8 +137,8 @@ export class FolderTreeComponent implements OnInit { ...@@ -135,8 +137,8 @@ export class FolderTreeComponent implements OnInit {
}); });
} }
openTree(id: number) { openTree(id: any) {
let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(id); let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(parseInt(id));
while (indexSelectedFolder != -1) { while (indexSelectedFolder != -1) {
indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(this.treeControl.dataNodes[indexSelectedFolder].parent_id); 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 { ...@@ -146,8 +148,8 @@ export class FolderTreeComponent implements OnInit {
} }
} }
selectTree(id: number) { selectTree(id: any) {
let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(id); let indexSelectedFolder = this.treeControl.dataNodes.map((folder: any) => folder.id).indexOf(parseInt(id));
if (indexSelectedFolder != -1) { if (indexSelectedFolder != -1) {
this.treeControl.dataNodes[indexSelectedFolder].selected = true; this.treeControl.dataNodes[indexSelectedFolder].selected = true;
} }
......
...@@ -27,4 +27,8 @@ export class PanelFolderComponent implements OnInit { ...@@ -27,4 +27,8 @@ export class PanelFolderComponent implements OnInit {
return []; return [];
} }
} }
initTree() {
this.folderTree.openTree(this.id);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment