From 7cab718ef8613e41627a5797fd060e2ccd42a9c8 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 27 Aug 2026 13:39:51 +0000 Subject: [PATCH] Redesign: Add logged-out state for navigation (#40288) --- .../navigation_panel/redesign/index.tsx | 19 +++++-- .../redesign/logged_out_info.module.scss | 15 ++++++ .../redesign/logged_out_info.tsx | 50 +++++++++++++++++++ .../columns_area/redesign.module.scss | 1 + app/javascript/mastodon/locales/en.json | 2 + 5 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.module.scss create mode 100644 app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.tsx diff --git a/app/javascript/mastodon/features/navigation_panel/redesign/index.tsx b/app/javascript/mastodon/features/navigation_panel/redesign/index.tsx index ba52a711898..a218ec1e43e 100644 --- a/app/javascript/mastodon/features/navigation_panel/redesign/index.tsx +++ b/app/javascript/mastodon/features/navigation_panel/redesign/index.tsx @@ -27,6 +27,7 @@ import { NavigationAccountCardAndMenu } from './account_card_and_menu'; import { NavigationFooterLinks } from './footer_links'; import { NavigationHeader } from './header'; import { ListSection } from './list_section'; +import { LoggedOutInfo } from './logged_out_info'; import { NavigationLink } from './navigation_link'; import classes from './styles.module.scss'; @@ -41,11 +42,14 @@ const messages = defineMessages({ function useCustomFeeds() { const dispatch = useAppDispatch(); + const { signedIn } = useIdentity(); const customFeeds = useAppSelector((state) => getOrderedLists(state)); useEffect(() => { - void dispatch(fetchLists()); - }, [dispatch]); + if (signedIn) { + void dispatch(fetchLists()); + } + }, [dispatch, signedIn]); return { customFeeds, @@ -54,13 +58,14 @@ function useCustomFeeds() { function useFollowedHashtags() { const dispatch = useAppDispatch(); + const { signedIn } = useIdentity(); const { tags, stale } = useAppSelector((state) => state.followedTags); useEffect(() => { - if (stale) { + if (stale && signedIn) { void dispatch(fetchFollowedHashtags()); } - }, [dispatch, stale]); + }, [dispatch, stale, signedIn]); return { followedHashtags: tags }; } @@ -236,6 +241,12 @@ export const RedesignNavigationPanel: React.FC<{ siteName?: string }> = ({ )} + {!signedIn && ( + + )} {bottomSensor} ); diff --git a/app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.module.scss b/app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.module.scss new file mode 100644 index 00000000000..5954538d100 --- /dev/null +++ b/app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.module.scss @@ -0,0 +1,15 @@ +@use '@/styles/mastodon/mixins'; + +.description { + margin-bottom: var(--space-md); + + @include mixins.type-body-compact; + + color: var(--color-text-secondary); +} + +.buttons { + display: flex; + flex-direction: column; + gap: var(--space-xs); +} diff --git a/app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.tsx b/app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.tsx new file mode 100644 index 00000000000..289e5ac40b7 --- /dev/null +++ b/app/javascript/mastodon/features/navigation_panel/redesign/logged_out_info.tsx @@ -0,0 +1,50 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { fetchServer } from '@/mastodon/actions/server'; +import { Button } from '@/mastodon/components/button/redesign'; +import { Skeleton } from '@/mastodon/components/skeleton'; +import { useAppDispatch, useAppSelector } from '@/mastodon/store'; + +import classes from './logged_out_info.module.scss'; + +export const LoggedOutInfo: React.FC = () => { + const dispatch = useAppDispatch(); + const { item: serverItem, isLoading } = useAppSelector( + (state) => state.server.server, + ); + + useEffect(() => { + void dispatch(fetchServer()); + }, [dispatch]); + + return ( + <> +

+ {isLoading ? ( + <> + +
+ +
+ + + ) : ( + serverItem?.description + )} +

+
+ + +
+ + ); +}; diff --git a/app/javascript/mastodon/features/ui/components/columns_area/redesign.module.scss b/app/javascript/mastodon/features/ui/components/columns_area/redesign.module.scss index 73c6078a0b1..0e4f6184a3d 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area/redesign.module.scss +++ b/app/javascript/mastodon/features/ui/components/columns_area/redesign.module.scss @@ -41,6 +41,7 @@ .main { box-sizing: border-box; + grid-column: 2; display: flex; flex-direction: column; flex: 0 1 auto; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index b9e9f8d2c0f..06830739d1a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -1288,7 +1288,9 @@ "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.active_users": "active users", "server_banner.administered_by": "Administered by:", + "server_banner.create_account": "Create an account", "server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.", + "server_banner.log_in": "Log in", "server_banner.more_about_this_server": "More about this server", "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account",