({
isOpen,
onClose,
defaultMode = 'signin',
afterSignInUrl,
afterSignUpUrl,
})
| 13 | } |
| 14 | |
| 15 | export const AuthModal: React.FC<AuthModalProps> = ({ |
| 16 | isOpen, |
| 17 | onClose, |
| 18 | defaultMode = 'signin', |
| 19 | afterSignInUrl, |
| 20 | afterSignUpUrl, |
| 21 | }) => { |
| 22 | const [mode, setMode] = useState<'signin' | 'signup'>(defaultMode); |
| 23 | const authProvider = useAuthProvider(); |
| 24 | |
| 25 | const handleModeChange = (newMode: 'signin' | 'signup') => { |
| 26 | setMode(newMode); |
| 27 | }; |
| 28 | |
| 29 | const handleClose = () => { |
| 30 | onClose(); |
| 31 | // Reset mode when modal closes |
| 32 | setMode(defaultMode); |
| 33 | }; |
| 34 | |
| 35 | const SignInComponent = authProvider.SignInComponent; |
| 36 | const SignUpComponent = authProvider.SignUpComponent; |
| 37 | |
| 38 | return ( |
| 39 | <Dialog open={isOpen} onOpenChange={handleClose}> |
| 40 | <DialogContent className="sm:max-w-[425px]"> |
| 41 | <DialogHeader> |
| 42 | <DialogTitle className="text-center"> |
| 43 | {mode === 'signin' ? 'Welcome Back' : 'Create Account'} |
| 44 | </DialogTitle> |
| 45 | </DialogHeader> |
| 46 | |
| 47 | <Tabs |
| 48 | value={mode} |
| 49 | onValueChange={(value) => handleModeChange(value as 'signin' | 'signup')} |
| 50 | > |
| 51 | <TabsList className="grid w-full grid-cols-2"> |
| 52 | <TabsTrigger value="signin">Sign In</TabsTrigger> |
| 53 | <TabsTrigger value="signup">Sign Up</TabsTrigger> |
| 54 | </TabsList> |
| 55 | |
| 56 | <TabsContent value="signin" className="mt-6"> |
| 57 | <div className="space-y-4"> |
| 58 | {authProvider.name === 'clerk' ? ( |
| 59 | <SignInComponent afterSignInUrl={afterSignInUrl} /> |
| 60 | ) : ( |
| 61 | <div className="text-center py-8"> |
| 62 | <p className="text-muted-foreground mb-4"> |
| 63 | Sign in is not available with the current auth provider |
| 64 | </p> |
| 65 | <p className="text-sm text-muted-foreground"> |
| 66 | Provider:{' '} |
| 67 | <code className="bg-muted px-2 py-1 rounded">{authProvider.name}</code> |
| 68 | </p> |
| 69 | </div> |
| 70 | )} |
| 71 | </div> |
| 72 | </TabsContent> |
nothing calls this directly
no test coverage detected