diff --git a/src/frontend/app/folder/folder-tree.component.ts b/src/frontend/app/folder/folder-tree.component.ts index 84fe1459d91f87c94ef4dd05ab67bc05f2f9d6cb..b5ebd722983f397607e156ba6b19104a38c81bc8 100644 --- a/src/frontend/app/folder/folder-tree.component.ts +++ b/src/frontend/app/folder/folder-tree.component.ts @@ -331,7 +331,6 @@ export class FolderTreeComponent implements OnInit { } drop(ev: any, node: any) { - console.log(ev.previousContainer.id); this.classifyDocument(ev, node); /*if (ev.previousContainer.id === 'folder-list') { this.moveFolder(ev, node); @@ -402,7 +401,6 @@ export class FolderTreeComponent implements OnInit { } openFolderAdmin(node: any) { - console.log(node); this.dialogRef = this.dialog.open(FolderUpdateComponent, { autoFocus: false, data: { folderId: node.id } }); this.dialogRef.afterClosed().pipe( diff --git a/src/frontend/app/folder/folder-update/folder-update.component.html b/src/frontend/app/folder/folder-update/folder-update.component.html index 3b1d18d4ba31efd987519484501f9549d983a89a..7050bbf5a60e13e8ba05aaa466febe893a45dfcf 100644 --- a/src/frontend/app/folder/folder-update/folder-update.component.html +++ b/src/frontend/app/folder/folder-update/folder-update.component.html @@ -1,41 +1,48 @@ -<h1 mat-dialog-title>Dossier : {{folder.label}}</h1> +<h1 mat-dialog-title>{{lang.folder}} : {{folder.label}}</h1> <form (ngSubmit)="onSubmit()"> <mat-dialog-content> <div class="col-md-12"> - <mat-form-field class="example-full-width"> + <mat-form-field> <input matInput placeholder="{{lang.label}}" name="label" [(ngModel)]="folder.label"> </mat-form-field> </div> - <div [class.col-md-12]="folder.sharing.entities.length === 0" - [class.col-md-6]="folder.sharing.entities.length > 0"> - <div class="formType jstreeEntities"> - <div class="formType-title"> - Périmètre de restriction - </div> - <mat-form-field appearance="outline"> - <input matInput id="jstree_search" type="text" placeholder="{{lang.searchEntities}}"> - </mat-form-field> - <div id="jstree" class="entitiesList"></div> - </div> - </div> - <div class="col-md-6" *ngIf="folder.sharing.entities.length > 0"> - <div class="formType jstreeEntities"> - <div class="formType-title"> - Paramètres - </div> - <ng-container *ngFor="let entity of entities | sortBy : 'entity_label'"> - <mat-expansion-panel class="selectedEntities" - *ngIf="checkSelectedFolder(entity)" opened> - <mat-expansion-panel-header> - <mat-panel-title> - {{entity.entity_label}} - </mat-panel-title> - </mat-expansion-panel-header> - <mat-slide-toggle color="primary">Droit de modification / suppression du dossier - </mat-slide-toggle> - </mat-expansion-panel> - </ng-container> - </div> + <div class="col-md-12"> + <mat-tab-group (selectedTabChange)="initService($event)"> + <mat-tab label="{{lang.setInParentFolder}}"> + <mat-form-field appearance="outline"> + <input matInput id="jstree_searchFolders" type="text" placeholder="{{lang.searchFolder}}"> + </mat-form-field> + <div id="jstreeFolders" class="entitiesList"></div> + </mat-tab> + <mat-tab label="{{lang.shareToEntities}}"> + <div [class.col-md-12]="folder.sharing.entities.length === 0" + [class.col-md-6]="folder.sharing.entities.length > 0"> + <mat-form-field appearance="outline"> + <input matInput id="jstree_search" type="text" placeholder="{{lang.searchEntities}}"> + </mat-form-field> + <div id="jstree" class="entitiesList"></div> + </div> + <div class="col-md-6" *ngIf="folder.sharing.entities.length > 0"> + <div class="formType jstreeEntities"> + <div class="formType-title"> + {{lang.parameters}} + </div> + <ng-container *ngFor="let entity of entities | sortBy : 'entity_label'"> + <mat-expansion-panel class="selectedEntities" *ngIf="checkSelectedFolder(entity)" + opened> + <mat-expansion-panel-header> + <mat-panel-title> + {{entity.entity_label}} + </mat-panel-title> + </mat-expansion-panel-header> + <mat-slide-toggle color="primary" [checked]="isAdminEnabled(entity)" (change)="toggleAdmin(entity, $event)">{{lang.canManageFolder}} + </mat-slide-toggle> + </mat-expansion-panel> + </ng-container> + </div> + </div> + </mat-tab> + </mat-tab-group> </div> </mat-dialog-content> <mat-dialog-actions> diff --git a/src/frontend/app/folder/folder-update/folder-update.component.ts b/src/frontend/app/folder/folder-update/folder-update.component.ts index 81a17fdbb62d5bbc2218806a6fa9bbe6f518bc61..26bd53043e90762258ae8ca36e586f3fd2e3c8f1 100644 --- a/src/frontend/app/folder/folder-update/folder-update.component.ts +++ b/src/frontend/app/folder/folder-update/folder-update.component.ts @@ -60,6 +60,31 @@ export class FolderUpdateComponent implements OnInit { tap((data: any) => { this.initEntitiesTree(data.entities); }), + exhaustMap(() => this.http.get('../../rest/folders')), + map((data: any) => { + data.folders.forEach((element: any) => { + element['state'] = { + opened: true + } + if (element.parent_id === 0) { + element.parent_id = '#'; + } + + if (element.id === this.folder.parent_id) { + element['state'].selected = true; + } + + if (element.id === this.folder.id) { + element['state'].disabled = true; + } + element.parent = element.parent_id; + element.text = element.label; + }); + return data; + }), + tap((data: any) => { + this.initFoldersTree(data.folders); + }), catchError((err: any) => { this.notify.handleErrors(err); return of(false); @@ -67,6 +92,42 @@ export class FolderUpdateComponent implements OnInit { ).subscribe(); } + initFoldersTree(folders: any) { + $j('#jstreeFolders').jstree({ + "checkbox": { + 'deselect_all': true, + "three_state": false //no cascade selection + }, + 'core': { + 'themes': { + 'name': 'proton', + 'responsive': true + }, + 'multiple': false, + 'data': folders + }, + "plugins": ["checkbox", "search"] + }); + $j('#jstreeFolders') + // listen for event + .on('select_node.jstree', (e: any, data: any) => { + this.folder.parent_id = data.node.original.id; + + }).on('deselect_node.jstree', (e: any, data: any) => { + this.folder.parent_id = ''; + }) + // create the instance + .jstree(); + var to: any = false; + $j('#jstree_searchFolders').keyup(function () { + if (to) { clearTimeout(to); } + to = setTimeout(function () { + var v = $j('#jstree_searchFolders').val(); + $j('#jstreeFolders').jstree(true).search(v); + }, 250); + }); + } + initEntitiesTree(entities: any) { $j('#jstree').jstree({ "checkbox": { @@ -104,8 +165,8 @@ export class FolderUpdateComponent implements OnInit { selectEntity(newEntity: any) { this.folder.sharing.entities.push( { - entity_id : newEntity.serialId, - edition : false + entity_id: newEntity.serialId, + edition: false } ); } @@ -136,4 +197,20 @@ export class FolderUpdateComponent implements OnInit { return false; } } + + initService(ev: any) { + if (ev.index == 1) { + this.initEntitiesTree(this.entities); + } + } + + toggleAdmin(entity: any, ev: any) { + const index = this.folder.sharing.entities.map((data: any) => data.entity_id).indexOf(entity.serialId); + this.folder.sharing.entities[index].edition = ev.checked; + } + + isAdminEnabled(entity: any) { + const index = this.folder.sharing.entities.map((data: any) => data.entity_id).indexOf(entity.serialId); + return this.folder.sharing.entities[index].edition; + } } diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index c03c65bfc6e0b269c5b6ad6ac81fef5b9d7f727b..5a0c8b7fd509d3cb8485c17ea8eb03f05134bada 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1056,4 +1056,8 @@ export const LANG_EN = { "getFolders" : "Folders (fixed postion)", "getFoldersSample" : "Litigation", "classifyIn" : "Classify in ...", + "setInParentFolder" : "Set in parent folder ...", + "searchFolder" : "Search folder", + "shareToEntities" : "Share to entities ...", + "canManageFolder" : "Can manage this folder", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index e6864dd42f119311c77ef2216b6d15bd341abe5f..27d64193d06f377bf1e542bb456f53340163bb7c 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1093,4 +1093,8 @@ export const LANG_FR = { "getFolders" : "Dossiers (emplacement fixe)", "getFoldersSample" : "Litiges", "classifyIn" : "Classer dans ...", + "setInParentFolder" : "Imbriquer le dossier dans ...", + "searchFolder" : "Recherche un dossier", + "shareToEntities" : "Partager aux entités ...", + "canManageFolder" : "Droit de modification / suppression du dossier", }; \ No newline at end of file diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index c9288357cd665420c949502822fcaf6ecdd0fbd0..fa9f670136404e71c6797e01a46e3122a5c518f0 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1082,4 +1082,8 @@ export const LANG_NL = { "getFolders" : "Folders (fixed postion)", //_TO_TRANSLATE "getFoldersSample" : "Litigation", //_TO_TRANSLATE "classifyIn" : "Classify in ...", //_TO_TRANSLATE + "setInParentFolder" : "Set in parent folder ...", //_TO_TRANSLATE + "searchFolder" : "Search folder", //_TO_TRANSLATE + "shareToEntities" : "Share to entities ...", //_TO_TRANSLATE + "canManageFolder" : "Can manage this folder", //_TO_TRANSLATE };