From e287c49ef7af0164b510fff28f143cb3bf09aa5f Mon Sep 17 00:00:00 2001
From: xgui3783 <xgui3783@gmail.com>
Date: Wed, 22 Jul 2020 16:41:07 +0200
Subject: [PATCH] Chore ui tweaks (#609)

* chore: moved atlas selector to top right
chore: reworked viewer status panel position
refactor: separate overlay from nehuba container

* lint: clean up
---
 .../atlasViewer.apiService.service.ts         |   4 +-
 src/atlasViewer/atlasViewer.component.ts      |  25 ++-
 src/atlasViewer/atlasViewer.template.html     | 146 +++++++++++++++++-
 src/theme.scss                                |   7 +
 .../atlasLayerSelector.component.ts           |   4 +-
 .../nehubaContainer.component.ts              |  32 +---
 .../nehubaContainer/nehubaContainer.style.css |  18 +--
 .../nehubaContainer.template.html             | 143 +----------------
 .../statusCard/statusCard.component.ts        |   2 +-
 .../statusCard/statusCard.template.html       |   2 +-
 src/ui/signinBanner/signinBanner.style.css    |   2 +-
 .../signinBanner/signinBanner.template.html   |   2 -
 src/ui/ui.module.ts                           |  14 +-
 src/util/pipes/filterWithString.pipe.ts       |  14 --
 14 files changed, 204 insertions(+), 211 deletions(-)
 delete mode 100644 src/util/pipes/filterWithString.pipe.ts

diff --git a/src/atlasViewer/atlasViewer.apiService.service.ts b/src/atlasViewer/atlasViewer.apiService.service.ts
index 9ed9a0eb4..8aa0c991a 100644
--- a/src/atlasViewer/atlasViewer.apiService.service.ts
+++ b/src/atlasViewer/atlasViewer.apiService.service.ts
@@ -1,8 +1,8 @@
 /* eslint-disable @typescript-eslint/no-empty-function */
 import {Injectable, NgZone, Optional, Inject, OnDestroy} from "@angular/core";
 import { select, Store } from "@ngrx/store";
-import { Observable, Subject, Subscription, from, race, of, interval } from "rxjs";
-import { distinctUntilChanged, map, filter, startWith, take, switchMap, catchError, mapTo, tap } from "rxjs/operators";
+import { Observable, Subject, Subscription, from, race, of, } from "rxjs";
+import { distinctUntilChanged, map, filter, startWith, switchMap, catchError, mapTo } from "rxjs/operators";
 import { DialogService } from "src/services/dialogService.service";
 import {
   getLabelIndexMap,
diff --git a/src/atlasViewer/atlasViewer.component.ts b/src/atlasViewer/atlasViewer.component.ts
index 11d244e40..a5a88fd48 100644
--- a/src/atlasViewer/atlasViewer.component.ts
+++ b/src/atlasViewer/atlasViewer.component.ts
@@ -40,7 +40,7 @@ export const NEHUBA_CLICK_OVERRIDE: InjectionToken<(next: () => void) => void> =
 import { MIN_REQ_EXPLAINER } from 'src/util/constants'
 import { SlServiceService } from "src/spotlight/sl-service.service";
 import { PureContantService } from "src/util";
-import { viewerStateSetSelectedRegions } from "src/services/state/viewerState.store.helper";
+import { viewerStateSetSelectedRegions, viewerStateGetOverlayingAdditionalParcellations, viewerStateRemoveAdditionalLayer } from "src/services/state/viewerState.store.helper";
 
 /**
  * TODO
@@ -102,6 +102,11 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit {
 
   public MIN_REQ_EXPLAINER = MIN_REQ_EXPLAINER
 
+
+  public selectedAdditionalLayers$ = this.store.pipe(
+    select(viewerStateGetOverlayingAdditionalParcellations),
+  )
+
   constructor(
     private store: Store<IavRootStoreInterface>,
     private widgetServices: WidgetServices,
@@ -347,7 +352,23 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit {
     })
   }
 
-  public mouseClickDocument(event: MouseEvent) {
+  public clearAdditionalLayer(layer: { ['@id']: string }){
+    this.store.dispatch(
+      viewerStateRemoveAdditionalLayer({
+        payload: layer
+      })
+    )
+  }
+
+  public clearSelectedRegions(){
+    this.store.dispatch(
+      viewerStateSetSelectedRegions({
+        selectRegions: []
+      })
+    )
+  }
+
+  public mouseClickDocument(_event: MouseEvent) {
 
     const next = () => {
       if (!this.onhoverSegments) return
diff --git a/src/atlasViewer/atlasViewer.template.html b/src/atlasViewer/atlasViewer.template.html
index 070562083..ad269e072 100644
--- a/src/atlasViewer/atlasViewer.template.html
+++ b/src/atlasViewer/atlasViewer.template.html
@@ -56,20 +56,154 @@
       [iav-captureClickListenerDirective-captureDocument]="true"
       (iav-captureClickListenerDirective-onUnmovedClick)="mouseClickDocument($event)">
 
-      <div ui-nehuba-container-overlay-top-right
-        class="d-inline-flex flex-row justify-content-end align-items-start z-index-6 position-absolute pe-none w-100 h-100">
-        <!-- atlas selector -->
-        <atlas-dropdown-selector class="pe-all mt-2">
-        </atlas-dropdown-selector>
+      <!-- top right content transclusion -->
+      <div ui-nehuba-container-overlay-top-right class="d-inline-flex flex-row justify-content-end align-items-start z-index-6 position-absolute pe-none w-100 h-100">
 
         <signin-banner
           class="mt-3 mr-2"
           [parcellationIsSelected]="!!selectedParcellation"
           [ismobile]="(media.mediaBreakPoint$ | async) > 3">
         </signin-banner>
+
+        <!-- atlas selector -->
+        <div class="iv-custom-comp bg card m-2 mat-elevation-z2">
+          <atlas-dropdown-selector class="pe-all mt-2">
+          </atlas-dropdown-selector>
+        </div>
+
       </div>
-    </ui-nehuba-container>
 
+      <!-- bottom left content transclusion -->
+      <div ui-nehuba-container-overlay-bottom-left class="d-inline-flex pe-none w-100 align-items-end m-2 mb-4">
+        <!-- Viewer Selector Container-->
+        <atlas-layer-selector
+          #alSelector="atlasLayerSelector"
+          class="pe-all"
+          (iav-outsideClick)="alSelector.selectorExpanded = false">
+        </atlas-layer-selector>
+        <mat-chip-list class="mb-2">
+          <!-- additional layer -->
+          <ng-container *ngIf="!alSelector.selectorExpanded">
+            <ng-container *ngTemplateOutlet="currParcellationTmpl; context: { addParc: (selectedAdditionalLayers$ | async), parc: selectedParcellation }">
+            </ng-container>
+          </ng-container>
+
+          <!-- any selected region(s) -->
+          <ng-container *ngIf="!uiNehubaContainer.navSideDrawerMainSwitch.switchState || !uiNehubaContainer.navSideDrawerMinorSwitch.switchState">
+            <ng-container *ngTemplateOutlet="selectedRegionTmpl">
+            </ng-container>
+          </ng-container>
+        </mat-chip-list>
+        
+        <!-- current layer tmpl -->
+        <ng-template #currParcellationTmpl let-parc="parc" let-addParc="addParc">
+          <ng-template [ngIf]="addParc.length > 0" [ngIfElse]="defaultParcTmpl">
+            <ng-container *ngFor="let p of addParc">
+              <ng-container *ngTemplateOutlet="chipTmpl; context: {
+                parcel: p,
+                selected: true,
+                dismissable: true
+              }">
+              </ng-container>
+            </ng-container>
+          </ng-template>
+          <ng-template #defaultParcTmpl>
+            <ng-container *ngTemplateOutlet="chipTmpl; context: {
+              parcel: parc,
+              selected: false,
+              dismissable: false
+            }">
+            </ng-container>
+          </ng-template>
+
+          <!-- render parc templ -->
+          <ng-template #chipTmpl
+            let-parcel="parcel"
+            let-selected="selected"
+            let-dismissable="dismissable">
+            <mat-chip class="pe-all"
+              (click)="alSelector.selectorExpanded = true"
+              [selected]="selected">
+              
+              {{ parcel?.groupName ? (parcel?.groupName + ' - ') : '' }}{{ parcel?.name }}
+
+              <!-- info icon -->
+              <ng-template [ngIf]="parcel?.originDatasets?.length > 0"
+                  [ngIfElse]="infoIconBasic">
+
+                <mat-icon
+                  *ngFor="let ds of parcel.originDatasets"
+                  fontSet="fas"
+                  fontIcon="fa-info-circle"
+                  iav-stop="click"
+                  iav-dataset-show-dataset-dialog
+                  [iav-dataset-show-dataset-dialog-kgid]="ds['kgId']"
+                  [iav-dataset-show-dataset-dialog-kgschema]="ds['kgSchema']"
+                  [iav-dataset-show-dataset-dialog-name]="parcel?.properties?.name"
+                  [iav-dataset-show-dataset-dialog-description]="parcel?.properties?.description">
+                </mat-icon>
+
+              </ng-template>
+
+              <ng-template #infoIconBasic>
+                <mat-icon *ngIf="parcel?.properties?.name && parcel?.properties?.description"
+                  fontSet="fas"
+                  fontIcon="fa-info-circle"
+                  iav-stop="click"
+                  iav-dataset-show-dataset-dialog
+                  [iav-dataset-show-dataset-dialog-name]="parcel.properties.name"
+                  [iav-dataset-show-dataset-dialog-description]="parcel.properties.description">
+
+                </mat-icon>
+              </ng-template>
+
+              <!-- dismiss icon -->
+              <mat-icon
+                *ngIf="dismissable"
+                (click)="clearAdditionalLayer(parcel)"
+                fontSet="fas"
+                fontIcon="fa-times">
+              </mat-icon>
+            </mat-chip>
+          </ng-template>
+        </ng-template>
+
+        <ng-template #selectedRegionTmpl>
+          <mat-chip *ngFor="let r of (selectedRegions$ | async)"
+            iav-region
+            (click)="uiNehubaContainer.matDrawerMinor.open() && uiNehubaContainer.navSideDrawerMainSwitch.open()"
+            [region]="r"
+            class="pe-all"
+            [ngClass]="{
+              'darktheme':regionDirective.rgbDarkmode === true,
+              'lighttheme': regionDirective.rgbDarkmode === false
+            }"
+            [style.backgroundColor]="regionDirective.rgbString"
+            #regionDirective="iavRegion">
+            <span class="iv-custom-comp text text-truncate d-inline">
+              {{ r.name }}
+            </span>
+            <mat-icon
+              class="iv-custom-comp text"
+              (click)="clearSelectedRegions()"
+              fontSet="fas"
+              fontIcon="fa-times">
+            </mat-icon>
+          </mat-chip>
+        </ng-template>
+
+      </div>
+
+      <!-- top left content transclusion -->
+      <div ui-nehuba-container-overlay-top-left class="d-inline-flex pe-none w-100 align-items-start m-2">
+        <ui-status-card
+          *ngIf="uiNehubaContainer.viewerLoaded"
+          class="pe-all muted-7"
+          [selectedTemplateName]="uiNehubaContainer?.selectedTemplate?.name"
+          [nehubaViewer]="uiNehubaContainer?.nehubaViewer">
+        </ui-status-card>
+      </div>
+    </ui-nehuba-container>
 
     <layout-floating-container
       zIndex="13"
diff --git a/src/theme.scss b/src/theme.scss
index 603259482..6b2576e1f 100644
--- a/src/theme.scss
+++ b/src/theme.scss
@@ -15,6 +15,13 @@
   [iv-custom-comp],
   .iv-custom-comp
   {
+    &[card],
+    &.card
+    {
+      padding: 0 1em 0 1.5em;
+      border-radius: 0.25em;
+    }
+
     &[bg],
     &.bg
     {
diff --git a/src/ui/atlasLayerSelector/atlasLayerSelector.component.ts b/src/ui/atlasLayerSelector/atlasLayerSelector.component.ts
index abc96e5aa..cd5160d98 100644
--- a/src/ui/atlasLayerSelector/atlasLayerSelector.component.ts
+++ b/src/ui/atlasLayerSelector/atlasLayerSelector.component.ts
@@ -43,7 +43,9 @@ export class AtlasLayerSelector implements OnInit {
       )
 
       this.availableTemplates$ = combineLatest(
-        this.selectedAtlas$,
+        this.selectedAtlas$.pipe(
+          filter(v => !!v)
+        ),
         this.store$.pipe(
           select('viewerState'),
           select('fetchedTemplates')
diff --git a/src/ui/nehubaContainer/nehubaContainer.component.ts b/src/ui/nehubaContainer/nehubaContainer.component.ts
index 02560c8e7..8b9d7528c 100644
--- a/src/ui/nehubaContainer/nehubaContainer.component.ts
+++ b/src/ui/nehubaContainer/nehubaContainer.component.ts
@@ -14,15 +14,11 @@ import { NehubaViewerUnit } from "./nehubaViewer/nehubaViewer.component";
 import { compareLandmarksChanged } from "src/util/constants";
 import { PureContantService } from "src/util";
 import { ARIA_LABELS, IDS } from 'common/constants'
-import { retry } from 'common/util'
 import { ngViewerActionSetPerspOctantRemoval, PANELS, ngViewerActionToggleMax, ngViewerActionAddNgLayer, ngViewerActionRemoveNgLayer } from "src/services/state/ngViewerState.store.helper";
 import { viewerStateSelectRegionWithIdDeprecated, viewerStateAddUserLandmarks, viewreStateRemoveUserLandmarks } from 'src/services/state/viewerState.store.helper'
 import { SwitchDirective } from "src/util/directives/switch.directive";
 import {
   viewerStateSetConnectivityRegion,
-  viewerStateGetOverlayingAdditionalParcellations,
-  viewerStateSetSelectedRegions,
-  viewerStateRemoveAdditionalLayer,
   viewerStateDblClickOnViewer,
 } from "src/services/state/viewerState.store.helper";
 
@@ -141,10 +137,14 @@ export class NehubaContainer implements OnInit, OnChanges, OnDestroy {
   public nehubaContainerDirective: NehubaViewerContainerDirective
 
   @ViewChild('sideNavMasterSwitch', { static: true })
-  private navSideDrawerMainSwitch: SwitchDirective
+  public navSideDrawerMainSwitch: SwitchDirective
+  @ViewChild('sideNavSwitch', { static: true })
+  public navSideDrawerMinorSwitch: SwitchDirective
 
+  @ViewChild('matDrawerMaster', {static: true})
+  public matDrawerMain: MatDrawer
   @ViewChild('matDrawerMinor', { static: true })
-  private matDrawerMinor: MatDrawer
+  public matDrawerMinor: MatDrawer
 
   @Output()
   public nehubaViewerLoaded: EventEmitter<boolean> = new EventEmitter()
@@ -226,10 +226,6 @@ export class NehubaContainer implements OnInit, OnChanges, OnDestroy {
 
   public hoveredPanelIndices$: Observable<number>
 
-  public selectedAdditionalLayers$ = this.store.pipe(
-    select(viewerStateGetOverlayingAdditionalParcellations),
-  )
-
   constructor(
     private pureConstantService: PureContantService,
     private apiService: AtlasViewerAPIServices,
@@ -395,22 +391,6 @@ export class NehubaContainer implements OnInit, OnChanges, OnDestroy {
 
   public useMobileUI$: Observable<boolean>
 
-  public clearSelectedRegions(){
-    this.store.dispatch(
-      viewerStateSetSelectedRegions({
-        selectRegions: []
-      })
-    )
-  }
-
-  public clearAdditionalLayer(layer: { ['@id']: string }){
-    this.store.dispatch(
-      viewerStateRemoveAdditionalLayer({
-        payload: layer
-      })
-    )
-  }
-
   private removeExistingPanels() {
     const element = this.nehubaViewer.nehubaViewer.ngviewer.layout.container.componentValue.element as HTMLElement
     while (element.childElementCount > 0) {
diff --git a/src/ui/nehubaContainer/nehubaContainer.style.css b/src/ui/nehubaContainer/nehubaContainer.style.css
index d1961d91d..e2f28b864 100644
--- a/src/ui/nehubaContainer/nehubaContainer.style.css
+++ b/src/ui/nehubaContainer/nehubaContainer.style.css
@@ -69,13 +69,6 @@ div#scratch-pad
   right: 0;
 }
 
-.viewer-config-container
-{
-  position:absolute;
-  left:1em;
-  bottom:1em;
-}
-
 /* if not mobile, then show on hover */
 
 .opacity-crossfade
@@ -149,12 +142,6 @@ div#scratch-pad
   bottom: 0.5rem;
 }
 
-.region-text-search-autocomplete
-{
-  padding: 0 1em 0 1.5em;
-  border-radius: 0.25em;
-}
-
 .placeholder-region-detail
 {
   padding: 6rem 1rem 1rem 1rem;
@@ -181,6 +168,11 @@ div#scratch-pad
   height: 6rem;
 }
 
+.content-transclusion-top-left
+{
+  margin-left: 3.5rem;
+}
+
 .tab-toggle
 {
   margin-left: -2.5rem;
diff --git a/src/ui/nehubaContainer/nehubaContainer.template.html b/src/ui/nehubaContainer/nehubaContainer.template.html
index a4000a585..4f1cd4301 100644
--- a/src/ui/nehubaContainer/nehubaContainer.template.html
+++ b/src/ui/nehubaContainer/nehubaContainer.template.html
@@ -54,7 +54,6 @@
       (openedStart)="sideNavSwitch.switchState && matDrawerMinor.open()"
       [disableClose]="true"
       #matDrawerMaster="matDrawer">
-      
 
       <div class="h-0 w-100 region-text-search-autocomplete-position">
         <ng-container *ngTemplateOutlet="autocompleteTmpl">
@@ -71,13 +70,13 @@
     <mat-drawer-content class="visible position-relative">
 
       <!-- top left overlay -->
-      <div class="position-absolute top-0 left-0 d-inline-block pe-none">
+      <div class="content-transclusion-top-left position-absolute top-0 left-0 w-100 d-inline-block pe-none">
         <ng-content select="[ui-nehuba-container-overlay-top-left]">
         </ng-content>
       </div>
 
       <!-- top right overlay -->
-      <div class="position-absolute top-0 right-0 d-inline-block pe-none">
+      <div class="position-absolute top-0 right-0 w-100 d-inline-block pe-none">
         <ng-content select="[ui-nehuba-container-overlay-top-right]">
         </ng-content>
       </div>
@@ -89,15 +88,6 @@
           [color]="!sideNavMasterSwitch.switchState && selectedRegions.length > 0 ? 'accent' : 'basic'">
           <i class="fas" [ngClass]="sideNavMasterSwitch.switchState ? 'fa-chevron-left' : 'fa-chevron-right'"></i>
         </button>
-
-        <!-- StatusCard container-->
-        <div class="muted-7 d-inline">
-          <ui-status-card
-            class="pe-all"
-            [selectedTemplateName]="selectedTemplate && selectedTemplate.name"
-            [nehubaViewer]="nehubaViewer">
-          </ui-status-card>
-        </div>
       </div>
 
     </mat-drawer-content>
@@ -139,129 +129,12 @@
     <!-- main-content -->
     <mat-drawer-content class="visible position-relative">
   
-      <div *ngIf="templateSelected$ | async"
-        class="viewer-config-container d-flex align-items-end pe-none">
-
-        <!-- bottom left overlay -->
-
-        <!-- Viewer Selector Container-->
-        <atlas-layer-selector
-          #alSelector="atlasLayerSelector"
-          class="pe-all"
-          (iav-outsideClick)="alSelector.selectorExpanded = false">
-        </atlas-layer-selector>
-
-        <mat-chip-list class="mb-2">
-          <!-- additional layer -->
-          <ng-container *ngIf="!alSelector.selectorExpanded">
-            <ng-container *ngTemplateOutlet="currParcellationTmpl; context: { addParc: (selectedAdditionalLayers$ | async), parc: selectedParcellation }">
-            </ng-container>
-          </ng-container>
-
-          <!-- any selected region(s) -->
-          <ng-container *ngIf="!sideNavMasterSwitch.switchState || !sideNavSwitch.switchState">
-            <ng-container *ngTemplateOutlet="selectedRegionTmpl">
-            </ng-container>
-          </ng-container>
-        </mat-chip-list>
-
-        <!-- current layer tmpl -->
-        <ng-template #currParcellationTmpl let-parc="parc" let-addParc="addParc">
-          <ng-template [ngIf]="addParc.length > 0" [ngIfElse]="defaultParcTmpl">
-            <ng-container *ngFor="let p of addParc">
-              <ng-container *ngTemplateOutlet="chipTmpl; context: {
-                parcel: p,
-                selected: true,
-                dismissable: true
-              }">
-              </ng-container>
-            </ng-container>
-          </ng-template>
-          <ng-template #defaultParcTmpl>
-            <ng-container *ngTemplateOutlet="chipTmpl; context: {
-              parcel: parc,
-              selected: false,
-              dismissable: false
-            }">
-            </ng-container>
-          </ng-template>
-
-          <!-- render parc templ -->
-          <ng-template #chipTmpl
-            let-parcel="parcel"
-            let-selected="selected"
-            let-dismissable="dismissable">
-            <mat-chip class="pe-all"
-              (click)="alSelector.selectorExpanded = true"
-              [selected]="selected">
-              
-              {{ parcel?.groupName ? (parcel?.groupName + ' - ') : '' }}{{ parcel?.name }}
-
-              <!-- info icon -->
-              <ng-template [ngIf]="parcel?.originDatasets?.length > 0"
-                  [ngIfElse]="infoIconBasic">
-
-                <mat-icon
-                  *ngFor="let ds of parcel.originDatasets"
-                  fontSet="fas"
-                  fontIcon="fa-info-circle"
-                  iav-stop="click"
-                  iav-dataset-show-dataset-dialog
-                  [iav-dataset-show-dataset-dialog-kgid]="ds['kgId']"
-                  [iav-dataset-show-dataset-dialog-kgschema]="ds['kgSchema']"
-                  [iav-dataset-show-dataset-dialog-name]="parcel?.properties?.name"
-                  [iav-dataset-show-dataset-dialog-description]="parcel?.properties?.description">
-                </mat-icon>
-
-              </ng-template>
-
-              <ng-template #infoIconBasic>
-                <mat-icon *ngIf="parcel?.properties?.name && parcel?.properties?.description"
-                  fontSet="fas"
-                  fontIcon="fa-info-circle"
-                  iav-stop="click"
-                  iav-dataset-show-dataset-dialog
-                  [iav-dataset-show-dataset-dialog-name]="parcel.properties.name"
-                  [iav-dataset-show-dataset-dialog-description]="parcel.properties.description">
-
-                </mat-icon>
-              </ng-template>
-
-              <!-- dismiss icon -->
-              <mat-icon
-                *ngIf="dismissable"
-                (click)="clearAdditionalLayer(parcel)"
-                fontSet="fas"
-                fontIcon="fa-times">
-              </mat-icon>
-            </mat-chip>
-          </ng-template>
-        </ng-template>
-
-        <ng-template #selectedRegionTmpl>
-          <mat-chip *ngFor="let r of (selectedRegions$ | async)"
-            iav-region
-            (click)="matDrawerMinor.open() && sideNavMasterSwitch.open()"
-            [region]="r"
-            class="pe-all"
-            [ngClass]="{
-              'darktheme':regionDirective.rgbDarkmode === true,
-              'lighttheme': regionDirective.rgbDarkmode === false
-            }"
-            [style.backgroundColor]="regionDirective.rgbString"
-            #regionDirective="iavRegion">
-            <span class="iv-custom-comp text text-truncate d-inline">
-              {{ r.name }}
-            </span>
-            <mat-icon
-              class="iv-custom-comp text"
-              (click)="clearSelectedRegions()"
-              fontSet="fas"
-              fontIcon="fa-times">
-            </mat-icon>
-          </mat-chip>
-        </ng-template>
+      <!-- bottom left overlay -->
+      <div class="position-absolute bottom-0 left-0 w-100 d-inline-block pe-none">
+        <ng-content select="[ui-nehuba-container-overlay-bottom-left]">
+        </ng-content>
       </div>
