Skip to content

Commit bed33b0

Browse files
authored
adapt billing banners according to user's permissions (#12005)
closes #11951
1 parent fb615ed commit bed33b0

File tree

4 files changed

+57
-12
lines changed

4 files changed

+57
-12
lines changed

packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import { useRedirect } from '@/domain-manager/hooks/useRedirect';
22
import { InformationBanner } from '@/information-banner/components/InformationBanner';
3+
import { useSettingsPermissionMap } from '@/settings/roles/hooks/useSettingsPermissionMap';
34
import { SettingsPath } from '@/types/SettingsPath';
4-
import { useBillingPortalSessionQuery } from '~/generated/graphql';
5-
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
5+
import { t } from '@lingui/core/macro';
66
import { isDefined } from 'twenty-shared/utils';
7+
import {
8+
SettingPermissionType,
9+
useBillingPortalSessionQuery,
10+
} from '~/generated/graphql';
11+
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
712

813
export const InformationBannerBillingSubscriptionPaused = () => {
914
const { redirect } = useRedirect();
@@ -14,6 +19,10 @@ export const InformationBannerBillingSubscriptionPaused = () => {
1419
},
1520
});
1621

22+
const {
23+
[SettingPermissionType.WORKSPACE]: hasPermissionToUpdateBillingDetails,
24+
} = useSettingsPermissionMap();
25+
1726
const openBillingPortal = () => {
1827
if (isDefined(data) && isDefined(data.billingPortalSession.url)) {
1928
redirect(data.billingPortalSession.url);
@@ -23,8 +32,12 @@ export const InformationBannerBillingSubscriptionPaused = () => {
2332
return (
2433
<InformationBanner
2534
variant="danger"
26-
message={'Trial expired. Please update your billing details'}
27-
buttonTitle="Update"
35+
message={
36+
hasPermissionToUpdateBillingDetails
37+
? t`Trial expired. Please update your billing details.`
38+
: t`Trial expired. Please contact your admin`
39+
}
40+
buttonTitle={hasPermissionToUpdateBillingDetails ? t`Update` : undefined}
2841
buttonOnClick={() => openBillingPortal()}
2942
isButtonDisabled={loading || !isDefined(data)}
3043
/>

packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
import { useEndSubscriptionTrialPeriod } from '@/billing/hooks/useEndSubscriptionTrialPeriod';
22
import { InformationBanner } from '@/information-banner/components/InformationBanner';
3+
import { useSettingsPermissionMap } from '@/settings/roles/hooks/useSettingsPermissionMap';
34
import { useLingui } from '@lingui/react/macro';
5+
import { SettingPermissionType } from '~/generated-metadata/graphql';
46

57
export const InformationBannerEndTrialPeriod = () => {
68
const { endTrialPeriod, isLoading } = useEndSubscriptionTrialPeriod();
79
const { t } = useLingui();
810

11+
const { [SettingPermissionType.WORKSPACE]: hasPermissionToEndTrialPeriod } =
12+
useSettingsPermissionMap();
13+
914
return (
1015
<InformationBanner
1116
variant="danger"
12-
message={t`No free workflow executions left. End trial period and activate your billing to continue.`}
13-
buttonTitle={t`Activate`}
17+
message={
18+
hasPermissionToEndTrialPeriod
19+
? t`No free workflow executions left. End trial period and activate your billing to continue.`
20+
: t`No free workflow executions left. Please contact your admin.`
21+
}
22+
buttonTitle={hasPermissionToEndTrialPeriod ? t`Activate` : undefined}
1423
buttonOnClick={async () => await endTrialPeriod()}
1524
isButtonDisabled={isLoading}
1625
/>

packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerFailPaymentInfo.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import { useRedirect } from '@/domain-manager/hooks/useRedirect';
22
import { InformationBanner } from '@/information-banner/components/InformationBanner';
3+
import { useSettingsPermissionMap } from '@/settings/roles/hooks/useSettingsPermissionMap';
34
import { SettingsPath } from '@/types/SettingsPath';
4-
import { useBillingPortalSessionQuery } from '~/generated/graphql';
5-
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
5+
import { t } from '@lingui/core/macro';
66
import { isDefined } from 'twenty-shared/utils';
7+
import {
8+
SettingPermissionType,
9+
useBillingPortalSessionQuery,
10+
} from '~/generated/graphql';
11+
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
712

813
export const InformationBannerFailPaymentInfo = () => {
914
const { redirect } = useRedirect();
@@ -14,6 +19,10 @@ export const InformationBannerFailPaymentInfo = () => {
1419
},
1520
});
1621

22+
const {
23+
[SettingPermissionType.WORKSPACE]: hasPermissionToUpdateBillingDetails,
24+
} = useSettingsPermissionMap();
25+
1726
const openBillingPortal = () => {
1827
if (isDefined(data) && isDefined(data.billingPortalSession.url)) {
1928
redirect(data.billingPortalSession.url);
@@ -23,8 +32,12 @@ export const InformationBannerFailPaymentInfo = () => {
2332
return (
2433
<InformationBanner
2534
variant="danger"
26-
message={'Last payment failed. Please update your billing details.'}
27-
buttonTitle="Update"
35+
message={
36+
hasPermissionToUpdateBillingDetails
37+
? t`Last payment failed. Please update your billing details.`
38+
: t`Last payment failed. Please contact your admin.`
39+
}
40+
buttonTitle={hasPermissionToUpdateBillingDetails ? t`Update` : undefined}
2841
buttonOnClick={() => openBillingPortal()}
2942
isButtonDisabled={loading || !isDefined(data)}
3043
/>

packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoBillingSubscription.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { BILLING_CHECKOUT_SESSION_DEFAULT_VALUE } from '@/billing/constants/BillingCheckoutSessionDefaultValue';
22
import { useHandleCheckoutSession } from '@/billing/hooks/useHandleCheckoutSession';
33
import { InformationBanner } from '@/information-banner/components/InformationBanner';
4+
import { useSettingsPermissionMap } from '@/settings/roles/hooks/useSettingsPermissionMap';
5+
import { t } from '@lingui/core/macro';
6+
import { SettingPermissionType } from '~/generated-metadata/graphql';
47

58
export const InformationBannerNoBillingSubscription = () => {
69
const { handleCheckoutSession, isSubmitting } = useHandleCheckoutSession({
@@ -9,11 +12,18 @@ export const InformationBannerNoBillingSubscription = () => {
912
requirePaymentMethod: true,
1013
});
1114

15+
const { [SettingPermissionType.WORKSPACE]: hasPermissionToSubscribe } =
16+
useSettingsPermissionMap();
17+
1218
return (
1319
<InformationBanner
1420
variant="danger"
15-
message={`Your workspace does not have an active subscription`}
16-
buttonTitle="Subscribe"
21+
message={
22+
hasPermissionToSubscribe
23+
? t`Your workspace doesn't have an active subscription.`
24+
: t`Your workspace doesn't have an active subscription. Please contact your admin.`
25+
}
26+
buttonTitle={hasPermissionToSubscribe ? t`Subscribe` : undefined}
1727
buttonOnClick={() => handleCheckoutSession()}
1828
isButtonDisabled={isSubmitting}
1929
/>

0 commit comments

Comments
 (0)