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 @@ -12,10 +12,7 @@ ImageAvatarDBContent, } from '../types/avatar-types.js'; import type { LoadingStatus } from '../types/loading-types.js'; -import type { - MediaLibrarySelection, - NativeMediaSelection, -} from '../types/media-types.js'; +import type { NativeMediaSelection } from '../types/media-types.js'; import type { UpdateThreadRequest } from '../types/thread-types.js'; import { useDispatchActionPromise, @@ -25,7 +22,6 @@ export type EditThreadAvatarContextType = { +threadAvatarSaveInProgress: boolean, - +selectFromGalleryAndUpdateThreadAvatar: (threadID: string) => Promise, +updateImageThreadAvatar: ( selection: NativeMediaSelection, threadID: string, @@ -41,7 +37,6 @@ type Props = { +displayFailureAlert: () => mixed, - +selectFromGallery: () => Promise, +useUploadSelectedMedia: ( setProcessingOrUploadInProgress?: (inProgress: boolean) => mixed, ) => (selection: NativeMediaSelection) => Promise, @@ -51,7 +46,6 @@ function BaseEditThreadAvatarProvider(props: Props): React.Node { const { displayFailureAlert, - selectFromGallery, useUploadSelectedMedia, activeThreadID, children, @@ -135,17 +129,6 @@ ], ); - const selectFromGalleryAndUpdateThreadAvatar = React.useCallback( - async (threadID: string) => { - const selection: ?MediaLibrarySelection = await selectFromGallery(); - if (!selection) { - return; - } - await updateImageThreadAvatar(selection, threadID); - }, - [selectFromGallery, updateImageThreadAvatar], - ); - const setThreadAvatar = React.useCallback( async (threadID: string, avatarRequest: UpdateUserAvatarRequest) => { const updateThreadRequest: UpdateThreadRequest = { @@ -174,16 +157,10 @@ const context = React.useMemo( () => ({ threadAvatarSaveInProgress, - selectFromGalleryAndUpdateThreadAvatar, updateImageThreadAvatar, setThreadAvatar, }), - [ - threadAvatarSaveInProgress, - selectFromGalleryAndUpdateThreadAvatar, - updateImageThreadAvatar, - setThreadAvatar, - ], + [threadAvatarSaveInProgress, updateImageThreadAvatar, setThreadAvatar], ); 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 @@ -9,6 +9,7 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { uploadMultimedia } from 'lib/actions/upload-actions.js'; +import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js'; import { EditUserAvatarContext } from 'lib/components/edit-user-avatar-provider.react.js'; import { extensionFromFilename, @@ -307,6 +308,27 @@ return selectFromGalleryAndUpdateUserAvatar; } +function useSelectFromGalleryAndUpdateThreadAvatar(): ( + threadID: string, +) => Promise { + const editThreadAvatarContext = React.useContext(EditThreadAvatarContext); + invariant(editThreadAvatarContext, 'editThreadAvatarContext must be defined'); + const { updateImageThreadAvatar } = editThreadAvatarContext; + + const selectFromGalleryAndUpdateThreadAvatar = React.useCallback( + async (threadID: string): Promise => { + const selection: ?MediaLibrarySelection = await selectFromGallery(); + if (!selection) { + return; + } + await updateImageThreadAvatar(selection, threadID); + }, + [updateImageThreadAvatar], + ); + + return selectFromGalleryAndUpdateThreadAvatar; +} + type ShowAvatarActionSheetOptions = { +id: 'emoji' | 'image' | 'camera' | 'ens' | 'cancel' | 'remove', +onPress?: () => mixed, @@ -440,4 +462,5 @@ useSelectFromGalleryAndUpdateUserAvatar, useNativeSetUserAvatar, useNativeUpdateUserImageAvatar, + useSelectFromGalleryAndUpdateThreadAvatar, }; diff --git a/native/avatars/edit-thread-avatar.react.js b/native/avatars/edit-thread-avatar.react.js --- a/native/avatars/edit-thread-avatar.react.js +++ b/native/avatars/edit-thread-avatar.react.js @@ -8,7 +8,10 @@ import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js'; import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js'; -import { useShowAvatarActionSheet } from './avatar-hooks.js'; +import { + useSelectFromGalleryAndUpdateThreadAvatar, + useShowAvatarActionSheet, +} from './avatar-hooks.js'; import EditAvatarBadge from './edit-avatar-badge.react.js'; import ThreadAvatar from './thread-avatar.react.js'; import { @@ -27,11 +30,11 @@ const editThreadAvatarContext = React.useContext(EditThreadAvatarContext); invariant(editThreadAvatarContext, 'editThreadAvatarContext should be set'); - const { - threadAvatarSaveInProgress, - selectFromGalleryAndUpdateThreadAvatar, - setThreadAvatar, - } = editThreadAvatarContext; + const { threadAvatarSaveInProgress, setThreadAvatar } = + editThreadAvatarContext; + + const selectFromGalleryAndUpdateThreadAvatar = + useSelectFromGalleryAndUpdateThreadAvatar(); const { navigate } = useNavigation(); diff --git a/native/avatars/native-edit-thread-avatar-provider.react.js b/native/avatars/native-edit-thread-avatar-provider.react.js --- a/native/avatars/native-edit-thread-avatar-provider.react.js +++ b/native/avatars/native-edit-thread-avatar-provider.react.js @@ -4,7 +4,7 @@ import { BaseEditThreadAvatarProvider } from 'lib/components/base-edit-thread-avatar-provider.react.js'; -import { selectFromGallery, useUploadSelectedMedia } from './avatar-hooks.js'; +import { useUploadSelectedMedia } from './avatar-hooks.js'; import { activeThreadSelector } from '../navigation/nav-selectors.js'; import { NavContext } from '../navigation/navigation-context.js'; import Alert from '../utils/alert.js'; @@ -32,7 +32,6 @@ return (