]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/search/advanced-search.model.ts
fix comment and top-menu placement regressions
[github/Chocobozzz/PeerTube.git] / client / src / app / search / advanced-search.model.ts
index a0f3331755f2f9941590cdfb630c57f21885f382..48616a9ae2161e12d858fc717b7eca7921ebf41c 100644 (file)
@@ -18,6 +18,8 @@ export class AdvancedSearch {
   durationMin: number // seconds
   durationMax: number // seconds
 
+  sort: string
+
   constructor (options?: {
     startDate?: string
     endDate?: string
@@ -29,27 +31,32 @@ export class AdvancedSearch {
     tagsAllOf?: string
     durationMin?: string
     durationMax?: string
+    sort?: string
   }) {
     if (!options) return
 
-    this.startDate = options.startDate
-    this.endDate = options.endDate
-    this.nsfw = options.nsfw
-    this.categoryOneOf = options.categoryOneOf
-    this.licenceOneOf = options.licenceOneOf
-    this.languageOneOf = options.languageOneOf
-    this.tagsOneOf = options.tagsOneOf
-    this.tagsAllOf = options.tagsAllOf
+    this.startDate = options.startDate || undefined
+    this.endDate = options.endDate || undefined
+    this.nsfw = options.nsfw || undefined
+    this.categoryOneOf = options.categoryOneOf || undefined
+    this.licenceOneOf = options.licenceOneOf || undefined
+    this.languageOneOf = options.languageOneOf || undefined
+    this.tagsOneOf = options.tagsOneOf || undefined
+    this.tagsAllOf = options.tagsAllOf || undefined
     this.durationMin = parseInt(options.durationMin, 10)
     this.durationMax = parseInt(options.durationMax, 10)
 
     if (isNaN(this.durationMin)) this.durationMin = undefined
     if (isNaN(this.durationMax)) this.durationMax = undefined
+
+    this.sort = options.sort || '-match'
   }
 
   containsValues () {
     const obj = this.toUrlObject()
     for (const k of Object.keys(obj)) {
+      if (k === 'sort') continue // Exception
+
       if (obj[k] !== undefined) return true
     }
 
@@ -67,6 +74,8 @@ export class AdvancedSearch {
     this.tagsAllOf = undefined
     this.durationMin = undefined
     this.durationMax = undefined
+
+    this.sort = '-match'
   }
 
   toUrlObject () {
@@ -80,7 +89,8 @@ export class AdvancedSearch {
       tagsOneOf: this.tagsOneOf,
       tagsAllOf: this.tagsAllOf,
       durationMin: this.durationMin,
-      durationMax: this.durationMax
+      durationMax: this.durationMax,
+      sort: this.sort
     }
   }
 
@@ -89,13 +99,22 @@ export class AdvancedSearch {
       startDate: this.startDate,
       endDate: this.endDate,
       nsfw: this.nsfw,
-      categoryOneOf: this.categoryOneOf ? this.categoryOneOf.split(',') : undefined,
-      licenceOneOf: this.licenceOneOf ? this.licenceOneOf.split(',') : undefined,
-      languageOneOf: this.languageOneOf ? this.languageOneOf.split(',') : undefined,
-      tagsOneOf: this.tagsOneOf ? this.tagsOneOf.split(',') : undefined,
-      tagsAllOf: this.tagsAllOf ? this.tagsAllOf.split(',') : undefined,
+      categoryOneOf: this.intoArray(this.categoryOneOf),
+      licenceOneOf: this.intoArray(this.licenceOneOf),
+      languageOneOf: this.intoArray(this.languageOneOf),
+      tagsOneOf: this.intoArray(this.tagsOneOf),
+      tagsAllOf: this.intoArray(this.tagsAllOf),
       durationMin: this.durationMin,
-      durationMax: this.durationMax
+      durationMax: this.durationMax,
+      sort: this.sort
     }
   }
+
+  private intoArray (value: any) {
+    if (!value) return undefined
+
+    if (typeof value === 'string') return value.split(',')
+
+    return [ value ]
+  }
 }