+
     </mat-drawer-content>
   </mat-drawer-container>
 
@@ -309,7 +182,7 @@
 </ng-template>
 
 <ng-template #autocompleteTmpl>
-  <div class="iv-custom-comp bg region-text-search-autocomplete w-100 mat-elevation-z8 pe-all">
+  <div class="iv-custom-comp bg card w-100 mat-elevation-z8 pe-all">
     <region-text-search-autocomplete class="w-100 pt-2 flex-shrink-0 flex-grow-0">
     </region-text-search-autocomplete>
   </div>
diff --git a/src/ui/nehubaContainer/statusCard/statusCard.component.ts b/src/ui/nehubaContainer/statusCard/statusCard.component.ts
index bdbcea45e..9f2ca8ae5 100644
--- a/src/ui/nehubaContainer/statusCard/statusCard.component.ts
+++ b/src/ui/nehubaContainer/statusCard/statusCard.component.ts
@@ -99,7 +99,7 @@ export class StatusCardComponent implements OnInit, OnChanges{
     ).pipe(
       map(([realFlag, real, voxel]) => realFlag
         ? real.map(v => `${ (v/1e6).toFixed(3) }mm`).join(', ')
-        : voxel.map(v => v.toFixed(3)).join(', s')),
+        : voxel.map(v => v.toFixed(3)).join(', ')),
       startWith(``)
     )
   }
