From 1c7cddfcc6848f14ee7d5a3eaec5dd65dc8e0934 Mon Sep 17 00:00:00 2001 From: Ido Shamun <1993245+idoshamun@users.noreply.github.com> Date: Sun, 19 Apr 2026 13:56:23 +0300 Subject: [PATCH] feat: compact auth banner alongside post signup widget Show the post page auth banner in a compact variant when the post_signup_widget experiment is on, so users see both the sidebar signup widget and a slimmer bottom banner. --- .../components/auth/AuthenticationBanner.tsx | 50 ++++++++++++++----- .../src/components/auth/PostAuthBanner.tsx | 16 ++++-- .../personalized/GeoPersonalizedBanner.tsx | 22 ++++++-- .../personalized/SocialPersonalizedBanner.tsx | 16 ++++-- .../personalized/UserPersonalizedBanner.tsx | 10 ++-- packages/webapp/pages/posts/[id]/index.tsx | 4 +- 6 files changed, 86 insertions(+), 32 deletions(-) diff --git a/packages/shared/src/components/auth/AuthenticationBanner.tsx b/packages/shared/src/components/auth/AuthenticationBanner.tsx index e0daedef18d..e0211d0f77f 100644 --- a/packages/shared/src/components/auth/AuthenticationBanner.tsx +++ b/packages/shared/src/components/auth/AuthenticationBanner.tsx @@ -18,34 +18,58 @@ import { AuthDisplay } from './common'; const Section = classed('div', 'flex flex-col'); +interface AuthenticationBannerProps extends PropsWithChildren { + compact?: boolean; +} + export function AuthenticationBanner({ children, -}: PropsWithChildren): ReactElement { + compact, +}: AuthenticationBannerProps): ReactElement { const { showLogin } = useAuthContext(); return ( -
+
-
- {children || ( - +
+ {children || + (compact ? ( + + ) : ( + + ))}
{ showLogin({ @@ -67,6 +91,8 @@ export function AuthenticationBanner({ onboardingSignupButton={{ variant: ButtonVariant.Primary, }} + hideLoginLink={compact} + compact={compact} />
diff --git a/packages/shared/src/components/auth/PostAuthBanner.tsx b/packages/shared/src/components/auth/PostAuthBanner.tsx index bde665146e1..61c54858e93 100644 --- a/packages/shared/src/components/auth/PostAuthBanner.tsx +++ b/packages/shared/src/components/auth/PostAuthBanner.tsx @@ -23,24 +23,30 @@ const GeoPersonalizedBanner = dynamic( () => import('../banners/personalized/GeoPersonalizedBanner'), ); -export const PostAuthBanner = (): ReactElement => { +interface PostAuthBannerProps { + compact?: boolean; +} + +export const PostAuthBanner = ({ + compact, +}: PostAuthBannerProps = {}): ReactElement => { const searchParams = useSearchParams(); const { geo } = useAuthContext(); const userId = searchParams?.get('userid'); if (userId) { - return ; + return ; } const social = getSocialReferrer(); if (social) { - return ; + return ; } if (geo?.region) { - return ; + return ; } - return ; + return ; }; diff --git a/packages/shared/src/components/banners/personalized/GeoPersonalizedBanner.tsx b/packages/shared/src/components/banners/personalized/GeoPersonalizedBanner.tsx index 4781f9856b8..34c72c79a84 100644 --- a/packages/shared/src/components/banners/personalized/GeoPersonalizedBanner.tsx +++ b/packages/shared/src/components/banners/personalized/GeoPersonalizedBanner.tsx @@ -3,17 +3,29 @@ import React from 'react'; import { geoToCountry, geoToEmoji } from '../../../lib/geo'; import { AuthenticationBanner, OnboardingHeadline } from '../../auth'; -const GeoPersonalizedBanner = ({ geo }: { geo: string }): ReactElement => { +const GeoPersonalizedBanner = ({ + geo, + compact, +}: { + geo: string; + compact?: boolean; +}): ReactElement => { const emoji = geoToEmoji(geo); const country = geoToCountry(geo); return ( - - {emoji} + + + {emoji} + { const Icon = socialIcon[site]; const gradient = socialGradient[site]; return ( - - + + { const key = generateQueryKey(RequestKey.ReferringUser); const { data: user, isError } = useQuery({ @@ -18,18 +20,18 @@ const UserPersonalizedBanner = ({ }); if (isError) { - return ; + return ; } const name = user?.name ? user?.name.split(' ')[0] : user?.username; return ( - + {user?.image && } - {shouldShowAuthBanner && isLaptop && !isPostSignupWidget && ( - + {shouldShowAuthBanner && isLaptop && ( + )}