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], ); };