diff --git a/src/hooks/use-uploader.ts b/src/hooks/use-uploader.ts index b3d945d..438250c 100644 --- a/src/hooks/use-uploader.ts +++ b/src/hooks/use-uploader.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import * as Utils from '../utils'; -import axios from 'axios'; +import axios, { AxiosError } from 'axios'; import { Failed, Stopped, Task, Uploaded, Uploader, Uploading, UploadParams } from '../types'; type AbortMap = { @@ -82,7 +82,7 @@ export function useUploader({ else form.append(`${fieldname}`, source); - const res = await axios.request({ + const res = await axios.request({ ...defaultConfig, ...{ url, method, headers, data: form }, }) @@ -90,17 +90,20 @@ export function useUploader({ updateTask(id, { status: Uploaded, result: { httpStatus: res.status, - responseData: res.data as Result + responseData: res.data } }); } catch (error) { const { response }: any = error; if (response) { + const errorResult = axios.isAxiosError(error) ? error as AxiosError : error as Error; + updateTask(id, { status: Failed, result: { httpStatus: response?.status, - responseData: response?.data as Result + responseData: response?.data, + error: errorResult } }); } diff --git a/src/types.ts b/src/types.ts index d4bdd44..858548b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import { AxiosRequestHeaders, Method } from "axios"; +import { AxiosError, AxiosRequestHeaders, Method } from "axios"; export const Uploading = "uploading"; export const Stopped = "stopped"; @@ -17,6 +17,7 @@ export type UploadParams = { export type TaskResult = { httpStatus: number | undefined; responseData: A | undefined; + error?: AxiosError | Error | undefined; } export type Task = { diff --git a/tests/index.test.ts b/tests/index.test.ts index 8b599ec..fffc557 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -65,6 +65,7 @@ it('sucessfully uploaded a file', async () => { } }); + expect(result.current[0][0].result?.error).toBeUndefined(); }); it('stop uploading process', async () => { @@ -155,6 +156,14 @@ it('uploaded failed', async () => { expect(result.current[0][0].size).toEqual(12) expect(result.current[0][0].status).toEqual(Failed); expect(result.current[0][0].result).toEqual({ + error: { + response: { + data: { + message: "unauthorized", + }, + status: 401, + }, + }, httpStatus: 401, responseData: { message: 'unauthorized'