Fix human dates in result lists
[oweals/peertube.git] / client / src / app / shared / rest / rest-extractor.service.ts
index aafc9723ecac0028ed2537059982d17a9cd8709e..ad08a32f80b7bfcb7dcaef59a0fc9f4dd9d30170 100644 (file)
@@ -1,8 +1,7 @@
+import { HttpErrorResponse } from '@angular/common/http'
 import { Injectable } from '@angular/core'
+import { dateToHuman } from '@app/shared/misc/utils'
 import { Observable } from 'rxjs/Observable'
-import { HttpErrorResponse } from '@angular/common/http'
-
-import { Utils } from '../utils'
 import { ResultList } from '../../../../../shared'
 
 @Injectable()
@@ -16,7 +15,7 @@ export class RestExtractor {
     const data: T[] = result.data
     const newData: T[] = []
 
-    data.forEach(d => newData.push(fun.call(this, d, additionalArgs)))
+    data.forEach(d => newData.push(fun.apply(this, [ d ].concat(additionalArgs))))
 
     return {
       total: result.total,
@@ -29,12 +28,9 @@ export class RestExtractor {
   }
 
   convertDateToHuman (target: object, fieldsToConvert: string[]) {
-    const source = {}
-    fieldsToConvert.forEach(field => {
-      source[field] = Utils.dateToHuman(target[field])
-    })
+    fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field]))
 
-    return Object.assign(target, source)
+    return target
   }
 
   handleError (err: HttpErrorResponse) {
@@ -45,8 +41,25 @@ export class RestExtractor {
       errorMessage = err.error.message
       console.error('An error occurred:', errorMessage)
     } else if (err.status !== undefined) {
-      const body = err.error
-      errorMessage = body ? body.error : 'Unknown error.'
+      // A server-side error occurred.
+      if (err.error) {
+        if (err.error.errors) {
+          const errors = err.error.errors
+          const errorsArray: string[] = []
+
+          Object.keys(errors).forEach(key => {
+            errorsArray.push(errors[key].msg)
+          })
+
+          errorMessage = errorsArray.join('. ')
+        } else if (err.error.error) {
+          errorMessage = err.error.error
+        }
+      } else if (err.status === 413) {
+        errorMessage = 'Request is too large for the server. Please contact you administrator if you want to increase the limit size.'
+      }
+
+      errorMessage = errorMessage ? errorMessage : 'Unknown error.'
       console.error(`Backend returned code ${err.status}, body was: ${errorMessage}`)
     } else {
       errorMessage = err