diff --git a/app/javascript/mastodon/components/menu/items.tsx b/app/javascript/mastodon/components/menu/items.tsx index 65ca611d608..38518bce06a 100644 --- a/app/javascript/mastodon/components/menu/items.tsx +++ b/app/javascript/mastodon/components/menu/items.tsx @@ -164,6 +164,13 @@ export const MenuItemLink: React.FC = ({ const Wrapper = type === 'actions' ? Fragment : 'li'; const asElement = (as ?? 'link') === 'link' ? NavLink : 'a'; + const externalLinkProps = + as === 'a' + ? { + target: '_blank', + rel: 'noopener', + } + : undefined; return ( @@ -171,6 +178,7 @@ export const MenuItemLink: React.FC = ({ as={asElement} role={type === 'actions' ? 'menuitem' : undefined} onKeyDown={handleSpacebarPress} + {...externalLinkProps} {...props} > {children} diff --git a/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.module.scss b/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.module.scss index 9679354469f..6b2e375b8f4 100644 --- a/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.module.scss +++ b/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.module.scss @@ -9,6 +9,7 @@ & > :global(.account) { flex-grow: 1; + overflow: hidden; --account-outer-spacing: 0; --avatar-border-radius: var(--radius-round); diff --git a/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.tsx b/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.tsx index bf7c8f58f2c..14b5ce59f46 100644 --- a/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.tsx +++ b/app/javascript/mastodon/features/navigation_panel/redesign/account_card_and_menu.tsx @@ -10,6 +10,8 @@ import { HeartIcon, UsersThreeIcon, ProhibitIcon, + GavelIcon, + ShieldStarIcon, SignOutIcon, } from '@phosphor-icons/react'; @@ -26,13 +28,17 @@ import { } from '@/mastodon/components/menu'; import { useAccount } from '@/mastodon/hooks/useAccount'; import { useIdentity } from '@/mastodon/identity_context'; +import { + canManageReports, + canViewAdminDashboard, +} from '@/mastodon/permissions'; import { useAppDispatch } from '@/mastodon/store'; import classes from './account_card_and_menu.module.scss'; export const NavigationAccountCardAndMenu: React.FC = () => { const dispatch = useAppDispatch(); - const { accountId } = useIdentity(); + const { accountId, permissions } = useIdentity(); const account = useAccount(accountId); const confirmLogout = useCallback(() => { @@ -43,6 +49,9 @@ export const NavigationAccountCardAndMenu: React.FC = () => { return null; } + const isManager = canManageReports(permissions); + const isAdmin = canViewAdminDashboard(permissions); + const accountBasePath = `/@${account?.acct}`; return ( @@ -97,10 +106,7 @@ export const NavigationAccountCardAndMenu: React.FC = () => { - + { /> + {(isManager || isAdmin) && ( + <> + + + {isAdmin && ( + + + + )} + + {isManager && ( + + + + )} + + )} +