diff --git a/src/ui/nehubaContainer/statusCard/statusCard.template.html b/src/ui/nehubaContainer/statusCard/statusCard.template.html
index 1caa1d845..9265d0084 100644
--- a/src/ui/nehubaContainer/statusCard/statusCard.template.html
+++ b/src/ui/nehubaContainer/statusCard/statusCard.template.html
@@ -1,4 +1,4 @@
-<mat-card class="expandedContainer" *ngIf="showFull; else showMin">
+<mat-card class="expandedContainer p-2 pt-1" *ngIf="showFull; else showMin">
   <mat-card-content>
 
     <!-- reset -->
diff --git a/src/ui/signinBanner/signinBanner.style.css b/src/ui/signinBanner/signinBanner.style.css
index f85f4c7dc..787a6e42e 100644
--- a/src/ui/signinBanner/signinBanner.style.css
+++ b/src/ui/signinBanner/signinBanner.style.css
@@ -17,5 +17,5 @@ take-screenshot
 
 .btnWrapper
 {
-  margin: 0 0.5rem;
+  margin: 0.5rem 0;
 }
diff --git a/src/ui/signinBanner/signinBanner.template.html b/src/ui/signinBanner/signinBanner.template.html
index c6748ab9e..feaed0008 100644
--- a/src/ui/signinBanner/signinBanner.template.html
+++ b/src/ui/signinBanner/signinBanner.template.html
@@ -1,10 +1,8 @@
 <ng-template [ngIf]="ismobile" [ngIfElse]="fullTmpl">
   <div iav-fab-speed-dial-container
