From 00a16766bb902a475c2e2747eccc463daaa2a4ab Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 16 Sep 2022 14:08:48 +0700 Subject: [PATCH] changed the way we upload user avatars --- src/api/auth/index.ts | 7 +++++++ src/api/auth/types.ts | 5 ++++- src/constants/api.ts | 2 ++ src/hooks/auth/usePatchUser.ts | 15 +++++++++++---- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/api/auth/index.ts b/src/api/auth/index.ts index bce31564..06a46c75 100644 --- a/src/api/auth/index.ts +++ b/src/api/auth/index.ts @@ -15,6 +15,7 @@ import { ApiLoginWithSocialResult, ApiRestoreCodeRequest, ApiRestoreCodeResult, + ApiUpdatePhotoRequest, ApiUpdateUserRequest, ApiUpdateUserResult, ApiUserLoginRequest, @@ -51,6 +52,12 @@ export const apiAuthGetUpdates = ({ export const apiUpdateUser = ({ user }: ApiUpdateUserRequest) => api.patch(API.USER.ME, user).then(cleanResult); +export const apiUpdatePhoto = ({ file }: ApiUpdatePhotoRequest) => + api.post(API.USER.UPDATE_PHOTO, file).then(cleanResult); + +export const apiUpdateCover = ({ file }: ApiUpdatePhotoRequest) => + api.post(API.USER.UPDATE_COVER, file).then(cleanResult); + export const apiRequestRestoreCode = (field: string) => api .post<{ field: string }>(API.USER.REQUEST_CODE(), { field }) diff --git a/src/api/auth/types.ts b/src/api/auth/types.ts index 50fee2cd..2bb1a355 100644 --- a/src/api/auth/types.ts +++ b/src/api/auth/types.ts @@ -1,4 +1,4 @@ -import { INotification } from '~/types'; +import { IFile, INotification } from '~/types'; import { ISocialAccount, IUser } from '~/types/auth'; export type ApiUserLoginRequest = Record<'username' | 'password', string>; @@ -8,6 +8,9 @@ export type ApiAuthGetUserResult = { user: IUser }; export type ApiUpdateUserRequest = { user: Partial; }; +export type ApiUpdatePhotoRequest = { + file: IFile; +}; export type ApiUpdateUserResult = { user: IUser; errors: Record, string>; diff --git a/src/constants/api.ts b/src/constants/api.ts index 7c31b671..6cb36bf4 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -9,6 +9,8 @@ export const API = { OAUTH_WINDOW: (provider: OAuthProvider) => `${CONFIG.apiHost}oauth/${provider}/redirect`, ME: '/auth', + UPDATE_PHOTO: '/auth/photo', + UPDATE_COVER: '/auth/photo', PROFILE: (username: string) => `/users/${username}/profile`, MESSAGES: (username: string) => `/users/${username}/messages`, MESSAGE_SEND: (username: string) => `/users/${username}/messages`, diff --git a/src/hooks/auth/usePatchUser.ts b/src/hooks/auth/usePatchUser.ts index 1a67be82..5c2713a0 100644 --- a/src/hooks/auth/usePatchUser.ts +++ b/src/hooks/auth/usePatchUser.ts @@ -1,10 +1,11 @@ import { useCallback } from 'react'; -import { apiUpdateUser } from '~/api/auth'; +import { apiUpdatePhoto, apiUpdateUser } from '~/api/auth'; import { ApiUpdateUserRequest } from '~/api/auth/types'; import { UploadSubject, UploadTarget } from '~/constants/uploads'; import { useUser } from '~/hooks/auth/useUser'; import { useUploader } from '~/hooks/data/useUploader'; +import { IFile } from '~/types'; import { showErrorToast } from '~/utils/errors/showToast'; export const usePatchUser = () => { @@ -24,10 +25,16 @@ export const usePatchUser = () => { ); const updatePhoto = useCallback( - async (file: File) => { + async (photo: File) => { try { - const photo = await uploadFile(file); - await save({ photo }); + const file = await uploadFile(photo); + + if (!file) { + return; + } + + const result = await apiUpdatePhoto({ file: file! }); + await update(result.user); } catch (error) { showErrorToast(error); }