From 1268a268c1af90680f6b9319faec7337b49a6869 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Tue, 7 Apr 2026 21:26:10 +0200 Subject: [PATCH] fix: wait for user data before showing paywall, skip for temporary users Ensures the UpgradeBlockProvider waits for both user and organization data before computing the block reason, preventing premature paywall flash. Temporary users are never blocked. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/main/src/contexts/UpgradeBlockContext.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/main/src/contexts/UpgradeBlockContext.tsx b/apps/main/src/contexts/UpgradeBlockContext.tsx index 51dfbd9..b05dbaa 100644 --- a/apps/main/src/contexts/UpgradeBlockContext.tsx +++ b/apps/main/src/contexts/UpgradeBlockContext.tsx @@ -28,18 +28,20 @@ export const UpgradeBlockProvider: React.FC = ({ chil const { data: organizationData } = useOrganization(); const user = useMaybeUser(); + // Wait for both user and organization data before deciding. + // Temporary users are never blocked — they have read-only access enforced at the API level. const reason = - user?.is_temporary + !user || !organizationData ? null - : organizationData - ? getOrganizationUpgradeBlockReason({ + : user.is_temporary + ? null + : getOrganizationUpgradeBlockReason({ is_trial_expired: organizationData.is_trial_expired, required_plan: organizationData.required_plan, required_team_quantity: organizationData.required_team_quantity, active_subscription_plan: organizationData.active_subscription_plan, active_subscription_quantity: organizationData.active_subscription_quantity, - }) - : null; + }); const isBlocked = reason !== null;