From 77ae39e8347ff2418d66424950e8b226900c6b62 Mon Sep 17 00:00:00 2001 From: l3wdfut4pwr Date: Thu, 9 Apr 2026 15:48:36 +0300 Subject: add settings auth redirect --- src/app/settings/page.tsx | 29 ++++++++++++++++++++--- src/components/header/AuthDialog.tsx | 11 +++++---- src/components/header/authdialog/LoginForm.tsx | 7 +++--- src/components/header/authdialog/RegisterForm.tsx | 6 +++-- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 45caa18..c44b787 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -1,17 +1,40 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; +import { useUser } from '@/lib/contexts/Auth.context'; import SettingsMenu from '@/components/settings/SettingsMenu'; import SecurityPage from '@/components/settings/SecurityPage'; import ProfilePage from '@/components/settings/ProfilePage'; +import { Dialog, DialogTrigger, DialogContent } from '@/components/ui/dialog'; +import { AuthDialog } from '@/components/header/AuthDialog'; export default function Settings() { + const user = useUser(); const [tab, setTab] = useState('profile'); + const [showAuth, setShowAuth] = useState(false); + + useEffect(() => { + if (user === null) { + setShowAuth(true); + } + }, [user]); + + if (!user) { + return ( + + +
+ + + + +
+ ); + } return ( -
+
-
{tab === 'profile' && } {tab === 'security' && } diff --git a/src/components/header/AuthDialog.tsx b/src/components/header/AuthDialog.tsx index 8c00b81..27f5e97 100644 --- a/src/components/header/AuthDialog.tsx +++ b/src/components/header/AuthDialog.tsx @@ -1,14 +1,15 @@ -import { Button } from '@/components/ui/button'; import { DialogContent, DialogTitle } from '@/components/ui/dialog'; -import { Input } from '@/components/ui/input'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import GoogleIcon from '../../../public/icons/google.svg'; -import { InputField } from '../ui/inputfield'; import LoginForm from './authdialog/LoginForm'; import RegisterForm from './authdialog/RegisterForm'; import ResetForm from './authdialog/ResetForm'; import { VisuallyHidden } from '@radix-ui/react-visually-hidden'; -export function AuthDialog() { + +type AuthDialogProps = { + redirectTo?: string | null; +}; + +export function AuthDialog({ redirectTo }: AuthDialogProps) { return (
diff --git a/src/components/header/authdialog/LoginForm.tsx b/src/components/header/authdialog/LoginForm.tsx index c6cdbcd..913ca66 100644 --- a/src/components/header/authdialog/LoginForm.tsx +++ b/src/components/header/authdialog/LoginForm.tsx @@ -4,13 +4,13 @@ import { Button } from '@/components/ui/button'; import GoogleIcon from '../../../../public/icons/google.svg'; import { InputField } from '@/components/ui/inputfield'; import { useAuthContext } from '@/lib/contexts/Auth.context'; - -export default function LoginForm() { +import { useRouter } from 'next/navigation'; +export default function LoginForm({ redirectTo }: { redirectTo?: string }) { const API_URL = process.env.NEXT_PUBLIC_API_URL; const [errors, setErrors] = useState({}); const [loading, setLoading] = useState(false); const { setUser } = useAuthContext(); - + const router = useRouter(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); @@ -55,6 +55,7 @@ export default function LoginForm() { if (!meRes.ok) throw new Error('Failed to fetch user'); const meData = await meRes.json(); setUser(meData); + if (redirectTo) router.push(redirectTo); } } catch (err) { setErrors({ general: 'Ошибка при авторизации' }); diff --git a/src/components/header/authdialog/RegisterForm.tsx b/src/components/header/authdialog/RegisterForm.tsx index 0370671..ef22433 100644 --- a/src/components/header/authdialog/RegisterForm.tsx +++ b/src/components/header/authdialog/RegisterForm.tsx @@ -6,10 +6,11 @@ import { InputField } from '@/components/ui/inputfield'; import { validate, registerUser } from './register'; import { useAuthContext } from '@/lib/contexts/Auth.context'; import Image from 'next/image'; - -export default function RegisterForm() { +import { useRouter } from 'next/navigation'; +export default function RegisterForm({ redirectTo }: { redirectTo?: string }) { const [errors, setErrors] = useState({}); const [loading, setLoading] = useState(false); + const router = useRouter(); const { setUser } = useAuthContext(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -42,6 +43,7 @@ export default function RegisterForm() { setErrors(error); } else if (data) { setUser(data); + if (redirectTo) router.push(redirectTo); } setLoading(false); }; -- cgit v1.3-3-g829e