Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FIX] User avatar reseting and getting random image #25603

Merged
merged 8 commits into from
Jun 14, 2022
2 changes: 1 addition & 1 deletion apps/meteor/app/lib/server/functions/deleteUser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export async function deleteUser(userId: string, confirmRelinquish = false): Pro
}

// removes user's avatar
if (user.avatarOrigin === 'upload' || user.avatarOrigin === 'url') {
if (user.avatarOrigin === 'upload' || user.avatarOrigin === 'url' || user.avatarOrigin === 'rest') {
FileUpload.getStore('Avatars').deleteByName(user.username);
}

Expand Down
8 changes: 6 additions & 2 deletions apps/meteor/app/lib/server/functions/saveUserIdentity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,13 @@ export function saveUserIdentity({
LivechatDepartmentAgents.replaceUsernameOfAgentByUserId(user._id, username);

const fileStore = FileUpload.getStore('Avatars');
const file = fileStore.model.findOneByName(previousUsername);
const previousFile = Promise.await(fileStore.model.findOneByName(previousUsername));
const file = Promise.await(fileStore.model.findOneByName(username));
if (file) {
fileStore.model.updateFileNameById(file._id, username);
fileStore.model.deleteFile(file._id);
}
if (previousFile) {
fileStore.model.updateFileNameById(previousFile._id, username);
}
}

Expand Down
7 changes: 4 additions & 3 deletions apps/meteor/client/hooks/useUpdateAvatar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ type AvatarServiceObject = {

type AvatarObject = AvatarReset | AvatarUrlObj | FormData | AvatarServiceObject;

const isAvatarReset = (avatarObj: AvatarObject): avatarObj is AvatarReset => typeof avatarObj === 'string';
const isServiceObject = (avatarObj: AvatarObject): avatarObj is AvatarServiceObject => !isAvatarReset(avatarObj) && 'service' in avatarObj;
const isAvatarReset = (avatarObj: AvatarObject): avatarObj is AvatarReset => avatarObj === 'reset';
const isServiceObject = (avatarObj: AvatarObject): avatarObj is AvatarServiceObject =>
!isAvatarReset(avatarObj) && typeof avatarObj === 'object' && 'service' in avatarObj;
const isAvatarUrl = (avatarObj: AvatarObject): avatarObj is AvatarUrlObj =>
!isAvatarReset(avatarObj) && 'service' && 'avatarUrl' in avatarObj;
!isAvatarReset(avatarObj) && typeof avatarObj === 'object' && 'service' && 'avatarUrl' in avatarObj;

export const useUpdateAvatar = (avatarObj: AvatarObject, userId: IUser['_id']): (() => void) => {
const t = useTranslation();
Expand Down