-    cdkDrag
     #fab="iavFabSpeedDialContainer">
     <button mat-fab
       iav-fab-speed-dial-trigger
-      cdkDragHandle
       [color]="fab.isOpen ? 'basic' : 'accent'">
       <i class="fas" [ngClass]="fab.isOpen ? 'fa-times' : 'fa-bars'"></i>
     </button>
diff --git a/src/ui/ui.module.ts b/src/ui/ui.module.ts
index b1b1f6c25..20b726949 100644
--- a/src/ui/ui.module.ts
+++ b/src/ui/ui.module.ts
@@ -62,16 +62,14 @@ import { ReorderPanelIndexPipe } from "./nehubaContainer/reorderPanelIndex.pipe"
 import { TouchSideClass } from "./nehubaContainer/touchSideClass.directive";
 import { BinSavedRegionsSelectionPipe, SavedRegionsSelectionBtnDisabledPipe } from "./viewerStateController/viewerState.pipes";
 
-import {FilterWithStringPipe} from "src/util/pipes/filterWithString.pipe";
-
-import {TakeScreenshotComponent} from "src/ui/takeScreenshot/takeScreenshot.component";
-import {FixedMouseContextualContainerDirective} from "src/util/directives/FixedMouseContextualContainerDirective.directive";
+import { TakeScreenshotComponent } from "src/ui/takeScreenshot/takeScreenshot.component";
+import { FixedMouseContextualContainerDirective } from "src/util/directives/FixedMouseContextualContainerDirective.directive";
 import { RegionHierarchy } from './viewerStateController/regionHierachy/regionHierarchy.component'
 import { RegionTextSearchAutocomplete } from "./viewerStateController/regionSearch/regionSearch.component";
 import { CurrentlySelectedRegions } from './viewerStateController/regionsListView/currentlySelectedRegions/currentlySelectedRegions.component'
 import { RegionsListView } from "./viewerStateController/regionsListView/simpleRegionsListView/regionListView.component";
 
