Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions apps/standalone/src/app/components/AppLayout/AppToolbar.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
.fctl-app_toolbar {
justify-content: flex-end;
}

/* Put the dropdown icon at the top - it looks better with the content (username + organization label in two lines) */
.fctl-app_toolbar-menu__toggle {
align-items: flex-start;
}
28 changes: 23 additions & 5 deletions apps/standalone/src/app/components/AppLayout/AppToolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ import {
Alert,
Avatar,
Button,
Content,
Dropdown,
DropdownItem,
DropdownList,
Flex,
FlexItem,
MenuToggle,
MenuToggleElement,
Modal,
Expand All @@ -23,19 +26,25 @@ import UserPreferencesModal from '@flightctl/ui-components/src/components/Masthe
import { useTranslation } from '@flightctl/ui-components/src/hooks/useTranslation';
import { ROUTE, useNavigate } from '@flightctl/ui-components/src/hooks/useNavigate';

import { useOrganizationGuardContext } from '@flightctl/ui-components/src/components/common/OrganizationGuard';
import { getErrorMessage } from '@flightctl/ui-components/src/utils/error';
import { AuthContext } from '../../context/AuthContext';
import { logout } from '../../utils/apiCalls';

import './AppToolbar.css';

type UserDropdownProps = {
children?: React.ReactNode;
username?: string;
organizationLabel?: string;
onUserPreferences: VoidFunction;
};

const UserDropdown: React.FC<UserDropdownProps> = ({ children, username = 'User', onUserPreferences }) => {
const UserDropdown = ({
children,
username = 'User',
organizationLabel,
onUserPreferences,
}: React.PropsWithChildren<UserDropdownProps>) => {
const { t } = useTranslation();
const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);
const onDropdownToggle = () => {
Expand All @@ -49,14 +58,21 @@ const UserDropdown: React.FC<UserDropdownProps> = ({ children, username = 'User'
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
<MenuToggle
ref={toggleRef}
className="fctl-app_toolbar-menu__toggle"
icon={<Avatar src="images/avatarimg.svg" alt="avatar" size="md" />}
onClick={onDropdownToggle}
id="userMenu"
isFullHeight
isExpanded={isDropdownOpen}
variant="plainText"
>
{username}
<Flex direction={{ default: 'column' }} alignItems={{ default: 'alignItemsFlexStart' }}>
<FlexItem data-testid="masthead-username">{username}</FlexItem>
{organizationLabel && (
<FlexItem data-testid="masthead-organization">
<Content component="small">{organizationLabel}</Content>
</FlexItem>
)}
</Flex>
</MenuToggle>
)}
>
Expand All @@ -74,6 +90,8 @@ const AppToolbar = () => {
const [helpDropdownOpen, setHelpDropdownOpen] = React.useState<boolean>(false);

const { username } = React.useContext(AuthContext);
const { currentOrganization } = useOrganizationGuardContext();
const organizationLabel = currentOrganization?.label || currentOrganization?.id;
const [logoutLoading, setLogoutLoading] = React.useState(false);
const [logoutErr, setLogoutErr] = React.useState<string>();
const onUserPreferences = () => setPreferencesModalOpen(true);
Expand All @@ -82,7 +100,7 @@ const AppToolbar = () => {
let userDropdown = <UserDropdown onUserPreferences={onUserPreferences} />;
if (username) {
userDropdown = (
<UserDropdown username={username} onUserPreferences={onUserPreferences}>
<UserDropdown username={username} onUserPreferences={onUserPreferences} organizationLabel={organizationLabel}>
<DropdownItem
onClick={async () => {
try {
Expand Down
Loading