+ |
+ {user.email}
+ {isCurrentUser && (
+
+ {t('auth.userManagement.you')}
+
+ )}
+ |
+
+ {user.display_name ?? '—'}
+ |
+
+ {user.is_admin ? (
+ {t('auth.admin')}
+ ) : (
+ {t('auth.userManagement.user')}
+ )}
+ |
+
+
+ |
+
+
+
+ }
+ variant="ghost"
+ size="sm"
+ onClick={handleEdit}
+ />
+
+
+ }
+ variant="ghost"
+ size="sm"
+ colorScheme="error"
+ isDisabled={isCurrentUser}
+ onClick={handleDelete}
+ />
+
+
+ |
+
+ );
+});
+UserRow.displayName = 'UserRow';
diff --git a/invokeai/frontend/web/src/features/auth/components/UserMenu.tsx b/invokeai/frontend/web/src/features/auth/components/UserMenu.tsx
index 970c1d75332..d8f598f996b 100644
--- a/invokeai/frontend/web/src/features/auth/components/UserMenu.tsx
+++ b/invokeai/frontend/web/src/features/auth/components/UserMenu.tsx
@@ -3,7 +3,7 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { logout, selectCurrentUser } from 'features/auth/store/authSlice';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { PiSignOutBold, PiUserBold } from 'react-icons/pi';
+import { PiGearBold, PiSignOutBold, PiUserBold, PiUsersBold } from 'react-icons/pi';
import { useNavigate } from 'react-router-dom';
import { useLogoutMutation } from 'services/api/endpoints/auth';
@@ -28,6 +28,14 @@ export const UserMenu = memo(() => {
});
}, [dispatch, navigate, logoutMutation]);
+ const handleProfile = useCallback(() => {
+ navigate('/profile');
+ }, [navigate]);
+
+ const handleUserManagement = useCallback(() => {
+ navigate('/admin/users');
+ }, [navigate]);
+
if (!user) {
return null;
}
@@ -60,6 +68,14 @@ export const UserMenu = memo(() => {
)}
+