Enhance LoginDialog component to support optional redirect skipping. Update authentication flow to conditionally redirect users based on their role and current page, improving user experience during login on the booking page. #59
@ -930,6 +930,7 @@ export default function BookNowPage() {
|
|||||||
onLoginSuccess={handleLoginSuccess}
|
onLoginSuccess={handleLoginSuccess}
|
||||||
onSwitchToSignup={handleSwitchToSignup}
|
onSwitchToSignup={handleSwitchToSignup}
|
||||||
prefillEmail={loginPrefillEmail}
|
prefillEmail={loginPrefillEmail}
|
||||||
|
skipRedirect={true}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Signup Dialog */}
|
{/* Signup Dialog */}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import { Eye, EyeOff, Loader2, X, Mail } from "lucide-react";
|
|||||||
import { useAuth } from "@/hooks/useAuth";
|
import { useAuth } from "@/hooks/useAuth";
|
||||||
import { loginSchema, type LoginInput } from "@/lib/schema/auth";
|
import { loginSchema, type LoginInput } from "@/lib/schema/auth";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter, usePathname } from "next/navigation";
|
||||||
import { ForgotPasswordDialog } from "./ForgotPasswordDialog";
|
import { ForgotPasswordDialog } from "./ForgotPasswordDialog";
|
||||||
import { VerifyOtpDialog } from "./VerifyOtpDialog";
|
import { VerifyOtpDialog } from "./VerifyOtpDialog";
|
||||||
|
|
||||||
@ -25,13 +25,15 @@ interface LoginDialogProps {
|
|||||||
onLoginSuccess: () => void;
|
onLoginSuccess: () => void;
|
||||||
prefillEmail?: string;
|
prefillEmail?: string;
|
||||||
onSwitchToSignup?: () => void;
|
onSwitchToSignup?: () => void;
|
||||||
|
skipRedirect?: boolean; // Option to skip automatic redirect
|
||||||
}
|
}
|
||||||
|
|
||||||
// Login Dialog component
|
// Login Dialog component
|
||||||
export function LoginDialog({ open, onOpenChange, onLoginSuccess, prefillEmail, onSwitchToSignup }: LoginDialogProps) {
|
export function LoginDialog({ open, onOpenChange, onLoginSuccess, prefillEmail, onSwitchToSignup, skipRedirect = false }: LoginDialogProps) {
|
||||||
const { theme } = useAppTheme();
|
const { theme } = useAppTheme();
|
||||||
const isDark = theme === "dark";
|
const isDark = theme === "dark";
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const pathname = usePathname();
|
||||||
const { login, loginMutation } = useAuth();
|
const { login, loginMutation } = useAuth();
|
||||||
const [loginData, setLoginData] = useState<LoginInput>({
|
const [loginData, setLoginData] = useState<LoginInput>({
|
||||||
email: "",
|
email: "",
|
||||||
@ -89,12 +91,15 @@ export function LoginDialog({ open, onOpenChange, onLoginSuccess, prefillEmail,
|
|||||||
// Call onLoginSuccess callback first
|
// Call onLoginSuccess callback first
|
||||||
onLoginSuccess();
|
onLoginSuccess();
|
||||||
|
|
||||||
|
// Only redirect if skipRedirect is false and we're not on the booking page
|
||||||
|
if (!skipRedirect && pathname !== "/book-now") {
|
||||||
// Redirect based on user role
|
// Redirect based on user role
|
||||||
const redirectPath = userIsAdmin ? "/admin/dashboard" : "/user/dashboard";
|
const redirectPath = userIsAdmin ? "/admin/dashboard" : "/user/dashboard";
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href = redirectPath;
|
window.location.href = redirectPath;
|
||||||
}, 200);
|
}, 200);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const errorMessage = err instanceof Error ? err.message : "Login failed. Please try again.";
|
const errorMessage = err instanceof Error ? err.message : "Login failed. Please try again.";
|
||||||
toast.error(errorMessage);
|
toast.error(errorMessage);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user