= ({ children, ...rest }) => {
ref={ref}
>
= ({ account }) => {
const features = useFeatures();
const ownAccount = useOwnAccount();
+ const { software } = useAppSelector((state) => parseVersion(state.instance.version));
+
const { getOrCreateChatByAccountId } = useChats();
const createAndNavigateToChat = useMutation((accountId: string) => {
@@ -257,6 +261,10 @@ const Header: React.FC = ({ account }) => {
}
};
+ const handleRssFeedClick = () => {
+ window.open(software === MASTODON ? `${account.url}.rss` : `${account.url}/feed.rss`, '_blank');
+ };
+
const handleShare = () => {
navigator.share({
text: `@${account.acct}`,
@@ -269,20 +277,43 @@ const Header: React.FC = ({ account }) => {
const makeMenu = () => {
const menu: MenuType = [];
- if (!account || !ownAccount) {
+ if (!account) {
return [];
}
+ if (features.rssFeeds && isLocal(account)) {
+ menu.push({
+ text: intl.formatMessage(messages.subscribeFeed),
+ action: handleRssFeedClick,
+ icon: require('@tabler/icons/rss.svg'),
+ });
+ }
+
if ('share' in navigator) {
menu.push({
text: intl.formatMessage(messages.share, { name: account.username }),
action: handleShare,
icon: require('@tabler/icons/upload.svg'),
});
+ }
+
+ if (features.federating && isRemote(account)) {
+ const domain = account.fqn.split('@')[1];
+
+ menu.push({
+ text: intl.formatMessage(messages.profileExternal, { domain }),
+ action: () => onProfileExternal(account.url),
+ icon: require('@tabler/icons/external-link.svg'),
+ });
+ }
+
+ if (!ownAccount) return menu;
+
+ if (menu.length) {
menu.push(null);
}
- if (account.id === ownAccount?.id) {
+ if (account.id === ownAccount.id) {
menu.push({
text: intl.formatMessage(messages.edit_profile),
to: '/settings/profile',
@@ -435,17 +466,9 @@ const Header: React.FC = ({ account }) => {
icon: require('@tabler/icons/ban.svg'),
});
}
-
- if (features.federating) {
- menu.push({
- text: intl.formatMessage(messages.profileExternal, { domain }),
- action: () => onProfileExternal(account.url),
- icon: require('@tabler/icons/external-link.svg'),
- });
- }
}
- if (ownAccount?.staff) {
+ if (ownAccount.staff) {
menu.push(null);
menu.push({
@@ -463,7 +486,7 @@ const Header: React.FC = ({ account }) => {
if (!account || !ownAccount) return info;
- if (ownAccount?.id !== account.id && account.relationship?.followed_by) {
+ if (ownAccount.id !== account.id && account.relationship?.followed_by) {
info.push(
= ({ account }) => {
title={}
/>,
);
- } else if (ownAccount?.id !== account.id && account.relationship?.blocking) {
+ } else if (ownAccount.id !== account.id && account.relationship?.blocking) {
info.push(
= ({ account }) => {
);
}
- if (ownAccount?.id !== account.id && account.relationship?.muting) {
+ if (ownAccount.id !== account.id && account.relationship?.muting) {
info.push(
= ({ account }) => {
title={}
/>,
);
- } else if (ownAccount?.id !== account.id && account.relationship?.domain_blocking) {
+ } else if (ownAccount.id !== account.id && account.relationship?.domain_blocking) {
info.push(
= ({ account }) => {
{renderMessageButton()}
{renderShareButton()}
- {ownAccount && (
+ {menu.length > 0 && (