From e5e11566424e5ee49d1e71a75e68e2abddeb8948 Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Wed, 8 May 2019 15:07:06 +0200
Subject: [PATCH] chore: use combined modal to display help and ToU chore:
 restore clear all selected regions

---
 src/atlasViewer/atlasViewer.component.ts      | 17 -------------
 .../atlasViewer.constantService.service.ts    |  3 +--
 src/atlasViewer/atlasViewer.template.html     | 24 ++++++++++++++-----
 .../flatTree/flatTree.template.html           |  3 +--
 src/main.module.ts                            |  2 ++
 .../regionHierarchy.component.ts              |  8 +++++++
 .../regionHierachy/regionHierarchy.style.css  | 18 --------------
 .../regionHierarchy.template.html             | 13 +++++++---
 .../signinBanner/signinBanner.components.ts   | 11 +++++----
 .../signinBanner/signinBanner.template.html   | 21 +++++-----------
 10 files changed, 53 insertions(+), 67 deletions(-)

diff --git a/src/atlasViewer/atlasViewer.component.ts b/src/atlasViewer/atlasViewer.component.ts
index c5736694e..efc5e321e 100644
--- a/src/atlasViewer/atlasViewer.component.ts
+++ b/src/atlasViewer/atlasViewer.component.ts
@@ -33,7 +33,6 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit {
 
   @ViewChild('floatingMouseContextualContainer', { read: ViewContainerRef }) floatingMouseContextualContainer: ViewContainerRef
   @ViewChild('helpComponent', {read: TemplateRef}) helpComponent : TemplateRef<any>
-  @ViewChild('viewerConfigComponent', {read: TemplateRef}) viewerConfigComponent : TemplateRef<any>
   @ViewChild('signinModalComponent', {read: TemplateRef}) signinModalComponent : TemplateRef<any>
   @ViewChild('cookieAgreementComponent', {read: TemplateRef}) cookieAgreementComponent : TemplateRef<any>
   @ViewChild(LayoutMainSide) layoutMainSide: LayoutMainSide
@@ -55,7 +54,6 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit {
   public selectedRegions$: Observable<any[]>
   public selectedPOI$ : Observable<any[]>
   private showHelp$: Observable<any>
-  private showConfig$: Observable<any>
 
   public dedicatedView$: Observable<string | null>
   public onhoverSegment$: Observable<string>
@@ -106,10 +104,6 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit {
       debounceTime(170)
     )
 
-    this.showConfig$ = this.constantsService.showConfigSubject$.pipe(
-      debounceTime(170)
-    )
-
     this.selectedRegions$ = this.store.pipe(
       select('viewerState'),
       filter(state=>isDefined(state)&&isDefined(state.regionsSelected)),
@@ -245,17 +239,6 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit {
       })
     )
 
-    this.subscriptions.push(
-      this.showConfig$.subscribe(() => {
-        this.modalService.show(ModalUnit, {
-          initialState: {
-            title: this.constantsService.showConfigTitle,
-            template: this.viewerConfigComponent
-          }
-        })
-      })
-    )
-
     this.subscriptions.push(
       this.ngLayerNames$.pipe(
         concatMap(data => this.constantsService.loadExportNehubaPromise.then(data))
diff --git a/src/atlasViewer/atlasViewer.constantService.service.ts b/src/atlasViewer/atlasViewer.constantService.service.ts
index 680be189a..137b18678 100644
--- a/src/atlasViewer/atlasViewer.constantService.service.ts
+++ b/src/atlasViewer/atlasViewer.constantService.service.ts
@@ -172,13 +172,12 @@ Interactive atlas viewer requires **webgl2.0**, and the \`EXT_color_buffer_float
   /**
    * Observable for showing config modal
    */
-  public showConfigSubject$: Subject<null> = new Subject()
   public showConfigTitle: String = 'Settings'
   /**
    * Observable for showing help modal
    */
   public showHelpSubject$: Subject<null> = new Subject()
-  public showHelpTitle: String = 'Help: Controls and Shortcuts'
+  public showHelpTitle: String = 'About'
 
   private showHelpGeneralMobile = [
     ['hold 🌏 + ↕', 'change oblique slice mode'],
diff --git a/src/atlasViewer/atlasViewer.template.html b/src/atlasViewer/atlasViewer.template.html
index 230eabf2a..976e1bdb7 100644
--- a/src/atlasViewer/atlasViewer.template.html
+++ b/src/atlasViewer/atlasViewer.template.html
@@ -78,12 +78,24 @@
 </div>
 
 <ng-template #helpComponent>
-  <help-component>
-  </help-component>
-</ng-template>
-<ng-template #viewerConfigComponent>
-  <config-component>
-  </config-component>
+  <tabset>
+    <tab heading="Help">
+      <help-component>
+      </help-component>
+    </tab>
+    <tab heading="Settings">
+      <div class="mt-2">
+        <config-component>
+        </config-component>
+      </div>
+    </tab>
+    <tab heading="Privacy Policy">
+      <div class="mt-2">
+        <cookie-agreement>
+        </cookie-agreement>
+      </div>
+    </tab>
+  </tabset>
 </ng-template>
 <ng-template #signinModalComponent>
   <signin-modal>
diff --git a/src/components/flatTree/flatTree.template.html b/src/components/flatTree/flatTree.template.html
index 642dc3ac6..ef02ebb8f 100644
--- a/src/components/flatTree/flatTree.template.html
+++ b/src/components/flatTree/flatTree.template.html
@@ -26,8 +26,7 @@
     
         </span>
       </span>
-      <span 
-        class="test"
+      <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>
diff --git a/src/main.module.ts b/src/main.module.ts
index 9a1e6229c..6e8c6547e 100644
--- a/src/main.module.ts
+++ b/src/main.module.ts
@@ -15,6 +15,7 @@ import { WidgetUnit } from "./atlasViewer/widgetUnit/widgetUnit.component";
 import { WidgetServices } from './atlasViewer/widgetUnit/widgetService.service'
 import { fasTooltipScreenshotDirective,fasTooltipInfoSignDirective,fasTooltipLogInDirective,fasTooltipNewWindowDirective,fasTooltipQuestionSignDirective,fasTooltipRemoveDirective,fasTooltipRemoveSignDirective } from "./util/directives/glyphiconTooltip.directive";
 import { TooltipModule } from "ngx-bootstrap/tooltip";
+import { TabsModule } from 'ngx-bootstrap/tabs'
 import { ModalModule } from 'ngx-bootstrap/modal'
 import { ModalUnit } from "./atlasViewer/modalUnit/modalUnit.component";
 import { AtlasViewerURLService } from "./atlasViewer/atlasViewer.urlService.service";
@@ -46,6 +47,7 @@ import { DatabrowserService } from "./ui/databrowserModule/databrowser.service";
     
     ModalModule.forRoot(),
     TooltipModule.forRoot(),
+    TabsModule.forRoot(),
     StoreModule.forRoot({
       pluginState,
       viewerConfigState,
diff --git a/src/ui/regionHierachy/regionHierarchy.component.ts b/src/ui/regionHierachy/regionHierarchy.component.ts
index b6c43e089..1d5e27281 100644
--- a/src/ui/regionHierachy/regionHierarchy.component.ts
+++ b/src/ui/regionHierachy/regionHierarchy.component.ts
@@ -32,6 +32,9 @@ export class RegionHierarchy implements OnInit{
   @Output()
   private doubleClickRegion: EventEmitter<any> = new EventEmitter()
 
+  @Output()
+  private clearAllRegions: EventEmitter<null> = new EventEmitter()
+
   public searchTerm: string = ''
   private subscriptions: Subscription[] = []
 
@@ -56,6 +59,11 @@ export class RegionHierarchy implements OnInit{
   ){
   }
 
+  clearRegions(event:MouseEvent){
+    event.stopPropagation()
+    this.clearAllRegions.emit()
+  }
+
   get showRegionTree(){
     return this._showRegionTree
   }
diff --git a/src/ui/regionHierachy/regionHierarchy.style.css b/src/ui/regionHierachy/regionHierarchy.style.css
index 18ab174bf..e6ada8b93 100644
--- a/src/ui/regionHierachy/regionHierarchy.style.css
+++ b/src/ui/regionHierachy/regionHierarchy.style.css
@@ -1,22 +1,4 @@
 
-div[treeHeader]
-{
-  height: 55px;
-}
-
-div[treeHeader] > span 
-{
-  display:inline-block;
-  padding: 12px 0px;
-  line-height:2em;
-  border:none;
-}
-
-div[treeHeader] > span.btn.btn-link
-{
-  margin-left:2em;
-}
-
 div[treeContainer]
 {
   padding:1em;
diff --git a/src/ui/regionHierachy/regionHierarchy.template.html b/src/ui/regionHierachy/regionHierarchy.template.html
index faa9ea2d7..2c46bb630 100644
--- a/src/ui/regionHierachy/regionHierarchy.template.html
+++ b/src/ui/regionHierachy/regionHierarchy.template.html
@@ -17,9 +17,16 @@
   hideScrollbarContainer>
 
   <div treeContainer #treeContainer>
-    <div treeHeader>
-      <span>{{ selectedRegions.length }} {{ selectedRegions.length > 1 ? 'regions' : 'region' }} selected</span> 
-      <span (click)="clearRegions($event)" *ngIf="selectedRegions.length > 0" class="btn btn-link">clear all</span>
+    <div class="d-inline-flex align-items-center">
+      <div>
+        {{ selectedRegions.length }} {{ selectedRegions.length > 1 ? 'regions' : 'region' }} selected
+      </div>
+      <div
+        (click)="clearRegions($event)"
+        [ngClass]="{ 'invisible': selectedRegions.length === 0 }"
+        class="btn btn-link">
+        clear all
+      </div>
     </div>
     
     <ng-container *ngIf="selectedParcellation && selectedParcellation.regions as regions">
diff --git a/src/ui/signinBanner/signinBanner.components.ts b/src/ui/signinBanner/signinBanner.components.ts
index ac2005a42..4f81cf657 100644
--- a/src/ui/signinBanner/signinBanner.components.ts
+++ b/src/ui/signinBanner/signinBanner.components.ts
@@ -121,14 +121,17 @@ export class SigninBanner implements OnInit, OnDestroy{
     this.constantService.showHelpSubject$.next()
   }
 
-  showConfig() {
-    this.constantService.showConfigSubject$.next()
-  }
-
   showSignin() {
     this.constantService.showSigninSubject$.next(this.user)
   }
 
+  clearAllRegions(){
+    this.store.dispatch({
+      type: SELECT_REGIONS,
+      selectRegions: []
+    })
+  }
+
   get isMobile(){
     return this.constantService.mobile
   }
diff --git a/src/ui/signinBanner/signinBanner.template.html b/src/ui/signinBanner/signinBanner.template.html
index 90ea9f142..81aa6e58c 100644
--- a/src/ui/signinBanner/signinBanner.template.html
+++ b/src/ui/signinBanner/signinBanner.template.html
@@ -20,6 +20,7 @@
     [selectedRegions]="selectedRegions$ | async | filterNull"
     (singleClickRegion)="handleRegionClick({ mode: 'single', region: $event })"
     (doubleClickRegion)="handleRegionClick({ mode: 'double', region: $event })"
+    (clearAllRegions)="clearAllRegions()"
     *ngIf="selectedParcellation$ | async as selectedParcellation"
     [selectedParcellation]="selectedParcellation">
 
@@ -34,21 +35,11 @@
   <i class="fas fa-question-circle"></i>
 </div>
 
-<!-- config btn -->
+<!-- signin -->
 <div
-  *ngIf="!isMobile" 
-  (click)="showConfig()"
+  (click)="showSignin()"
   class="btn btn-outline-secondary btn-sm rounded-circle">
-  <i class="fas fa-cog"></i>
-</div>
-
-<!-- signin -->
-<div class="btnWrapper">
-  <div
-    (click)="showSignin()"
-    class="btn btn-outline-secondary btn-sm rounded-circle">
-    <i
-      [ngClass]="user ? 'fa-user' : 'fa-sign-in-alt'"
-      class="fas"></i>
-  </div>
+  <i
+    [ngClass]="user ? 'fa-user' : 'fa-sign-in-alt'"
+    class="fas"></i>
 </div>
\ No newline at end of file
-- 
GitLab