import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { useParams } from 'react-router'; import type { Map as ImmutableMap } from 'immutable'; import { List as ImmutableList } from 'immutable'; import { fetchFeaturedTags } from 'mastodon/actions/featured_tags'; import { expandAccountFeaturedTimeline } from 'mastodon/actions/timelines'; import { ColumnBackButton } from 'mastodon/components/column_back_button'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import { RemoteHint } from 'mastodon/components/remote_hint'; import StatusContainer from 'mastodon/containers/status_container'; import { useAccountId } from 'mastodon/hooks/useAccountId'; import { useAccountVisibility } from 'mastodon/hooks/useAccountVisibility'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; import { AccountHeader } from '../account_timeline/components/account_header'; import Column from '../ui/components/column'; import { EmptyMessage } from './components/empty_message'; import { FeaturedTag } from './components/featured_tag'; import type { TagMap } from './components/featured_tag'; interface Params { acct?: string; id?: string; } const AccountFeatured = () => { const accountId = useAccountId(); const { suspended, blockedBy, hidden } = useAccountVisibility(accountId); const forceEmptyState = suspended || blockedBy || hidden; const { acct = '' } = useParams(); const dispatch = useAppDispatch(); useEffect(() => { if (accountId) { void dispatch(expandAccountFeaturedTimeline(accountId)); dispatch(fetchFeaturedTags(accountId)); } }, [accountId, dispatch]); const isLoading = useAppSelector( (state) => !accountId || !!(state.timelines as ImmutableMap).getIn([ `account:${accountId}:pinned`, 'isLoading', ]) || !!state.user_lists.getIn(['featured_tags', accountId, 'isLoading']), ); const featuredTags = useAppSelector( (state) => state.user_lists.getIn( ['featured_tags', accountId, 'items'], ImmutableList(), ) as ImmutableList, ); const featuredStatusIds = useAppSelector( (state) => (state.timelines as ImmutableMap).getIn( [`account:${accountId}:pinned`, 'items'], ImmutableList(), ) as ImmutableList, ); if (isLoading) { return (
); } if (featuredStatusIds.isEmpty() && featuredTags.isEmpty()) { return ( ); } return (
{accountId && ( )} {!featuredTags.isEmpty() && ( <>

{featuredTags.map((tag) => ( ))} )} {!featuredStatusIds.isEmpty() && ( <>

{featuredStatusIds.map((statusId) => ( ))} )}
); }; const AccountFeaturedWrapper = ({ children, accountId, }: React.PropsWithChildren<{ accountId?: string }>) => { return (
{accountId && } {children}
); }; // eslint-disable-next-line import/no-default-export export default AccountFeatured;