Skip to content

Commit

Permalink
Move registrationMode-related logic from setUserAvatar to `nativeSe…
Browse files Browse the repository at this point in the history
…tUserAvatar`

Summary:
The registrationMode-related code is `native`-specific and was pretty interwoven with the logic in `setUserAvatar`/`updateImageUserAvatar`.

This diff begins to untangle the two and move registrationMode-related logic to `native/.../avatar-hooks.js`.

As of this diff, `setUserAvatar(request: UpdateUserAvatarRequest)` is fully platform-agnostic and can be used on both `native` (via `nativeSetUserAvatar`) and `web` (via upcoming `webSetUserAvatar`).

---

Depends on D8342

Test Plan:
As of D8341, all `native` codepaths go through `nativeSetUserAvatar` instead of `setUserAvatar`.

Continue to be able to set non-image avatars + remove avatars on both `native` and `web` as expected.

Reviewers: ashoat, ginsu, rohan

Reviewed By: ashoat, rohan

Subscribers: tomek

Differential Revision: https://phab.comm.dev/D8343
  • Loading branch information
atulsmadhugiri committed Jul 28, 2023
1 parent 42871bb commit 24e5fa1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
19 changes: 10 additions & 9 deletions lib/components/base-edit-user-avatar-provider.react.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export type EditUserAvatarContextType = {
+setUserAvatar: (avatarRequest: UpdateUserAvatarRequest) => Promise<void>,
+setRegistrationMode: (registrationMode: RegistrationMode) => void,
+getRegistrationModeEnabled: () => boolean,
+getRegistrationModeSuccessCallback: () => ?(UserAvatarSelection) => mixed,
};

const EditUserAvatarContext: React.Context<?EditUserAvatarContextType> =
Expand Down Expand Up @@ -102,15 +103,6 @@ function BaseEditUserAvatarProvider(props: Props): React.Node {

const setUserAvatar = React.useCallback(
async (request: UpdateUserAvatarRequest) => {
const regMode = registrationModeRef.current;
if (regMode.registrationMode === 'on') {
regMode.successCallback({
needsUpload: false,
updateUserAvatarRequest: request,
});
return;
}

const promise = updateUserAvatarCall(request);
dispatchActionPromise(updateUserAvatarActionTypes, promise);
await promise;
Expand All @@ -125,6 +117,13 @@ function BaseEditUserAvatarProvider(props: Props): React.Node {
() => registrationModeRef.current.registrationMode === 'on',
[],
);
const getRegistrationModeSuccessCallback = React.useCallback(
() =>
registrationModeRef.current.registrationMode === 'on'
? registrationModeRef.current.successCallback
: null,
[],
);

const context = React.useMemo(
() => ({
Expand All @@ -133,13 +132,15 @@ function BaseEditUserAvatarProvider(props: Props): React.Node {
setUserAvatar,
setRegistrationMode,
getRegistrationModeEnabled,
getRegistrationModeSuccessCallback,
}),
[
userAvatarSaveInProgress,
updateImageUserAvatar,
setUserAvatar,
setRegistrationMode,
getRegistrationModeEnabled,
getRegistrationModeSuccessCallback,
],
);

Expand Down
26 changes: 24 additions & 2 deletions native/avatars/avatar-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -200,17 +200,39 @@ function useNativeSetUserAvatar(): (
) => Promise<void> {
const editUserAvatarContext = React.useContext(EditUserAvatarContext);
invariant(editUserAvatarContext, 'editUserAvatarContext must be defined');
const { setUserAvatar } = editUserAvatarContext;
const {
setUserAvatar,
getRegistrationModeEnabled,
getRegistrationModeSuccessCallback,
} = editUserAvatarContext;

const nativeSetUserAvatar = React.useCallback(
async (request: UpdateUserAvatarRequest) => {
const registrationModeEnabled = getRegistrationModeEnabled();
if (registrationModeEnabled) {
const successCallback = getRegistrationModeSuccessCallback();
invariant(
successCallback,
'successCallback must be defined if registrationModeEnabled is true',
);
successCallback({
needsUpload: false,
updateUserAvatarRequest: request,
});
return;
}

try {
await setUserAvatar(request);
} catch {
displayAvatarUpdateFailureAlert();
}
},
[setUserAvatar],
[
getRegistrationModeEnabled,
getRegistrationModeSuccessCallback,
setUserAvatar,
],
);

return nativeSetUserAvatar;
Expand Down

0 comments on commit 24e5fa1

Please sign in to comment.