The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/hooks/useUpdateAvatar.js

55 lines
1.9 KiB

import { useMemo, useCallback } from 'react';
import { useMethod } from '../contexts/ServerContext';
import { useEndpointAction } from './useEndpointAction';
import { useTranslation } from '../contexts/TranslationContext';
import { useEndpointUpload } from './useEndpointUpload';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
export const useUpdateAvatar = (avatarObj, userId) => {
const t = useTranslation();
const avatarUrl = avatarObj?.avatarUrl;
const successText = t('Avatar_changed_successfully');
const setAvatarFromService = useMethod('setAvatarFromService');
const dispatchToastMessage = useToastMessageDispatch();
const saveAvatarQuery = useMemo(() => ({
userId,
...avatarUrl && { avatarUrl },
}), [avatarUrl, userId]);
const resetAvatarQuery = useMemo(() => ({
userId,
}), [userId]);
const saveAvatarAction = useEndpointUpload('users.setAvatar', saveAvatarQuery, successText);
const saveAvatarUrlAction = useEndpointAction('POST', 'users.setAvatar', saveAvatarQuery, successText);
const resetAvatarAction = useEndpointAction('POST', 'users.resetAvatar', resetAvatarQuery, successText);
const updateAvatar = useCallback(async () => {
if (avatarObj === 'reset') {
return resetAvatarAction();
}
if (avatarObj.avatarUrl) {
return saveAvatarUrlAction();
}
if (avatarObj.service) {
const { blob, contentType, service } = avatarObj;
try {
await setAvatarFromService(blob, contentType, service);
dispatchToastMessage({ type: 'success', message: successText });
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
return;
}
if (avatarObj instanceof FormData) {
avatarObj.set('userId', userId);
return saveAvatarAction(avatarObj);
}
}, [avatarObj, dispatchToastMessage, resetAvatarAction, saveAvatarAction, saveAvatarUrlAction, setAvatarFromService, successText, userId]);
return updateAvatar;
};