aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/helpers/utils/upload.ts
blob: a3fce7fee721f168c5ef7a5eb8523cc6f540641a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { HttpErrorResponse } from '@angular/common/http'
import { Notifier } from '@app/core'
import { HttpStatusCode } from '@shared/models'

function genericUploadErrorHandler (parameters: {
  err: Pick<HttpErrorResponse, 'message' | 'status' | 'headers'>
  name: string
  notifier: Notifier
  sticky?: boolean
}) {
  const { err, name, notifier, sticky } = { sticky: false, ...parameters }
  const title = $localize`The upload failed`
  let message = err.message

  if (err instanceof ErrorEvent) { // network error
    message = $localize`The connection was interrupted`
    notifier.error(message, title, null, sticky)
  } else if (err.status === HttpStatusCode.INTERNAL_SERVER_ERROR_500) {
    message = $localize`The server encountered an error`
    notifier.error(message, title, null, sticky)
  } else if (err.status === HttpStatusCode.REQUEST_TIMEOUT_408) {
    message = $localize`Your ${name} file couldn't be transferred before the set timeout (usually 10min)`
    notifier.error(message, title, null, sticky)
  } else if (err.status === HttpStatusCode.PAYLOAD_TOO_LARGE_413) {
    const maxFileSize = err.headers?.get('X-File-Maximum-Size') || '8G'
    message = $localize`Your ${name} file was too large (max. size: ${maxFileSize})`
    notifier.error(message, title, null, sticky)
  } else {
    notifier.error(err.message, title)
  }

  return message
}

export {
  genericUploadErrorHandler
}