Files
twenty_crm/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts
martmull cce9bf5730 Improve use set next onboarding state (#6076)
querying workspaceMembers may be slow leads to wrong
setNextOnboardingStatus value. So we added a resolved field in workspace
to get workspaceMemberCount directly
2024-06-30 21:00:20 +02:00

51 lines
1.4 KiB
TypeScript

import { useRecoilCallback, useRecoilValue } from 'recoil';
import { CurrentUser, currentUserState } from '@/auth/states/currentUserState';
import {
CurrentWorkspace,
currentWorkspaceState,
} from '@/auth/states/currentWorkspaceState';
import { OnboardingStatus } from '~/generated/graphql';
import { isDefined } from '~/utils/isDefined';
const getNextOnboardingStatus = (
currentUser: CurrentUser | null,
currentWorkspace: CurrentWorkspace | null,
) => {
if (currentUser?.onboardingStatus === OnboardingStatus.ProfileCreation) {
return OnboardingStatus.SyncEmail;
}
if (
currentUser?.onboardingStatus === OnboardingStatus.SyncEmail &&
currentWorkspace?.workspaceMembersCount === 1
) {
return OnboardingStatus.InviteTeam;
}
return OnboardingStatus.Completed;
};
export const useSetNextOnboardingStatus = () => {
const currentUser = useRecoilValue(currentUserState);
const currentWorkspace = useRecoilValue(currentWorkspaceState);
return useRecoilCallback(
({ set }) =>
() => {
const nextOnboardingStatus = getNextOnboardingStatus(
currentUser,
currentWorkspace,
);
set(currentUserState, (current) => {
if (isDefined(current)) {
return {
...current,
onboardingStatus: nextOnboardingStatus,
};
}
return current;
});
},
[currentWorkspace, currentUser],
);
};