1. Handle expired links on signup 2.Reject invitations when user is already a member 3. Make sure not to display errors due to Next.js redirection during team creation 4. Fix documentation sidebar
72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
import Link from 'next/link';
|
|
|
|
import type { AuthError } from '@supabase/supabase-js';
|
|
|
|
import { ResendAuthLinkForm } from '@kit/auth/resend-email-link';
|
|
import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert';
|
|
import { Button } from '@kit/ui/button';
|
|
import { Trans } from '@kit/ui/trans';
|
|
|
|
import pathsConfig from '~/config/paths.config';
|
|
import { withI18n } from '~/lib/i18n/with-i18n';
|
|
|
|
interface AuthCallbackErrorPageProps {
|
|
searchParams: Promise<{
|
|
error: string;
|
|
callback?: string;
|
|
email?: string;
|
|
code?: AuthError['code'];
|
|
}>;
|
|
}
|
|
|
|
async function AuthCallbackErrorPage(props: AuthCallbackErrorPageProps) {
|
|
const { error, callback, code } = await props.searchParams;
|
|
const signInPath = pathsConfig.auth.signIn;
|
|
const redirectPath = callback ?? pathsConfig.auth.callback;
|
|
|
|
return (
|
|
<div className={'flex flex-col space-y-4 py-4'}>
|
|
<Alert variant={'warning'}>
|
|
<AlertTitle>
|
|
<Trans i18nKey={'auth:authenticationErrorAlertHeading'} />
|
|
</AlertTitle>
|
|
|
|
<AlertDescription>
|
|
<Trans i18nKey={error ?? 'auth:authenticationErrorAlertBody'} />
|
|
</AlertDescription>
|
|
</Alert>
|
|
|
|
<AuthCallbackForm
|
|
code={code}
|
|
signInPath={signInPath}
|
|
redirectPath={redirectPath}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function AuthCallbackForm(props: {
|
|
signInPath: string;
|
|
redirectPath?: string;
|
|
code?: AuthError['code'];
|
|
}) {
|
|
switch (props.code) {
|
|
case 'otp_expired':
|
|
return <ResendAuthLinkForm redirectPath={props.redirectPath} />;
|
|
default:
|
|
return <SignInButton signInPath={props.signInPath} />;
|
|
}
|
|
}
|
|
|
|
function SignInButton(props: { signInPath: string }) {
|
|
return (
|
|
<Button className={'w-full'} asChild>
|
|
<Link href={props.signInPath}>
|
|
<Trans i18nKey={'auth:signIn'} />
|
|
</Link>
|
|
</Button>
|
|
);
|
|
}
|
|
|
|
export default withI18n(AuthCallbackErrorPage);
|