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 6db47c8308..5ef7c5954d 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 3c925a1cf3..d2133e3735 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 }