From fd7935f343d5df019b9a1c861a08fcf4ae85319f Mon Sep 17 00:00:00 2001
From: Harshit Raizada <112213410+dankgarlic1@users.noreply.github.com>
Date: Mon, 13 Jul 2026 21:04:09 +0530
Subject: [PATCH] fix(front): allow dismissing [Credits limit reached] banner
(#22843)
Dismiss is session-only, he banner reappears on reload, because the
underlying "out of credits" condition is still true
closes #22774
fix:
---
.../components/InformationBannerWrapper.tsx | 2 +-
.../billing/InformationBannerNoMoreCredits.tsx | 12 +++++++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx b/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx
index 9700ed8099..0417930ef4 100644
--- a/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx
+++ b/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx
@@ -3,10 +3,10 @@ import { isDefined } from 'twenty-shared/utils';
import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
import { InformationBannerBillingSubscriptionPaused } from '@/information-banner/components/billing/InformationBannerBillingSubscriptionPaused';
-import { InformationBannerNonProductionInstance } from '@/information-banner/components/enterprise/InformationBannerNonProductionInstance';
import { InformationBannerEndTrialPeriod } from '@/information-banner/components/billing/InformationBannerEndTrialPeriod';
import { InformationBannerFailPaymentInfo } from '@/information-banner/components/billing/InformationBannerFailPaymentInfo';
import { InformationBannerNoBillingSubscription } from '@/information-banner/components/billing/InformationBannerNoBillingSubscription';
+import { InformationBannerNonProductionInstance } from '@/information-banner/components/enterprise/InformationBannerNonProductionInstance';
import { InformationBannerMaintenance } from '@/information-banner/components/maintenance/InformationBannerMaintenance';
import { InformationBannerReconnectAccountEmailAliases } from '@/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases';
import { InformationBannerReconnectAccountInsufficientPermissions } from '@/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions';
diff --git a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoMoreCredits.tsx b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoMoreCredits.tsx
index 91809bff6d..9fbeabc605 100644
--- a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoMoreCredits.tsx
+++ b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoMoreCredits.tsx
@@ -1,14 +1,18 @@
import { InformationBanner } from '@/information-banner/components/InformationBanner';
+import { informationBannerIsOpenComponentState } from '@/information-banner/states/informationBannerIsOpenComponentState';
import { useCreditUpgradeAction } from '@/settings/billing/hooks/useCreditUpgradeAction';
import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { useModal } from '@/ui/layout/modal/hooks/useModal';
+import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState';
import { useLingui } from '@lingui/react/macro';
import { SettingsPath } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { PermissionFlagType } from '~/generated-metadata/graphql';
import { useNavigateSettings } from '~/hooks/useNavigateSettings';
+const COMPONENT_INSTANCE_ID = 'information-banner-no-more-credits';
+
const INFORMATION_BANNER_UPGRADE_CREDIT_PLAN_MODAL_ID =
'information-banner-upgrade-credit-plan-modal';
@@ -21,6 +25,11 @@ export const InformationBannerNoMoreCredits = () => {
const navigateSettings = useNavigateSettings();
const { openModal } = useModal();
+ const setInformationBannerIsOpen = useSetAtomComponentState(
+ informationBannerIsOpenComponentState,
+ COMPONENT_INSTANCE_ID,
+ );
+
const {
nextPrice,
nextResourceCreditsAmount,
@@ -42,7 +51,7 @@ export const InformationBannerNoMoreCredits = () => {
return (
<>
{
}
buttonOnClick={buttonOnClick}
isButtonDisabled={isUpgrading}
+ onClose={() => setInformationBannerIsOpen(false)}
/>
{canUpgradeInline && (