add allow advancedSearch with empty search
authorRigel Kent <sendmemail@rigelk.eu>
Mon, 1 Oct 2018 15:21:03 +0000 (17:21 +0200)
committerRigel Kent <sendmemail@rigelk.eu>
Mon, 1 Oct 2018 15:23:06 +0000 (17:23 +0200)
a.k.a. filters on all videos

also added a badge showing the rough number of active filters

client/src/app/search/advanced-search.model.ts
client/src/app/search/search.component.html
client/src/app/search/search.component.ts
client/src/sass/include/_bootstrap.scss

index 48616a9ae2161e12d858fc717b7eca7921ebf41c..033fa9bba86530ba58f7c75154e6dc2ef60ad562 100644 (file)
@@ -110,6 +110,19 @@ export class AdvancedSearch {
     }
   }
 
+  size () {
+    let acc = 0
+
+    const obj = this.toUrlObject()
+    for (const k of Object.keys(obj)) {
+      if (k === 'sort') continue // Exception
+
+      if (obj[k] !== undefined) acc++
+    }
+
+    return acc
+  }
+
   private intoArray (value: any) {
     if (!value) return undefined
 
index 61a05895e56cecba78a0a99bb7442fa99e5ab009..3a87ea1dee5bccef0c5a258f0d3ad2ef1bd690d8 100644 (file)
         [attr.aria-expanded]="!isSearchFilterCollapsed" aria-controls="collapseBasic"
       >
         <span class="icon icon-filter"></span>
-        <ng-container i18n>Filters</ng-container>
+        <ng-container i18n>
+          Filters
+          <span *ngIf="numberOfFilters() > 0" class="badge badge-secondary">{{ numberOfFilters() }}</span>
+        </ng-container>
       </div>
     </div>
 
index 475fdd277628469bf1a821097612367edd3da591..b86b5083accfaf264ee2fcd587f700ad60daeb17 100644 (file)
@@ -30,7 +30,7 @@ export class SearchComponent implements OnInit, OnDestroy {
   currentSearch: string
 
   private subActivatedRoute: Subscription
-  private isInitialLoad = true
+  private isInitialLoad = false // set to false to show the search filters on first arrival
   private firstSearch = true
 
   private channelsPerPage = 2
@@ -137,6 +137,10 @@ export class SearchComponent implements OnInit, OnDestroy {
     this.updateUrlFromAdvancedSearch()
   }
 
+  numberOfFilters () {
+    return this.advancedSearch.size()
+  }
+
   private resetPagination () {
     this.pagination.currentPage = 1
     this.pagination.totalItems = null
@@ -150,9 +154,11 @@ export class SearchComponent implements OnInit, OnDestroy {
   }
 
   private updateUrlFromAdvancedSearch () {
+    const search = (this.currentSearch && this.currentSearch !== '') ? this.currentSearch : undefined
+
     this.router.navigate([], {
       relativeTo: this.route,
-      queryParams: Object.assign({}, this.advancedSearch.toUrlObject(), { search: this.currentSearch })
+      queryParams: Object.assign({}, this.advancedSearch.toUrlObject(), { search })
     })
   }
 }
index 9c7464873bc32820ca25845d6d579fa14774e063..0a9c9a90390afa016d2e2498b0587e746e247d4e 100644 (file)
@@ -23,7 +23,7 @@
 //@import '~bootstrap/scss/card';
 //@import '~bootstrap/scss/breadcrumb';
 //@import '~bootstrap/scss/pagination';
-//@import '~bootstrap/scss/badge';
+@import '~bootstrap/scss/badge';
 //@import '~bootstrap/scss/jumbotron';
 @import '~bootstrap/scss/alert';
 //@import '~bootstrap/scss/progress';