File

libs/impl/src/hooks/error/useHandleError.hook.ts

Index

Properties

Properties

view
view: "login" | "confirm" | "register" | "reset" | "updatePassword" | "2fa" | "recovery"
Type : "login" | "confirm" | "register" | "reset" | "updatePassword" | "2fa" | "recovery"
import { AxiosError } from 'axios'

import { useTranslation } from 'react-i18next'
import { toast } from 'react-toastify'

import { ErrorMessageEnum } from '@isomera/interfaces'
import { pascalToSnakeCase } from '@isomera/utils'

export interface HandleErrorOptions {
  view:
    | 'login'
    | 'confirm'
    | 'register'
    | 'reset'
    | 'updatePassword'
    | '2fa'
    | 'recovery'
}

export const useHandleErrorHook = () => {
  const { t } = useTranslation()

  const handleError = (
    error: AxiosError | any,
    options?: HandleErrorOptions
  ) => {
    console.error(error)

    let msg = ErrorMessageEnum.InternalServerError

    if (error.response && error.response.data.message) {
      msg = error.response.data.message
    }

    let translated = t(`errors_${pascalToSnakeCase(msg)}`) // default

    if (options?.view === 'confirm') {
      if (msg === ErrorMessageEnum.Unauthorized)
        translated = t(`errors_invalid_code`)
    } else if (options?.view === 'login') {
      if (msg === ErrorMessageEnum.Unauthorized)
        translated = t(`errors_invalid_email_password`)
    } else if (options?.view === 'reset') {
      if (msg === ErrorMessageEnum.NotFound)
        translated = t(`errors_invalid_token`)
    } else if (options?.view === 'updatePassword') {
      if (msg === ErrorMessageEnum.Unauthorized)
        translated = t(`invalid_password`)
    }

    toast.error(translated)
  }

  return {
    handleError
  }
}

results matching ""

    No results matching ""