From 215f59f937d3490e61baf5f3d672ab2eb709287a Mon Sep 17 00:00:00 2001 From: diondiondion Date: Wed, 30 Sep 2026 10:17:06 +0000 Subject: [PATCH] Redesign: Fix hashtag overfetching (#40759) --- .../mastodon/components/hashtag_menu.tsx | 37 ++++++++++++------- .../components/status/handled_link.tsx | 4 +- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/app/javascript/mastodon/components/hashtag_menu.tsx b/app/javascript/mastodon/components/hashtag_menu.tsx index e64697a1f9f..28e3e02720b 100644 --- a/app/javascript/mastodon/components/hashtag_menu.tsx +++ b/app/javascript/mastodon/components/hashtag_menu.tsx @@ -1,3 +1,5 @@ +import { useCallback, useState } from 'react'; + import { FormattedMessage } from 'react-intl'; import { useHashtag } from '@/mastodon/hooks/useHashtag'; @@ -19,24 +21,33 @@ export const HashtagMenu: React.FC<{ accountId?: string; children?: React.ReactNode; }> = ({ tagId, accountId, children }) => { - const { tag, toggleFollow } = useHashtag(tagId); + const [wasMenuOpened, setWasMenuOpened] = useState(false); + const { tag, toggleFollow } = useHashtag(wasMenuOpened ? tagId : undefined); const account = useAppSelector((state) => selectPlainAccount(state, accountId), ); const { signedIn } = useIdentity(); - if (!tag) { - return null; - } + const handleMenuOpen = useCallback(() => { + setWasMenuOpened(true); + }, []); + + const tagName = tag?.name ?? tagId; + const tagNameForUrl = tag ? encodeURIComponent(tag.name) : tagId; return ( - + {children} {signedIn && ( - - {tag.following ? ( + + {!tag ? ( + + ) : tag.following ? ( )} - + {!!account && ( - + @@ -77,7 +86,7 @@ export const HashtagMenu: React.FC<{ diff --git a/app/javascript/mastodon/components/status/handled_link.tsx b/app/javascript/mastodon/components/status/handled_link.tsx index ec4ce870d61..257e41e5ee4 100644 --- a/app/javascript/mastodon/components/status/handled_link.tsx +++ b/app/javascript/mastodon/components/status/handled_link.tsx @@ -6,7 +6,7 @@ import { Link } from 'react-router-dom'; import type { ApiMentionJSON } from '@/mastodon/api_types/statuses'; import { getCollectionPath } from '@/mastodon/features/collections/utils'; -import { isRedesignEnabled } from '@/mastodon/utils/environment'; +import { isRedesignStatusEnabled } from '@/mastodon/utils/environment'; import type { OnElementHandler } from '@/mastodon/utils/html'; import { HashtagMenu } from '../hashtag_menu'; @@ -44,7 +44,7 @@ export const HandledLink: FC> = ({ ) { const hashtag = text.slice(1).trim(); - if (isRedesignEnabled()) { + if (isRedesignStatusEnabled()) { return (