diff --git a/webui/src/common/components/ProfileMenu/ProfileMenu.jsx b/webui/src/common/components/ProfileMenu/ProfileMenu.jsx index 71b94d4..bd9eaad 100644 --- a/webui/src/common/components/ProfileMenu/ProfileMenu.jsx +++ b/webui/src/common/components/ProfileMenu/ProfileMenu.jsx @@ -4,11 +4,10 @@ import {UserContext} from '@/common/contexts/UserContext.jsx'; import './styles.sass'; export const ProfileMenu = () => { - const {logout} = useContext(UserContext); + const {logout, user} = useContext(UserContext); const [isOpen, setIsOpen] = useState(false); const menuRef = useRef(null); - // Close menu when clicking outside useEffect(() => { const handleClickOutside = (event) => { if (menuRef.current && !menuRef.current.contains(event.target)) { @@ -22,7 +21,6 @@ export const ProfileMenu = () => { }; }, []); - // Close menu on escape key useEffect(() => { const handleEscapeKey = (event) => { if (event.key === 'Escape') { @@ -58,7 +56,7 @@ export const ProfileMenu = () => {
- Admin + {user.username} {
-
Admin User
-
Administrator
+
{user.username}
+
{user.role === 'admin' ? 'Administrator' : 'User'}
diff --git a/webui/src/common/contexts/UserContext.jsx b/webui/src/common/contexts/UserContext.jsx index 26d0c78..7a9efc0 100644 --- a/webui/src/common/contexts/UserContext.jsx +++ b/webui/src/common/contexts/UserContext.jsx @@ -7,7 +7,7 @@ export const UserContext = createContext({}); export const UserProvider = ({ children }) => { const [sessionToken, setSessionToken] = useState(localStorage.getItem("sessionToken")); - const [isSetupCompleted, setIsSetupCompleted] = useState(null); // null = unknown, true/false = known + const [isSetupCompleted, setIsSetupCompleted] = useState(null); const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); @@ -24,7 +24,7 @@ export const UserProvider = ({ children }) => { return response?.first_user_exists; } catch (error) { console.error(error); - setIsSetupCompleted(false); // Default to setup mode if we can't check + setIsSetupCompleted(false); return false; } }; @@ -33,7 +33,6 @@ export const UserProvider = ({ children }) => { try { const userObj = await getRequest("accounts/me"); setUser(userObj); - // If login is successful, setup must be completed if (isSetupCompleted === null) { setIsSetupCompleted(true); } @@ -42,7 +41,6 @@ export const UserProvider = ({ children }) => { setSessionToken(null); localStorage.removeItem("sessionToken"); setUser(null); - // Check setup status when unauthorized await checkFirstTimeSetup(); } } finally { @@ -56,13 +54,11 @@ export const UserProvider = ({ children }) => { } catch (e) { // ignore } - - // Clear user state + setUser(null); setSessionToken(null); localStorage.removeItem("sessionToken"); - - // Re-check setup status after logout + setIsLoading(true); await checkFirstTimeSetup(); setIsLoading(false); @@ -85,39 +81,24 @@ export const UserProvider = ({ children }) => { setIsLoading(true); if (sessionToken) { - // Try to login with existing token await login(); } else { - // No token, check setup status await checkFirstTimeSetup(); setIsLoading(false); } }; initializeAuth(); - }, []); // Only run once on mount + }, []); - // Handle session token changes useEffect(() => { if (sessionToken && user === null && !isLoading) { login(); } }, [sessionToken]); - // Show loading state while determining auth status if (isLoading || isSetupCompleted === null) { - return ( -
- Loading... -
- ); + return (<>); } return (