Skip to content
Snippets Groups Projects
Commit 1b2969f8 authored by Xiao Gui's avatar Xiao Gui
Browse files

feat: added use defaultList instead of virtual list for flattened tree

parent c2c0f9bf
No related branches found
No related tags found
No related merge requests found
...@@ -21,6 +21,8 @@ export class FlatTreeComponent{ ...@@ -21,6 +21,8 @@ export class FlatTreeComponent{
} }
@Input() childrenExpanded : boolean = true @Input() childrenExpanded : boolean = true
@Input() useDefaultList: boolean = false
@Output() treeNodeClick : EventEmitter<any> = new EventEmitter() @Output() treeNodeClick : EventEmitter<any> = new EventEmitter()
/* highly non-performant. rerenders each time on mouseover or mouseout */ /* highly non-performant. rerenders each time on mouseover or mouseout */
......
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
height:100%; height:100%;
} }
cdk-virtual-scroll-viewport cdk-virtual-scroll-viewport,
.default-container
{ {
flex: 1 0 auto; flex: 1 0 auto;
overflow-x: hidden; overflow-x: hidden;
...@@ -177,4 +178,4 @@ span[renderText] ...@@ -177,4 +178,4 @@ span[renderText]
[renderNode] [renderNode]
{ {
height: 15px; height: 15px;
} }
\ No newline at end of file
<cdk-virtual-scroll-viewport <cdk-virtual-scroll-viewport
*ngIf="!useDefaultList"
(wheel)="$event.stopPropagation()" (wheel)="$event.stopPropagation()"
itemSize="15"> itemSize="15">
...@@ -33,6 +34,42 @@ ...@@ -33,6 +34,42 @@
</div> </div>
</cdk-virtual-scroll-viewport> </cdk-virtual-scroll-viewport>
<div class="overflow-auto">
<div class="overflow-hidden default-container">
<div
*ngFor="let flattenedItem of (inputItem | flattenTreePipe : findChildren | filterRowsByVisbilityPipe : findChildren : searchFilter | appendSiblingFlagPipe )"
[ngClass]="getClass(flattenedItem.flattenedTreeLevel)"
class="text-nowrap"
[attr.flattenedtreelevel]="flattenedItem.flattenedTreeLevel"
[attr.collapsed]="flattenedItem.collapsed ? flattenedItem.collapsed : false"
[attr.lvlId]="flattenedItem.lvlId"
[hidden]="collapseRow(flattenedItem) "
renderNode>
<span class="padding-block-container">
<span
*ngFor="let block of flattenedItem.siblingFlags"
[attr.hidemargin]="block"
class="padding-block">
</span>
</span>
<span
*ngIf="findChildren(flattenedItem).length > 0; else noChildren"
(click)="$event.stopPropagation(); toggleCollapse(flattenedItem)" >
<i [ngClass]="isCollapsed(flattenedItem) ? 'r-270' : ''" class="fas fa-chevron-down"></i>
</span>
<span
(click)="treeNodeClick.emit({event:$event,inputItem:flattenedItem})"
class="render-node-text"
[innerHtml]="flattenedItem | renderPipe : renderNode ">
</span>
</div>
</div>
</div>
<ng-template #noChildren> <ng-template #noChildren>
<i class="fas fa-none"> <i class="fas fa-none">
......
...@@ -20,6 +20,7 @@ import { Chart } from 'chart.js' ...@@ -20,6 +20,7 @@ import { Chart } from 'chart.js'
import { AtlasViewerConstantsServices } from "src/atlasViewer/atlasViewer.constantService.service"; import { AtlasViewerConstantsServices } from "src/atlasViewer/atlasViewer.constantService.service";
import { PopoverModule } from "ngx-bootstrap/popover"; import { PopoverModule } from "ngx-bootstrap/popover";
import { UtilModule } from "src/util/util.module"; import { UtilModule } from "src/util/util.module";
import { AggregateArrayIntoRootPipe } from "./util/aggregateArrayIntoRoot.pipe";
@NgModule({ @NgModule({
imports:[ imports:[
...@@ -47,7 +48,8 @@ import { UtilModule } from "src/util/util.module"; ...@@ -47,7 +48,8 @@ import { UtilModule } from "src/util/util.module";
PathToNestedChildren, PathToNestedChildren,
CopyPropertyPipe, CopyPropertyPipe,
FilterDataEntriesbyMethods, FilterDataEntriesbyMethods,
FilterDataEntriesByRegion FilterDataEntriesByRegion,
AggregateArrayIntoRootPipe
], ],
exports:[ exports:[
DataBrowser DataBrowser
......
...@@ -2,6 +2,12 @@ import { Component, Input, OnInit } from "@angular/core"; ...@@ -2,6 +2,12 @@ import { Component, Input, OnInit } from "@angular/core";
import { DatabrowserService } from "../databrowser.service"; import { DatabrowserService } from "../databrowser.service";
import { ViewerPreviewFile } from "src/services/state/dataStore.store"; import { ViewerPreviewFile } from "src/services/state/dataStore.store";
const getRenderNodeFn = ({name : activeFileName = ''} = {}) => ({name = '', path = 'unpathed'}) => name
? activeFileName === name
? `<span class="text-warning">${name}</span>`
: name
: path
@Component({ @Component({
selector: 'preview-component', selector: 'preview-component',
templateUrl: './preview.template.html', templateUrl: './preview.template.html',
...@@ -20,7 +26,7 @@ export class PreviewComponent implements OnInit{ ...@@ -20,7 +26,7 @@ export class PreviewComponent implements OnInit{
constructor( constructor(
private dbrService:DatabrowserService private dbrService:DatabrowserService
){ ){
this.renderNode = getRenderNodeFn()
} }
previewFileClick(ev, el){ previewFileClick(ev, el){
...@@ -32,20 +38,11 @@ export class PreviewComponent implements OnInit{ ...@@ -32,20 +38,11 @@ export class PreviewComponent implements OnInit{
el.toggleCollapse(ev.inputItem) el.toggleCollapse(ev.inputItem)
}else{ }else{
this.activeFile = ev.inputItem this.activeFile = ev.inputItem
// this.launchFileViewer.emit({ this.renderNode = getRenderNodeFn(this.activeFile)
// dataset : this.dataset,
// file : ev.inputItem
// })
} }
} }
renderNode(obj){ public renderNode: (obj:any) => string
return obj.name
? this.activeFile.name === obj.name
? `<span class="text-warning">${obj.name}</span>`
: obj.name
: obj.path
}
ngOnInit(){ ngOnInit(){
if (this.datasetName) { if (this.datasetName) {
...@@ -54,6 +51,7 @@ export class PreviewComponent implements OnInit{ ...@@ -54,6 +51,7 @@ export class PreviewComponent implements OnInit{
this.previewFiles = json as ViewerPreviewFile[] this.previewFiles = json as ViewerPreviewFile[]
if (this.previewFiles.length > 0) if (this.previewFiles.length > 0)
this.activeFile = this.previewFiles[0] this.activeFile = this.previewFiles[0]
this.renderNode = getRenderNodeFn(this.activeFile)
}) })
.catch(e => { .catch(e => {
this.error = JSON.stringify(e) this.error = JSON.stringify(e)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
.readmore-wrapper .readmore-wrapper
{ {
font-size: 80%;
height: 10em; max-height: 25em;
overflow: auto;
} }
\ No newline at end of file
...@@ -8,19 +8,15 @@ ...@@ -8,19 +8,15 @@
</file-viewer> </file-viewer>
<hr /> <hr />
<readmore-component <div class="readmore-wrapper">
[collapsedHeight]="65">
<div class="readmore-wrapper"> <flat-tree-component
#flatTreeNode
<flat-tree-component *ngIf="previewFiles | copyProperty : 'filename' : 'path' | pathToNestedChildren | aggregateArrayIntoRootPipe : 'Files'; let rootFile"
#flatTreeNode [useDefaultList]="true"
*ngFor="let item of previewFiles | copyProperty : 'filename' : 'path' | pathToNestedChildren" [renderNode]="renderNode"
[childrenExpanded]="false" [inputItem]="rootFile"
[renderNode]="renderNode.bind(this)" (treeNodeClick)="previewFileClick($event, flatTreeNode)">
[inputItem]="item"
(treeNodeClick)="previewFileClick($event, flatTreeNode)"> </flat-tree-component>
</div>
</flat-tree-component> \ No newline at end of file
</div>
</readmore-component>
\ No newline at end of file
import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
name: 'aggregateArrayIntoRootPipe'
})
export class AggregateArrayIntoRootPipe implements PipeTransform{
public transform(array: any[], rootName: string = 'Root Element', childrenPropertyName: string = 'children'){
const returnObj = {
name: rootName
}
returnObj[childrenPropertyName] = array
return returnObj
}
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment