diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index f26c6b3..924e002 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -3,22 +3,26 @@ import CodeInput from './components/CodeInput'
import ProfileBar from './components/ProfileBar'
import SearchScreen from './components/SearchScreen'
import GameScreen from './components/GameScreen'
-import { useAuth } from './auth'
+import { useAuth, useAuthModal } from './auth'
export default function App() {
const { token } = useAuth()
+ const { openAuthModal } = useAuthModal()
const [screen, setScreen] = useState('menu') // 'menu' | 'search' | 'game'
const [gameSession, setGameSession] = useState(null)
const handleRandomBattle = () => {
+ if (!token) return openAuthModal()
setScreen('search')
}
const handleInvite = () => {
+ if (!token) return openAuthModal()
// TODO: создание приватной комнаты
}
const handleJoinByCode = (code) => {
+ if (!token) return openAuthModal()
// TODO: присоединение к комнате по коду
console.log('join code:', code)
}
diff --git a/frontend/src/auth.jsx b/frontend/src/auth.jsx
index 7c6b1ed..fe3aa73 100644
--- a/frontend/src/auth.jsx
+++ b/frontend/src/auth.jsx
@@ -1,9 +1,28 @@
import { createContext, useContext, useEffect, useState, useCallback } from 'react'
import { api } from './api'
+import AuthModal from './components/AuthModal'
const AuthContext = createContext(null)
+const AuthModalContext = createContext(null)
const TOKEN_KEY = 'sea_battle_token'
+export function AuthModalProvider({ children }) {
+ const [open, setOpen] = useState(false)
+ const openAuthModal = useCallback(() => setOpen(true), [])
+ const closeAuthModal = useCallback(() => setOpen(false), [])
+
+ return (
+
+ {children}
+ {open && }
+
+ )
+}
+
+export function useAuthModal() {
+ return useContext(AuthModalContext)
+}
+
export function AuthProvider({ children }) {
const [user, setUser] = useState(null)
const [token, setToken] = useState(() => localStorage.getItem(TOKEN_KEY))
diff --git a/frontend/src/components/ProfileBar.jsx b/frontend/src/components/ProfileBar.jsx
index b42c2ec..ba1d290 100644
--- a/frontend/src/components/ProfileBar.jsx
+++ b/frontend/src/components/ProfileBar.jsx
@@ -1,10 +1,8 @@
-import { useState } from 'react'
-import { useAuth } from '../auth'
-import AuthModal from './AuthModal'
+import { useAuth, useAuthModal } from '../auth'
export default function ProfileBar() {
const { user, loading, logout } = useAuth()
- const [showAuth, setShowAuth] = useState(false)
+ const { openAuthModal } = useAuthModal()
return (
<>
@@ -26,12 +24,11 @@ export default function ProfileBar() {
) : (
-