-import {ConnectivityBrowserComponent} from "src/ui/connectivityBrowser/connectivityBrowser.component";
+import { ConnectivityBrowserComponent } from "src/ui/connectivityBrowser/connectivityBrowser.component";
 import { RegionMenuComponent } from 'src/ui/parcellationRegion/regionMenu/regionMenu.component'
 import { RegionListSimpleViewComponent } from "./parcellationRegion/regionListSimpleView/regionListSimpleView.component";
 import { SimpleRegionComponent } from "./parcellationRegion/regionSimple/regionSimple.component";
@@ -88,7 +86,7 @@ import { importNehubaFactory } from "./nehubaContainer/util";
 import { APPEND_SCRIPT_TOKEN, appendScriptFactory } from "src/util/constants";
 import { DOCUMENT } from "@angular/common";
 import { AtlasDropdownSelector } from './atlasDropdown/atlasDropdown.component'
-import {AtlasLayerSelector} from "src/ui/atlasLayerSelector/atlasLayerSelector.component";
+import { AtlasLayerSelector } from "src/ui/atlasLayerSelector/atlasLayerSelector.component";
 import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
 import { RegionDirective } from "./parcellationRegion/region.directive";
 import { RenderViewOriginDatasetLabelPipe } from "./parcellationRegion/region.base";
