Changeset View
Changeset View
Standalone View
Standalone View
native/utils/avatar-utils.js
// @flow | // @flow | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { Alert } from 'react-native'; | import { Alert } from 'react-native'; | ||||
import { | import { | ||||
changeThreadSettings, | changeThreadSettings, | ||||
changeThreadSettingsActionTypes, | changeThreadSettingsActionTypes, | ||||
} from 'lib/actions/thread-actions.js'; | } from 'lib/actions/thread-actions.js'; | ||||
import { | |||||
updateUserAvatar, | |||||
updateUserAvatarActionTypes, | |||||
} from 'lib/actions/user-actions.js'; | |||||
import type { UpdateUserAvatarRequest } from 'lib/types/avatar-types.js'; | import type { UpdateUserAvatarRequest } from 'lib/types/avatar-types.js'; | ||||
import { | import { | ||||
useServerCall, | useServerCall, | ||||
useDispatchActionPromise, | useDispatchActionPromise, | ||||
} from 'lib/utils/action-utils.js'; | } from 'lib/utils/action-utils.js'; | ||||
import { displayActionResultModal } from '../navigation/action-result-modal.js'; | import { displayActionResultModal } from '../navigation/action-result-modal.js'; | ||||
function useShouldRenderAvatars(): boolean { | function useShouldRenderAvatars(): boolean { | ||||
return true; | return true; | ||||
} | } | ||||
function useSaveUserAvatar(): ( | |||||
newAvatarRequest: UpdateUserAvatarRequest, | |||||
) => mixed { | |||||
const callUpdateUserAvatar = useServerCall(updateUserAvatar); | |||||
const dispatchActionPromise = useDispatchActionPromise(); | |||||
return React.useCallback( | |||||
newAvatarRequest => { | |||||
const saveAvatarPromise = (async () => { | |||||
try { | |||||
const response = await callUpdateUserAvatar(newAvatarRequest); | |||||
displayActionResultModal('Avatar updated!'); | |||||
return response; | |||||
} catch (e) { | |||||
Alert.alert( | |||||
'Couldn’t save avatar', | |||||
'Please try again later', | |||||
[{ text: 'OK' }], | |||||
{ | |||||
cancelable: true, | |||||
}, | |||||
); | |||||
throw e; | |||||
} | |||||
})(); | |||||
dispatchActionPromise(updateUserAvatarActionTypes, saveAvatarPromise); | |||||
}, | |||||
[callUpdateUserAvatar, dispatchActionPromise], | |||||
); | |||||
} | |||||
function useSaveThreadAvatar(): ( | function useSaveThreadAvatar(): ( | ||||
newAvatarRequest: UpdateUserAvatarRequest, | newAvatarRequest: UpdateUserAvatarRequest, | ||||
threadID: string, | threadID: string, | ||||
) => mixed { | ) => mixed { | ||||
const callChangeThreadSettings = useServerCall(changeThreadSettings); | const callChangeThreadSettings = useServerCall(changeThreadSettings); | ||||
const dispatchActionPromise = useDispatchActionPromise(); | const dispatchActionPromise = useDispatchActionPromise(); | ||||
return React.useCallback( | return React.useCallback( | ||||
Show All 25 Lines | (newAvatarRequest, threadID) => { | ||||
saveAvatarPromise, | saveAvatarPromise, | ||||
{ customKeyName: `${changeThreadSettingsActionTypes.started}:avatar` }, | { customKeyName: `${changeThreadSettingsActionTypes.started}:avatar` }, | ||||
); | ); | ||||
}, | }, | ||||
[callChangeThreadSettings, dispatchActionPromise], | [callChangeThreadSettings, dispatchActionPromise], | ||||
); | ); | ||||
} | } | ||||
export { useShouldRenderAvatars, useSaveUserAvatar, useSaveThreadAvatar }; | export { useShouldRenderAvatars, useSaveThreadAvatar }; |