import { type ReactNode, useEffect, useMemo, useState } from 'react'; import { AuthContext, type AuthContextValue } from './authContext'; import { type AuthState, getAuthState, initAuth, login, logout, subscribeAuth } from './keycloak'; /** Оборачивает приложение auth-состоянием и показывает системные экраны Keycloak-инициализации. */ export function AuthProvider({ children }: { children: ReactNode }) { const [state, setState] = useState(getAuthState()); const [errorMessage, setErrorMessage] = useState(null); useEffect(() => { const unsubscribe = subscribeAuth(setState); void initAuth().catch((error) => { console.error('Keycloak init failed', error); setErrorMessage('Не удалось подключиться к Keycloak. Проверьте VITE_KEYCLOAK_* и настройки клиента в SSO.'); }); return unsubscribe; }, []); const value = useMemo( () => ({ ...state, login: () => login(), logout: () => logout(), }), [state], ); if (!state.initialized) { return (

Drill UI

Проверяем сессию Keycloak...

); } if (errorMessage) { return (

Ошибка авторизации

{errorMessage}

); } return {children}; }