diff --git a/src/renderer/components/FullScreenLoader.tsx b/src/renderer/components/FullScreenLoader.tsx new file mode 100644 index 0000000..b0b0542 --- /dev/null +++ b/src/renderer/components/FullScreenLoader.tsx @@ -0,0 +1,59 @@ +import Box from '@mui/material/Box'; +import Typography from '@mui/material/Typography'; + +export const FullScreenLoader = ({ message }: { message?: string }) => ( + + {/* Градиентное вращающееся кольцо */} + + + {message && ( + + {message} + + )} + +); diff --git a/src/renderer/pages/Login.tsx b/src/renderer/pages/Login.tsx index 2786fc6..888e0fc 100644 --- a/src/renderer/pages/Login.tsx +++ b/src/renderer/pages/Login.tsx @@ -5,12 +5,15 @@ import MemorySlider from '../components/Login/MemorySlider'; import { useNavigate } from 'react-router-dom'; import PopaPopa from '../components/popa-popa'; import useConfig from '../hooks/useConfig'; +import { useState } from 'react'; +import { FullScreenLoader } from '../components/FullScreenLoader'; const Login = () => { const navigate = useNavigate(); const { config, setConfig, saveConfig, handleInputChange } = useConfig(); const { status, validateSession, refreshSession, authenticateWithElyBy } = useAuth(); + const [loading, setLoading] = useState(false); const authorization = async () => { console.log('Начинаем процесс авторизации...'); @@ -21,6 +24,7 @@ const Login = () => { return; } + setLoading(true); try { // Проверяем, есть ли сохранённый токен if (config.accessToken && config.clientToken) { @@ -85,24 +89,31 @@ const Login = () => { console.log('Авторизация успешно завершена'); navigate('/'); - } catch (error) { + } catch (error: any) { console.log(`ОШИБКА при авторизации: ${error.message}`); - // Очищаем недействительные токены при ошибке saveConfig({ accessToken: '', clientToken: '', }); + } finally { + setLoading(false); } }; return ( - - + {loading ? ( + + ) : ( + <> + + + + )} ); };