Skip to content

Commit

Permalink
feat(ui): hide user menu on docker extension [EE-4115] (#7563)
Browse files Browse the repository at this point in the history
  • Loading branch information
chiptus authored Aug 29, 2022
1 parent 6174940 commit 6536d36
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 83 deletions.
85 changes: 2 additions & 83 deletions app/react/components/PageHeader/HeaderTitle.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
import { PropsWithChildren } from 'react';
import {
Menu,
MenuButton,
MenuList,
MenuLink as ReachMenuLink,
} from '@reach/menu-button';
import clsx from 'clsx';
import { User, ChevronDown } from 'react-feather';
import { UISrefProps, useSref } from '@uirouter/react';

import { useUser } from '@/portainer/hooks/useUser';
import { AutomationTestingProps } from '@/types';

import { useHeaderContext } from './HeaderContainer';
import styles from './HeaderTitle.module.css';
import { UserMenu } from './UserMenu';

interface Props {
title: string;
}

export function HeaderTitle({ title, children }: PropsWithChildren<Props>) {
useHeaderContext();
const { user } = useUser();

return (
<div className="flex justify-between whitespace-normal pt-3">
Expand All @@ -31,75 +18,7 @@ export function HeaderTitle({ title, children }: PropsWithChildren<Props>) {
</div>
{children && <span>{children}</span>}
</div>
<Menu>
<MenuButton
className={clsx(
'ml-auto flex items-center gap-1 self-start',
styles.menuButton
)}
data-cy="userMenu-button"
aria-label="User menu toggle"
>
<div
className={clsx(
'icon-badge text-lg !p-2 mr-1',
'bg-gray-4 text-gray-8',
'th-dark:bg-gray-warm-10 th-dark:text-gray-warm-7'
)}
>
<User className="feather" />
</div>
{user && <span>{user.Username}</span>}
<ChevronDown className={styles.arrowDown} />
</MenuButton>

<MenuList
className={styles.menuList}
aria-label="User Menu"
data-cy="userMenu"
>
{!window.ddExtension && (
<MenuLink
to="portainer.account"
label="My account"
data-cy="userMenu-myAccount"
/>
)}

<MenuLink
to="portainer.logout"
label="Log out"
data-cy="userMenu-logOut"
params={{ performApiLogout: true }}
/>
</MenuList>
</Menu>
{!window.ddExtension && <UserMenu />}
</div>
);
}

interface MenuLinkProps extends AutomationTestingProps, UISrefProps {
label: string;
}

function MenuLink({
to,
label,
params,
options,
'data-cy': dataCy,
}: MenuLinkProps) {
const anchorProps = useSref(to, params, options);

return (
<ReachMenuLink
href={anchorProps.href}
onClick={anchorProps.onClick}
className={styles.menuLink}
aria-label={label}
data-cy={dataCy}
>
{label}
</ReachMenuLink>
);
}
88 changes: 88 additions & 0 deletions app/react/components/PageHeader/UserMenu.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import {
Menu,
MenuButton,
MenuList,
MenuLink as ReachMenuLink,
} from '@reach/menu-button';
import { UISrefProps, useSref } from '@uirouter/react';
import clsx from 'clsx';
import { User, ChevronDown } from 'react-feather';

import { AutomationTestingProps } from '@/types';
import { useUser } from '@/portainer/hooks/useUser';

import styles from './HeaderTitle.module.css';

export function UserMenu() {
const { user } = useUser();

return (
<Menu>
<MenuButton
className={clsx(
'ml-auto flex items-center gap-1 self-start',
styles.menuButton
)}
data-cy="userMenu-button"
aria-label="User menu toggle"
>
<div
className={clsx(
'icon-badge text-lg !p-2 mr-1',
'bg-gray-4 text-gray-8',
'th-dark:bg-gray-warm-10 th-dark:text-gray-warm-7'
)}
>
<User className="feather" />
</div>
{user && <span>{user.Username}</span>}
<ChevronDown className={styles.arrowDown} />
</MenuButton>

<MenuList
className={styles.menuList}
aria-label="User Menu"
data-cy="userMenu"
>
<MenuLink
to="portainer.account"
label="My account"
data-cy="userMenu-myAccount"
/>

<MenuLink
to="portainer.logout"
label="Log out"
data-cy="userMenu-logOut"
params={{ performApiLogout: true }}
/>
</MenuList>
</Menu>
);
}

interface MenuLinkProps extends AutomationTestingProps, UISrefProps {
label: string;
}

function MenuLink({
to,
label,
params,
options,
'data-cy': dataCy,
}: MenuLinkProps) {
const anchorProps = useSref(to, params, options);

return (
<ReachMenuLink
href={anchorProps.href}
onClick={anchorProps.onClick}
className={styles.menuLink}
aria-label={label}
data-cy={dataCy}
>
{label}
</ReachMenuLink>
);
}

0 comments on commit 6536d36

Please sign in to comment.