diff --git a/src/app/workspace/forms/move-item-form.component.html b/src/app/workspace/forms/move-item-form.component.html index a38d9f7..ba05e6e 100644 --- a/src/app/workspace/forms/move-item-form.component.html +++ b/src/app/workspace/forms/move-item-form.component.html @@ -14,14 +14,16 @@
  • -
    +
    - {{dest.title}} + + {{dest.title}} + (empty)
    -
      +
        diff --git a/src/app/workspace/forms/move-item-form.component.ts b/src/app/workspace/forms/move-item-form.component.ts index 5eac417..d67dae7 100644 --- a/src/app/workspace/forms/move-item-form.component.ts +++ b/src/app/workspace/forms/move-item-form.component.ts @@ -105,8 +105,11 @@ export class MoveItemFormComponent { })) .subscribe( () => { - this.filesComponent.getSharedDirectory(); - this.filesComponent.getRootDirectory(); + let oldOpenStateShared = MoveItemFormComponent.getOpenDirsSet(this.filesComponent.getShared()) + let oldOpenStateRoot = MoveItemFormComponent.getOpenDirsSet(this.filesComponent.getRoot()) + + this.filesComponent.getSharedDirectory(oldOpenStateShared); + this.filesComponent.getRootDirectory(oldOpenStateRoot); if (this.pobject.type === 'file') this.toastr.success('File moved'); @@ -141,4 +144,56 @@ export class MoveItemFormComponent { return true; } + static getOpenDirsSet(fromRoot): Set { + let open: Set = new Set(); + + // BFS throught the dirs tree + + let visited: Set = new Set() + let qFrom = new Array(); + + visited.add(fromRoot.id); + qFrom.push(fromRoot); + + while (qFrom.length > 0) { + const vFrom = qFrom.shift(); + if (vFrom.hasOwnProperty("open") && vFrom.open) { + open.add(vFrom.id) + } + if (vFrom.hasOwnProperty("pobjects")) { + for (let child of vFrom.pobjects) { + if (!visited.has(child.id)) { + visited.add(child.id); + qFrom.push(child); + } + } + } + } + return open; + } + + static copyStateToTree(root, openDirs:Set) { + // BFS throught the dirs tree + + let visited: Set = new Set() + let qTo = new Array(); + + visited.add(root.id);; + qTo.push(root); + + while (qTo.length > 0) { + let vTo = qTo.shift(); + if(openDirs.has(vTo.id)) { + vTo.open = true; + } + if (vTo.hasOwnProperty("pobjects")) { + for (let child of vTo.pobjects) { + if (!visited.has(child.id)) { + visited.add(child.id); + qTo.push(child); + } + } + } + } + } } diff --git a/src/app/workspace/pages/files.component.ts b/src/app/workspace/pages/files.component.ts index 29938d4..ba331e4 100644 --- a/src/app/workspace/pages/files.component.ts +++ b/src/app/workspace/pages/files.component.ts @@ -220,7 +220,7 @@ export class FilesComponent implements OnInit { /** BACK-END RELATED FUNCTIONS */ - getRootDirectory() { + getRootDirectory(oldOpenDirsSet:null|Set=null) { this.ownFilesLoading = true; this.http.get(config.backend.host + '/rest/directories/root', AuthService.loadRequestOptions()) @@ -232,10 +232,32 @@ export class FilesComponent implements OnInit { this.rootDir = success; this.createPublicUrls(this.rootDir); this.rootDir.open = true; + this.rootDir.openMove = true; + + // apply open/close from the previous state + if(oldOpenDirsSet != null) { + MoveItemFormComponent.copyStateToTree(this.rootDir, oldOpenDirsSet) + } + + // sort as in the previous state + switch (this.sort) { + case 2: + this.sortPobjectsByTitleDesc(); + break; + case 3: + this.sortPobjectsByLastModifiedAsc(); + break; + case 4: + this.sortPobjectsByLastModifiedDesc(); + break; + default: // 0 and 1 cases + this.sortPobjectsByTitleAsc(); + break; + } }); } - getSharedDirectory() { + getSharedDirectory(oldOpenDirsSet:null|Set=null) { this.sharedFilesLoading = true; this.http.get(config.backend.host + '/rest/directories/shared', AuthService.loadRequestOptions()) @@ -246,6 +268,11 @@ export class FilesComponent implements OnInit { .subscribe(success => { this.sharedDir = success; this.createPublicUrls(this.sharedDir); + + // apply open/close from the previous state + if(oldOpenDirsSet != null) { + MoveItemFormComponent.copyStateToTree(this.sharedDir, oldOpenDirsSet) + } }); }