diff --git a/lib/components/base-edit-thread-avatar-provider.react.js b/lib/components/base-edit-thread-avatar-provider.react.js --- a/lib/components/base-edit-thread-avatar-provider.react.js +++ b/lib/components/base-edit-thread-avatar-provider.react.js @@ -21,9 +21,10 @@ import { useSelector } from '../utils/redux-utils.js'; export type EditThreadAvatarContextType = { + +updateThreadAvatarMediaUploadInProgress: (inProgress: boolean) => void, +threadAvatarSaveInProgress: boolean, +updateImageThreadAvatar: ( - selection: NativeMediaSelection, + imageAvatarUpdateRequest: ImageAvatarDBContent, threadID: string, ) => Promise, +baseSetThreadAvatar: ( @@ -43,7 +44,7 @@ +children: React.Node, }; function BaseEditThreadAvatarProvider(props: Props): React.Node { - const { useUploadSelectedMedia, activeThreadID, children } = props; + const { activeThreadID, children } = props; const updateThreadAvatarLoadingStatus: LoadingStatus = useSelector( createLoadingStatusSelector( @@ -78,18 +79,11 @@ threadAvatarMediaUploadInProgress.has(activeThreadID) || updateThreadAvatarLoadingStatus === 'loading'; - const uploadSelectedMedia = useUploadSelectedMedia( - updateThreadAvatarMediaUploadInProgress, - ); - const updateImageThreadAvatar = React.useCallback( - async (selection: NativeMediaSelection, threadID: string) => { - const imageAvatarUpdateRequest = await uploadSelectedMedia(selection); - - if (!imageAvatarUpdateRequest) { - return; - } - + async ( + imageAvatarUpdateRequest: ImageAvatarDBContent, + threadID: string, + ) => { const updateThreadRequest: UpdateThreadRequest = { threadID, changes: { @@ -109,7 +103,6 @@ changeThreadSettingsCall, dispatchActionPromise, updateThreadAvatarMediaUploadInProgress, - uploadSelectedMedia, ], ); @@ -135,11 +128,17 @@ const context = React.useMemo( () => ({ + updateThreadAvatarMediaUploadInProgress, threadAvatarSaveInProgress, updateImageThreadAvatar, baseSetThreadAvatar, }), - [threadAvatarSaveInProgress, updateImageThreadAvatar, baseSetThreadAvatar], + [ + updateThreadAvatarMediaUploadInProgress, + threadAvatarSaveInProgress, + updateImageThreadAvatar, + baseSetThreadAvatar, + ], ); return ( diff --git a/native/avatars/avatar-hooks.js b/native/avatars/avatar-hooks.js --- a/native/avatars/avatar-hooks.js +++ b/native/avatars/avatar-hooks.js @@ -340,20 +340,30 @@ ) => Promise { const editThreadAvatarContext = React.useContext(EditThreadAvatarContext); invariant(editThreadAvatarContext, 'editThreadAvatarContext must be defined'); - const { updateImageThreadAvatar } = editThreadAvatarContext; + const { updateImageThreadAvatar, updateThreadAvatarMediaUploadInProgress } = + editThreadAvatarContext; + + const uploadSelectedMedia = useUploadSelectedMedia( + updateThreadAvatarMediaUploadInProgress, + ); const nativeUpdateThreadImageAvatar = React.useCallback( async ( selection: NativeMediaSelection, threadID: string, ): Promise => { + const imageAvatarUpdateRequest = await uploadSelectedMedia(selection); + if (!imageAvatarUpdateRequest) { + return; + } + try { - await updateImageThreadAvatar(selection, threadID); + await updateImageThreadAvatar(imageAvatarUpdateRequest, threadID); } catch { displayAvatarUpdateFailureAlert(); } }, - [updateImageThreadAvatar], + [updateImageThreadAvatar, uploadSelectedMedia], ); return nativeUpdateThreadImageAvatar;