From cb7c36e2e63c16f7e0146699c77df3f1dea6d10a Mon Sep 17 00:00:00 2001 From: William Grant Date: Tue, 23 May 2023 14:40:33 +1000 Subject: [PATCH] feat: initial remove profile work done --- ts/components/dialog/DisplayPictureModal.tsx | 15 +++++++++------ ts/components/dialog/EditProfileDialog.tsx | 1 - ts/interactions/conversationInteractions.ts | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/ts/components/dialog/DisplayPictureModal.tsx b/ts/components/dialog/DisplayPictureModal.tsx index 67f2e0ff3..7cf18561b 100644 --- a/ts/components/dialog/DisplayPictureModal.tsx +++ b/ts/components/dialog/DisplayPictureModal.tsx @@ -6,7 +6,7 @@ import { useDispatch } from 'react-redux'; import { updateDisplayPictureModel } from '../../state/ducks/modalDialog'; import { ProfileAvatar, ProfileAvatarProps } from './EditProfileDialog'; import styled from 'styled-components'; -import { uploadOurAvatar } from '../../interactions/conversationInteractions'; +import { clearOurAvatar, uploadOurAvatar } from '../../interactions/conversationInteractions'; import { ToastUtils } from '../../session/utils'; import { SessionSpinner } from '../basic/SessionSpinner'; @@ -36,7 +36,6 @@ const uploadProfileAvatar = async (scaledAvatarUrl: string | null) => { export type DisplayPictureModalProps = ProfileAvatarProps & { avatarAction: () => Promise; - removeAction: () => void; }; export const DisplayPictureModal = (props: DisplayPictureModalProps) => { @@ -48,14 +47,14 @@ export const DisplayPictureModal = (props: DisplayPictureModalProps) => { const { newAvatarObjectUrl: _newAvatarObjectUrl, - oldAvatarPath, + oldAvatarPath: _oldAvatarPath, profileName, ourId, avatarAction, - removeAction, } = props; const [newAvatarObjectUrl, setNewAvatarObjectUrl] = useState(_newAvatarObjectUrl); + const [oldAvatarPath, setOldAvatarPath] = useState(_oldAvatarPath); const [loading, setLoading] = useState(false); const closeDialog = () => { @@ -112,8 +111,12 @@ export const DisplayPictureModal = (props: DisplayPictureModalProps) => { text={window.i18n('remove')} buttonColor={SessionButtonColor.Danger} buttonType={SessionButtonType.Simple} - onClick={() => { - removeAction(); + onClick={async () => { + setLoading(true); + await clearOurAvatar(); + setNewAvatarObjectUrl(null); + setOldAvatarPath(null); + setLoading(false); }} disabled={!oldAvatarPath} /> diff --git a/ts/components/dialog/EditProfileDialog.tsx b/ts/components/dialog/EditProfileDialog.tsx index 94a0c45a5..d502adc93 100644 --- a/ts/components/dialog/EditProfileDialog.tsx +++ b/ts/components/dialog/EditProfileDialog.tsx @@ -233,7 +233,6 @@ export const EditProfileDialog = (): ReactElement => { profileName, ourId, avatarAction: fireInputEvent, - removeAction: () => {}, }) ); }; diff --git a/ts/interactions/conversationInteractions.ts b/ts/interactions/conversationInteractions.ts index 6b6c7ca27..86a4df97c 100644 --- a/ts/interactions/conversationInteractions.ts +++ b/ts/interactions/conversationInteractions.ts @@ -487,6 +487,24 @@ export async function uploadOurAvatar(newAvatarDecrypted?: ArrayBuffer) { }; } +export async function clearOurAvatar() { + const ourConvo = getConversationController().get(UserUtils.getOurPubKeyStrFromCache()); + if (!ourConvo) { + window.log.warn('ourConvo not found... This is not a valid case'); + return; + } + + // TODO check if defined first + ourConvo.set('avatarPointer', undefined); + ourConvo.set('avatarInProfile', undefined); + ourConvo.set('profileKey', undefined); + + await ourConvo.commit(); + await SyncUtils.forceSyncConfigurationNowIfNeeded(true); + + // TODO send messages to opengroups to clear avatar from there +} + export async function replyToMessage(messageId: string) { const quotedMessageModel = await Data.getMessageById(messageId); if (!quotedMessageModel) {