import React, { useState } from 'react'; import { SessionWrapperModal } from '../SessionWrapperModal'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton'; import { SpacerLG } from '../basic/Text'; import { useDispatch } from 'react-redux'; import { updateDisplayPictureModel } from '../../state/ducks/modalDialog'; import { ProfileAvatar, ProfileAvatarProps } from './EditProfileDialog'; import styled from 'styled-components'; import { clearOurAvatar, uploadOurAvatar } from '../../interactions/conversationInteractions'; import { ToastUtils } from '../../session/utils'; import { SessionSpinner } from '../basic/SessionSpinner'; const StyledAvatarContainer = styled.div` cursor: pointer; `; const uploadProfileAvatar = async (scaledAvatarUrl: string | null) => { if (scaledAvatarUrl?.length) { try { const blobContent = await (await fetch(scaledAvatarUrl)).blob(); if (!blobContent || !blobContent.size) { throw new Error('Failed to fetch blob content from scaled avatar'); } await uploadOurAvatar(await blobContent.arrayBuffer()); } catch (error) { if (error.message && error.message.length) { ToastUtils.pushToastError('edit-profile', error.message); } window.log.error( 'showEditProfileDialog Error ensuring that image is properly sized:', error && error.stack ? error.stack : error ); } } }; export type DisplayPictureModalProps = ProfileAvatarProps & { avatarAction: () => Promise; }; export const DisplayPictureModal = (props: DisplayPictureModalProps) => { const dispatch = useDispatch(); if (!props) { return null; } const { newAvatarObjectUrl: _newAvatarObjectUrl, oldAvatarPath: _oldAvatarPath, profileName, ourId, avatarAction, } = props; const [newAvatarObjectUrl, setNewAvatarObjectUrl] = useState(_newAvatarObjectUrl); const [oldAvatarPath, setOldAvatarPath] = useState(_oldAvatarPath); const [loading, setLoading] = useState(false); const closeDialog = () => { dispatch(updateDisplayPictureModel(null)); }; return (
{ const updatedAvatarObjectUrl = await avatarAction(); if (updatedAvatarObjectUrl) { setNewAvatarObjectUrl(updatedAvatarObjectUrl); } }} >
{ setLoading(true); if (newAvatarObjectUrl === _newAvatarObjectUrl) { window.log.debug(`Avatar Object URL has not changed!`); return; } await uploadProfileAvatar(newAvatarObjectUrl); setLoading(false); closeDialog(); }} disabled={_newAvatarObjectUrl === newAvatarObjectUrl} /> { setLoading(true); await clearOurAvatar(); setNewAvatarObjectUrl(null); setOldAvatarPath(null); setLoading(false); }} disabled={!oldAvatarPath} />
); };