@@ -176,7 +174,7 @@ import { RenderViewOriginDatasetLabelPipe } from "./parcellationRegion/region.ba
     GetFileExtension,
     BinSavedRegionsSelectionPipe,
     SavedRegionsSelectionBtnDisabledPipe,
-    FilterWithStringPipe,
+
     TemplateParcellationHasMoreInfo,
     HumanReadableFileSizePipe,
     ReorderPanelIndexPipe,
@@ -224,6 +222,8 @@ import { RenderViewOriginDatasetLabelPipe } from "./parcellationRegion/region.ba
     HelpComponent,
     ConfigComponent,
     SigninBanner,
+    AtlasLayerSelector,
+    RegionDirective,
     
     CookieAgreement,
     KGToS,
diff --git a/src/util/pipes/filterWithString.pipe.ts b/src/util/pipes/filterWithString.pipe.ts
deleted file mode 100644
index ccb08335f..000000000
--- a/src/util/pipes/filterWithString.pipe.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {Pipe, PipeTransform} from "@angular/core";
-
-@Pipe({
-  name: 'filterWithString',
-})
-export class FilterWithStringPipe implements PipeTransform {
-  public transform(value: any, ...args): any {
-    if (args[0]) {
-      return value.filter(pf => pf.name.toLowerCase().includes(args[0].toLowerCase()))
-    } else {
-      return value
-    }
-  }
-}
-- 
GitLab