From 6534630d16d327ce910c25f0eb299c81fd6d41e0 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 23 Jan 2026 00:48:33 +0200 Subject: [PATCH] Refactor GrowthHack to always render on iOS with enabled prop (#9723) Drill down an `enabled` prop to ThreadItemAnchorFollowButtonInner so that the GrowthHack wrapper is always rendered on iOS, even when the follow button shouldn't be displayed. The inner component returns null when disabled, allowing GrowthHack to render its logo without children. Co-authored-by: Claude --- .../components/ThreadItemAnchor.tsx | 11 +++++----- .../ThreadItemAnchorFollowButton.tsx | 22 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/screens/PostThread/components/ThreadItemAnchor.tsx b/src/screens/PostThread/components/ThreadItemAnchor.tsx index 6db47c830..5ef7c5954 100644 --- a/src/screens/PostThread/components/ThreadItemAnchor.tsx +++ b/src/screens/PostThread/components/ThreadItemAnchor.tsx @@ -381,11 +381,12 @@ const ThreadItemAnchorInner = memo(function ThreadItemAnchorInner({ - {showFollowButton && ( - - - - )} + + + diff --git a/src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx b/src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx index 3c925a1cf..d2133e373 100644 --- a/src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx +++ b/src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx @@ -19,24 +19,36 @@ import {PlusLarge_Stroke2_Corner0_Rounded as PlusIcon} from '#/components/icons/ import {IS_IOS} from '#/env' import {GrowthHack} from './GrowthHack' -export function ThreadItemAnchorFollowButton({did}: {did: string}) { +export function ThreadItemAnchorFollowButton({ + did, + enabled = true, +}: { + did: string + enabled?: boolean +}) { if (IS_IOS) { return ( - + ) } - return + return } -export function ThreadItemAnchorFollowButtonInner({did}: {did: string}) { +export function ThreadItemAnchorFollowButtonInner({ + did, + enabled = true, +}: { + did: string + enabled?: boolean +}) { const {data: profile, isLoading} = useProfileQuery({did}) // We will never hit this - the profile will always be cached or loaded above // but it keeps the typechecker happy - if (isLoading || !profile) return null + if (!enabled || isLoading || !profile) return null return } -- 2.51.2