Files
twenty/packages/twenty-front/src/modules/auth/components/VerifyLoginTokenEffect.tsx
T
2026-02-24 20:38:30 +01:00

40 lines
1.2 KiB
TypeScript

import { useEffect } from 'react';
import { useSearchParams } from 'react-router-dom';
import { useIsLogged } from '@/auth/hooks/useIsLogged';
import { useVerifyLogin } from '@/auth/hooks/useVerifyLogin';
import { clientConfigApiStatusState } from '@/client-config/states/clientConfigApiStatusState';
import { useRecoilValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilValueV2';
import { AppPath } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { useNavigateApp } from '~/hooks/useNavigateApp';
export const VerifyLoginTokenEffect = () => {
const [searchParams] = useSearchParams();
const loginToken = searchParams.get('loginToken');
const isLogged = useIsLogged();
const navigate = useNavigateApp();
const { verifyLoginToken } = useVerifyLogin();
const { isSaved: clientConfigLoaded } = useRecoilValueV2(
clientConfigApiStatusState,
);
useEffect(() => {
if (!clientConfigLoaded) {
return;
}
if (isDefined(loginToken)) {
verifyLoginToken(loginToken);
} else if (!isLogged) {
navigate(AppPath.SignInUp);
}
// Verify only needs to run once at mount
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [clientConfigLoaded]);
return <></>;
};