|
|
|
@ -5,7 +5,7 @@ import { AxiosError } from 'axios';
|
|
|
|
|
import { List as ImmutableList } from 'immutable';
|
|
|
|
|
import React from 'react';
|
|
|
|
|
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
|
|
|
|
import { Link, useHistory } from 'react-router-dom';
|
|
|
|
|
import { useHistory } from 'react-router-dom';
|
|
|
|
|
|
|
|
|
|
import { blockAccount, followAccount, pinAccount, removeFromFollowers, unblockAccount, unmuteAccount, unpinAccount } from 'soapbox/actions/accounts';
|
|
|
|
|
import { mentionCompose, directCompose } from 'soapbox/actions/compose';
|
|
|
|
@ -16,9 +16,9 @@ import { initReport } from 'soapbox/actions/reports';
|
|
|
|
|
import { setSearchAccount } from 'soapbox/actions/search';
|
|
|
|
|
import { getSettings } from 'soapbox/actions/settings';
|
|
|
|
|
import Badge from 'soapbox/components/badge';
|
|
|
|
|
import DropdownMenu, { Menu } from 'soapbox/components/dropdown-menu';
|
|
|
|
|
import StillImage from 'soapbox/components/still-image';
|
|
|
|
|
import { Avatar, HStack, IconButton, Menu, MenuButton, MenuDivider, MenuItem, MenuLink, MenuList } from 'soapbox/components/ui';
|
|
|
|
|
import SvgIcon from 'soapbox/components/ui/icon/svg-icon';
|
|
|
|
|
import { Avatar, HStack, IconButton } from 'soapbox/components/ui';
|
|
|
|
|
import MovedNote from 'soapbox/features/account-timeline/components/moved-note';
|
|
|
|
|
import ActionButton from 'soapbox/features/ui/components/action-button';
|
|
|
|
|
import SubscriptionButton from 'soapbox/features/ui/components/subscription-button';
|
|
|
|
@ -31,8 +31,6 @@ import { Account } from 'soapbox/types/entities';
|
|
|
|
|
import { isDefaultHeader, isLocal, isRemote } from 'soapbox/utils/accounts';
|
|
|
|
|
import { MASTODON, parseVersion } from 'soapbox/utils/features';
|
|
|
|
|
|
|
|
|
|
import type { Menu as MenuType } from 'soapbox/components/dropdown-menu';
|
|
|
|
|
|
|
|
|
|
const messages = defineMessages({
|
|
|
|
|
edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
|
|
|
|
|
linkVerifiedOn: { id: 'account.link_verified_on', defaultMessage: 'Ownership of this link was checked on {date}' },
|
|
|
|
@ -275,7 +273,7 @@ const Header: React.FC<IHeader> = ({ account }) => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const makeMenu = () => {
|
|
|
|
|
const menu: MenuType = [];
|
|
|
|
|
const menu: Menu = [];
|
|
|
|
|
|
|
|
|
|
if (!account) {
|
|
|
|
|
return [];
|
|
|
|
@ -645,39 +643,15 @@ const Header: React.FC<IHeader> = ({ account }) => {
|
|
|
|
|
{renderShareButton()}
|
|
|
|
|
|
|
|
|
|
{menu.length > 0 && (
|
|
|
|
|
<Menu>
|
|
|
|
|
<MenuButton
|
|
|
|
|
as={IconButton}
|
|
|
|
|
<DropdownMenu items={menu} placement='bottom-end'>
|
|
|
|
|
<IconButton
|
|
|
|
|
src={require('@tabler/icons/dots.svg')}
|
|
|
|
|
theme='outlined'
|
|
|
|
|
className='px-2'
|
|
|
|
|
iconClassName='w-4 h-4'
|
|
|
|
|
children={null}
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<MenuList className='w-56'>
|
|
|
|
|
{menu.map((menuItem, idx) => {
|
|
|
|
|
if (typeof menuItem?.text === 'undefined') {
|
|
|
|
|
return <MenuDivider key={idx} />;
|
|
|
|
|
} else {
|
|
|
|
|
const Comp = (menuItem.action ? MenuItem : MenuLink) as any;
|
|
|
|
|
const itemProps = menuItem.action ? { onSelect: menuItem.action } : { to: menuItem.to, as: Link, target: menuItem.target || '_self' };
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Comp key={idx} {...itemProps} className='group'>
|
|
|
|
|
<HStack space={3} alignItems='center'>
|
|
|
|
|
{menuItem.icon && (
|
|
|
|
|
<SvgIcon src={menuItem.icon} className='h-5 w-5 flex-none text-gray-400 group-hover:text-gray-500' />
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
<div className='truncate'>{menuItem.text}</div>
|
|
|
|
|
</HStack>
|
|
|
|
|
</Comp>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
})}
|
|
|
|
|
</MenuList>
|
|
|
|
|
</Menu>
|
|
|
|
|
</DropdownMenu>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
<ActionButton account={account} />
|
|
|
|
|