Skip to content

Commit e7e3888

Browse files
authored
feat(billing): Add missing org slug to billing links (#105942)
Prevents route not found errors when the customer is not on a customer domain url somehow. related JAVASCRIPT-363X
1 parent a222408 commit e7e3888

File tree

12 files changed

+36
-23
lines changed

12 files changed

+36
-23
lines changed

static/app/views/insights/crons/components/processingErrors/processingErrorItem.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {ExternalLink, Link} from 'sentry/components/core/link';
22
import {tct} from 'sentry/locale';
3+
import useOrganization from 'sentry/utils/useOrganization';
34
import {
45
ProcessingErrorType,
56
type ProcessingError,
@@ -11,6 +12,7 @@ interface Props {
1112
}
1213

1314
export function ProcessingErrorItem({error, checkinTooltip}: Props) {
15+
const organization = useOrganization();
1416
switch (error.type) {
1517
case ProcessingErrorType.CHECKIN_ENVIRONMENT_MISMATCH:
1618
return tct(
@@ -59,7 +61,10 @@ export function ProcessingErrorItem({error, checkinTooltip}: Props) {
5961
// for now we'll just default to "pay-as-you-go" since it's the modern term
6062
return tct(
6163
'A [checkinTooltip:check-in] upsert was sent, but due to insufficient quota a new monitor could not be enabled. Increase your Crons pay-as-you-go budget in your [link: subscription settings], and then enable this monitor.',
62-
{checkinTooltip, link: <Link to="/settings/billing/overview/" />}
64+
{
65+
checkinTooltip,
66+
link: <Link to={`/settings/${organization.slug}/billing/overview/`} />,
67+
}
6368
);
6469
case ProcessingErrorType.MONITOR_INVALID_CONFIG:
6570
return tct(
@@ -94,7 +99,7 @@ export function ProcessingErrorItem({error, checkinTooltip}: Props) {
9499
'A [checkinTooltip:check-in] was sent but dropped due to the monitor being disabled. Please increase your on-demand budget if needed in your [link:subscription settings]. Then, enable this monitor to resume processing check-ins.',
95100
{
96101
checkinTooltip,
97-
link: <Link to="/settings/billing/overview/" />,
102+
link: <Link to={`/settings/${organization.slug}/billing/overview/`} />,
98103
}
99104
);
100105
case ProcessingErrorType.MONITOR_ENVIRONMENT_LIMIT_EXCEEDED:

static/gsApp/components/ai/aiSetupConfiguration.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ function AutofixConfigureQuota() {
6969
<Stack align="center">
7070
{hasAccessToSubscriptionOverview(subscription, organization) ? (
7171
<LinkButton
72-
to="/settings/billing/overview/?product=seer"
72+
to={`/settings/${organization.slug}/billing/overview/?product=seer`}
7373
priority="primary"
7474
icon={<IconUpgrade />}
7575
>

static/gsApp/views/amCheckout/components/checkoutSuccess.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ function CheckoutSuccess({
595595
<LinkButton
596596
priority="primary"
597597
aria-label={t('View your subscription')}
598-
to={`/settings/billing/overview/${viewSubscriptionQueryParams}`}
598+
to={`/settings/${organization.slug}/billing/overview/${viewSubscriptionQueryParams}`}
599599
>
600600
{t('View your subscription')}
601601
</LinkButton>

static/gsApp/views/invoiceDetails/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ function InvoiceDetails() {
115115
invoice.customer.billingInterval === 'annual'
116116
? 'year'
117117
: 'month',
118-
here: <ExternalLink href="/settings/billing/cancel" />,
118+
here: (
119+
<ExternalLink
120+
href={`/settings/${organization.slug}/billing/cancel/`}
121+
/>
122+
),
119123
}
120124
)}
121125
</FinePrint>

static/gsApp/views/seerAutomation/trial.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export default function SeerAutomationTrial() {
154154
<Flex align="center" justify="center" paddingTop="lg">
155155
{canVisitSubscriptionPage ? (
156156
<LinkButton
157-
to="/settings/billing/overview/?product=seer"
157+
to={`/settings/${organization.slug}/billing/overview/?product=seer`}
158158
priority="primary"
159159
icon={<IconUpgrade />}
160160
>

static/gsApp/views/subscriptionPage/headerCards/linksCard.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ function LinksCard({organization}: {organization: Organization}) {
2323
<LinkButton
2424
priority="link"
2525
icon={<IconList />}
26-
to="/settings/billing/receipts/"
26+
to={`/settings/${organization.slug}/billing/receipts/`}
2727
size="xs"
2828
>
2929
{t('View all receipts')}
3030
</LinkButton>
3131
<LinkButton
3232
priority="link"
3333
icon={<IconTimer />}
34-
to="/settings/billing/activity-logs/"
34+
to={`/settings/${organization.slug}/billing/activity-logs/`}
3535
size="xs"
3636
>
3737
{t('View activity')}
@@ -40,7 +40,7 @@ function LinksCard({organization}: {organization: Organization}) {
4040
<LinkButton
4141
priority="link"
4242
icon={<IconSubscribed />}
43-
to="/settings/billing/notifications/"
43+
to={`/settings/${organization.slug}/billing/notifications/`}
4444
size="xs"
4545
>
4646
{t('Manage spend notifications')}
@@ -51,7 +51,7 @@ function LinksCard({organization}: {organization: Organization}) {
5151
<LinkButton
5252
priority="link"
5353
icon={<IconTimer />}
54-
to="/settings/billing/activity-logs/"
54+
to={`/settings/${organization.slug}/billing/activity-logs/`}
5555
size="xs"
5656
>
5757
{t('View activity')}

static/gsApp/views/subscriptionPage/ondemandDisabled.spec.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('OnDemandDisabled', () => {
1818
onDemandMaxSpend: 1000,
1919
});
2020

21-
render(<OnDemandDisabled subscription={subscription} />);
21+
render(<OnDemandDisabled organization={organization} subscription={subscription} />);
2222

2323
expect(screen.queryByTestId('ondemand-disabled-alert')).not.toBeInTheDocument();
2424
});
@@ -30,7 +30,7 @@ describe('OnDemandDisabled', () => {
3030
onDemandMaxSpend: 0,
3131
});
3232

33-
render(<OnDemandDisabled subscription={subscription} />);
33+
render(<OnDemandDisabled organization={organization} subscription={subscription} />);
3434

3535
expect(screen.queryByTestId('ondemand-disabled-alert')).not.toBeInTheDocument();
3636
});
@@ -43,7 +43,7 @@ describe('OnDemandDisabled', () => {
4343
planTier: PlanTier.AM1,
4444
});
4545

46-
render(<OnDemandDisabled subscription={subscription} />);
46+
render(<OnDemandDisabled organization={organization} subscription={subscription} />);
4747

4848
expect(screen.getByTestId('ondemand-disabled-alert')).toBeInTheDocument();
4949
expect(
@@ -63,7 +63,7 @@ describe('OnDemandDisabled', () => {
6363
plan: 'am3_team',
6464
});
6565

66-
render(<OnDemandDisabled subscription={subscription} />);
66+
render(<OnDemandDisabled organization={organization} subscription={subscription} />);
6767

6868
expect(screen.getByTestId('ondemand-disabled-alert')).toBeInTheDocument();
6969
expect(
@@ -82,11 +82,11 @@ describe('OnDemandDisabled', () => {
8282
onDemandMaxSpend: 1000,
8383
});
8484

85-
render(<OnDemandDisabled subscription={subscription} />);
85+
render(<OnDemandDisabled organization={organization} subscription={subscription} />);
8686

8787
expect(
8888
screen.getByRole('link', {name: 'closed/outstanding invoices'})
89-
).toHaveAttribute('href', '/settings/billing/receipts/');
89+
).toHaveAttribute('href', `/settings/${organization.slug}/billing/receipts/`);
9090
expect(screen.getByRole('link', {name: 'support@sentry.io'})).toHaveAttribute(
9191
'href',
9292
'mailto:support@sentry.io'

static/gsApp/views/subscriptionPage/ondemandDisabled.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,17 @@ import {NavLink} from 'react-router-dom';
3030
import {Alert} from 'sentry/components/core/alert';
3131
import {ExternalLink} from 'sentry/components/core/link';
3232
import {tct} from 'sentry/locale';
33+
import type {Organization} from 'sentry/types/organization';
3334

3435
import {type Subscription} from 'getsentry/types';
3536
import {displayBudgetName} from 'getsentry/utils/billing';
3637

3738
interface Props {
39+
organization: Organization;
3840
subscription: Subscription;
3941
}
4042

41-
function OnDemandDisabled({subscription}: Props) {
43+
function OnDemandDisabled({organization, subscription}: Props) {
4244
// Only show the alert if billing is disabled and there's a spend limit configured
4345
if (!(subscription.onDemandDisabled && subscription.onDemandMaxSpend > 0)) {
4446
return null;
@@ -63,7 +65,9 @@ function OnDemandDisabled({subscription}: Props) {
6365
'Please contact [contact_link:support@sentry.io] to pay [receipts_link:closed/outstanding invoices] to re-enable [budgetTerm] billing.',
6466
{
6567
budgetTerm: displayBudgetName(subscription.planDetails),
66-
receipts_link: <NavLink to="/settings/billing/receipts/" />,
68+
receipts_link: (
69+
<NavLink to={`/settings/${organization.slug}/billing/receipts/`} />
70+
),
6771
contact_link: <a href="mailto:support@sentry.io" />,
6872
}
6973
)}

static/gsApp/views/subscriptionPage/overview.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ describe('Subscription > Overview', () => {
227227
organization,
228228
initialRouterConfig: {
229229
location: {
230-
pathname: '/settings/billing/overview/',
230+
pathname: `/settings/${organization.slug}/billing/overview/`,
231231
query: {open_codecov_modal: '1'},
232232
},
233233
},

static/gsApp/views/subscriptionPage/overview.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ function Overview({subscription, promotionData}: Props) {
183183
<Fragment>
184184
<RecurringCredits displayType="discount" planDetails={planDetails} />
185185
<RecurringCredits displayType="data" planDetails={planDetails} />
186-
<OnDemandDisabled subscription={subscription} />
186+
<OnDemandDisabled organization={organization} subscription={subscription} />
187187
<UsageAlert subscription={subscription} usage={usageData} />
188188
<UsageOverview
189189
subscription={subscription}
@@ -200,7 +200,7 @@ function Overview({subscription, promotionData}: Props) {
200200
function contentWithoutBillingPerms(usageData: CustomerUsage) {
201201
return (
202202
<Fragment>
203-
<OnDemandDisabled subscription={subscription} />
203+
<OnDemandDisabled organization={organization} subscription={subscription} />
204204
<UsageAlert subscription={subscription} usage={usageData} />
205205
<UsageOverview
206206
subscription={subscription}

0 commit comments

Comments
 (0)