Changeset View
Changeset View
Standalone View
Standalone View
native/profile/emoji-user-avatar-creation.react.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | |||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { updateUserAvatarActionTypes } from 'lib/actions/user-actions.js'; | |||||
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; | |||||
import { savedEmojiAvatarSelectorForCurrentUser } from 'lib/selectors/user-selectors.js'; | import { savedEmojiAvatarSelectorForCurrentUser } from 'lib/selectors/user-selectors.js'; | ||||
import { EditUserAvatarContext } from '../avatars/edit-user-avatar-provider.react.js'; | |||||
import EmojiAvatarCreation from '../avatars/emoji-avatar-creation.react.js'; | import EmojiAvatarCreation from '../avatars/emoji-avatar-creation.react.js'; | ||||
import { useSelector } from '../redux/redux-utils.js'; | import { displayActionResultModal } from '../navigation/action-result-modal.js'; | ||||
import { useSaveUserAvatar } from '../utils/avatar-utils.js'; | |||||
const userAvatarLoadingStatusSelector = createLoadingStatusSelector( | |||||
updateUserAvatarActionTypes, | |||||
); | |||||
// eslint-disable-next-line no-unused-vars | // eslint-disable-next-line no-unused-vars | ||||
function EmojiUserAvatarCreation(props: { ... }): React.Node { | function EmojiUserAvatarCreation(props: { ... }): React.Node { | ||||
const saveUserAvatar = useSaveUserAvatar(); | const editUserAvatarContext = React.useContext(EditUserAvatarContext); | ||||
const saveUserAvatarCallLoading = useSelector( | invariant(editUserAvatarContext, 'editUserAvatarContext should be set'); | ||||
state => userAvatarLoadingStatusSelector(state) === 'loading', | |||||
const { setUserAvatar, userAvatarSaveInProgress } = editUserAvatarContext; | |||||
const setAvatar = React.useCallback( | |||||
async avatarRequest => { | |||||
const result = await setUserAvatar(avatarRequest); | |||||
displayActionResultModal('Avatar updated!'); | |||||
return result; | |||||
}, | |||||
[setUserAvatar], | |||||
); | ); | ||||
return ( | return ( | ||||
<EmojiAvatarCreation | <EmojiAvatarCreation | ||||
saveAvatarCall={saveUserAvatar} | saveAvatarCall={setAvatar} | ||||
saveAvatarCallLoading={saveUserAvatarCallLoading} | saveAvatarCallLoading={userAvatarSaveInProgress} | ||||
savedEmojiAvatarSelector={savedEmojiAvatarSelectorForCurrentUser} | savedEmojiAvatarSelector={savedEmojiAvatarSelectorForCurrentUser} | ||||
/> | /> | ||||
); | ); | ||||
} | } | ||||
export default EmojiUserAvatarCreation; | export default EmojiUserAvatarCreation; |