diff --git a/src/components/flatTree/flatTree.component.ts b/src/components/flatTree/flatTree.component.ts index 1ff00222081d946cee2fa22491f57af0d4c519dd..bf1efd663bf2bb3f9af5615fb5284057f341be7c 100644 --- a/src/components/flatTree/flatTree.component.ts +++ b/src/components/flatTree/flatTree.component.ts @@ -21,6 +21,8 @@ export class FlatTreeComponent{ } @Input() childrenExpanded : boolean = true + @Input() useDefaultList: boolean = false + @Output() treeNodeClick : EventEmitter<any> = new EventEmitter() /* highly non-performant. rerenders each time on mouseover or mouseout */ diff --git a/src/components/flatTree/flatTree.style.css b/src/components/flatTree/flatTree.style.css index d71418cc8ef2641f95bd5b11b263462bbf600960..9ee266f33ce80735ba9ebae0689f01c031aaaeaf 100644 --- a/src/components/flatTree/flatTree.style.css +++ b/src/components/flatTree/flatTree.style.css @@ -5,7 +5,8 @@ height:100%; } -cdk-virtual-scroll-viewport +cdk-virtual-scroll-viewport, +.default-container { flex: 1 0 auto; overflow-x: hidden; @@ -177,4 +178,4 @@ span[renderText] [renderNode] { height: 15px; -} \ No newline at end of file +} diff --git a/src/components/flatTree/flatTree.template.html b/src/components/flatTree/flatTree.template.html index bd497ac3b326e3cf083a77454baed07f263816cc..b95e5fb5e91fbcea8d7028d19dcf62228c590c98 100644 --- a/src/components/flatTree/flatTree.template.html +++ b/src/components/flatTree/flatTree.template.html @@ -1,4 +1,5 @@ <cdk-virtual-scroll-viewport + *ngIf="!useDefaultList" (wheel)="$event.stopPropagation()" itemSize="15"> @@ -33,6 +34,42 @@ </div> </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> <i class="fas fa-none"> diff --git a/src/ui/databrowserModule/databrowser.module.ts b/src/ui/databrowserModule/databrowser.module.ts index e32ba854996cdf9652fd7f97d0011f2ac9cf0bec..1238aa758a99074e33dfdfaccd0daf488e82cbc7 100644 --- a/src/ui/databrowserModule/databrowser.module.ts +++ b/src/ui/databrowserModule/databrowser.module.ts @@ -20,6 +20,7 @@ import { Chart } from 'chart.js' import { AtlasViewerConstantsServices } from "src/atlasViewer/atlasViewer.constantService.service"; import { PopoverModule } from "ngx-bootstrap/popover"; import { UtilModule } from "src/util/util.module"; +import { AggregateArrayIntoRootPipe } from "./util/aggregateArrayIntoRoot.pipe"; @NgModule({ imports:[ @@ -47,7 +48,8 @@ import { UtilModule } from "src/util/util.module"; PathToNestedChildren, CopyPropertyPipe, FilterDataEntriesbyMethods, - FilterDataEntriesByRegion + FilterDataEntriesByRegion, + AggregateArrayIntoRootPipe ], exports:[ DataBrowser diff --git a/src/ui/databrowserModule/preview/preview.component.ts b/src/ui/databrowserModule/preview/preview.component.ts index 46f8884070da9c2112b569d662caf2db495732a7..19921de6402afa653c9e2b6ec68352df13e7dfdd 100644 --- a/src/ui/databrowserModule/preview/preview.component.ts +++ b/src/ui/databrowserModule/preview/preview.component.ts @@ -2,6 +2,12 @@ import { Component, Input, OnInit } from "@angular/core"; import { DatabrowserService } from "../databrowser.service"; 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({ selector: 'preview-component', templateUrl: './preview.template.html', @@ -20,7 +26,7 @@ export class PreviewComponent implements OnInit{ constructor( private dbrService:DatabrowserService ){ - + this.renderNode = getRenderNodeFn() } previewFileClick(ev, el){ @@ -32,20 +38,11 @@ export class PreviewComponent implements OnInit{ el.toggleCollapse(ev.inputItem) }else{ this.activeFile = ev.inputItem - // this.launchFileViewer.emit({ - // dataset : this.dataset, - // file : ev.inputItem - // }) + this.renderNode = getRenderNodeFn(this.activeFile) } } - renderNode(obj){ - return obj.name - ? this.activeFile.name === obj.name - ? `<span class="text-warning">${obj.name}</span>` - : obj.name - : obj.path - } + public renderNode: (obj:any) => string ngOnInit(){ if (this.datasetName) { @@ -54,6 +51,7 @@ export class PreviewComponent implements OnInit{ this.previewFiles = json as ViewerPreviewFile[] if (this.previewFiles.length > 0) this.activeFile = this.previewFiles[0] + this.renderNode = getRenderNodeFn(this.activeFile) }) .catch(e => { this.error = JSON.stringify(e) diff --git a/src/ui/databrowserModule/preview/preview.style.css b/src/ui/databrowserModule/preview/preview.style.css index 73c51d8df719dfe12dd57b77d06acb9e24a802e1..23018c4cb9c1562bb329a8416a148bb819a503ed 100644 --- a/src/ui/databrowserModule/preview/preview.style.css +++ b/src/ui/databrowserModule/preview/preview.style.css @@ -6,6 +6,7 @@ .readmore-wrapper { - - height: 10em; + font-size: 80%; + max-height: 25em; + overflow: auto; } \ No newline at end of file diff --git a/src/ui/databrowserModule/preview/preview.template.html b/src/ui/databrowserModule/preview/preview.template.html index 67f1676bc1cd90ddcd5f77ad248b73bd6046a89f..1eb28f46694f3252ffc923011d1106230a6543b8 100644 --- a/src/ui/databrowserModule/preview/preview.template.html +++ b/src/ui/databrowserModule/preview/preview.template.html @@ -8,19 +8,15 @@ </file-viewer> <hr /> -<readmore-component - [collapsedHeight]="65"> +<div class="readmore-wrapper"> - <div class="readmore-wrapper"> - - <flat-tree-component - #flatTreeNode - *ngFor="let item of previewFiles | copyProperty : 'filename' : 'path' | pathToNestedChildren" - [childrenExpanded]="false" - [renderNode]="renderNode.bind(this)" - [inputItem]="item" - (treeNodeClick)="previewFileClick($event, flatTreeNode)"> - - </flat-tree-component> - </div> -</readmore-component> \ No newline at end of file + <flat-tree-component + #flatTreeNode + *ngIf="previewFiles | copyProperty : 'filename' : 'path' | pathToNestedChildren | aggregateArrayIntoRootPipe : 'Files'; let rootFile" + [useDefaultList]="true" + [renderNode]="renderNode" + [inputItem]="rootFile" + (treeNodeClick)="previewFileClick($event, flatTreeNode)"> + + </flat-tree-component> +</div> \ No newline at end of file diff --git a/src/ui/databrowserModule/util/aggregateArrayIntoRoot.pipe.ts b/src/ui/databrowserModule/util/aggregateArrayIntoRoot.pipe.ts new file mode 100644 index 0000000000000000000000000000000000000000..513da12531b9531fd5618f23ba5fe1efffdd56aa --- /dev/null +++ b/src/ui/databrowserModule/util/aggregateArrayIntoRoot.pipe.ts @@ -0,0 +1,16 @@ +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