Skip to content

Commit 56c959e

Browse files
lohanidamodarclaude
andcommitted
fix: show org payment method for all team members on billing tab
Fetch the organization's primary and backup payment methods via organizations.getPaymentMethod() instead of filtering account.listPaymentMethods(). The account endpoint only returns the current user's own cards, so if a different team member added the org's payment method it was invisible and the billing page incorrectly showed "Add a payment method". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent af0b0d3 commit 56c959e

1 file changed

Lines changed: 43 additions & 39 deletions

File tree

  • src/routes/(console)/organization-[organization]/billing

src/routes/(console)/organization-[organization]/billing/+page.ts

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -70,26 +70,53 @@ export const load: PageLoad = async ({ parent, depends, url, route }) => {
7070

7171
const areCreditsSupported = isCloud ? currentPlan?.supportsCredits : false;
7272

73-
const [paymentMethods, addressList, billingAddress, availableCredit, billingPlanDowngrade] =
74-
await Promise.all([
75-
sdk.forConsole.account.listPaymentMethods(),
76-
sdk.forConsole.account.listBillingAddresses(),
77-
billingAddressPromise,
78-
areCreditsSupported
79-
? sdk.forConsole.organizations.getAvailableCredits({
80-
organizationId: organization.$id
81-
})
82-
: null,
83-
organization.billingPlanDowngrade
84-
? sdk.forConsole.console.getPlan({
85-
planId: organization.billingPlanDowngrade
73+
const primaryPaymentMethodPromise: Promise<Models.PaymentMethod> = organization.paymentMethodId
74+
? sdk.forConsole.organizations
75+
.getPaymentMethod({
76+
organizationId: organization.$id,
77+
paymentMethodId: organization.paymentMethodId
78+
})
79+
.catch(() => null)
80+
: null;
81+
82+
const backupPaymentMethodPromise: Promise<Models.PaymentMethod> =
83+
organization.backupPaymentMethodId
84+
? sdk.forConsole.organizations
85+
.getPaymentMethod({
86+
organizationId: organization.$id,
87+
paymentMethodId: organization.backupPaymentMethodId
8688
})
87-
: null
88-
]);
89+
.catch(() => null)
90+
: null;
91+
92+
const [
93+
paymentMethods,
94+
addressList,
95+
billingAddress,
96+
availableCredit,
97+
billingPlanDowngrade,
98+
primary,
99+
backup
100+
] = await Promise.all([
101+
sdk.forConsole.account.listPaymentMethods(),
102+
sdk.forConsole.account.listBillingAddresses(),
103+
billingAddressPromise,
104+
areCreditsSupported
105+
? sdk.forConsole.organizations.getAvailableCredits({
106+
organizationId: organization.$id
107+
})
108+
: null,
109+
organization.billingPlanDowngrade
110+
? sdk.forConsole.console.getPlan({
111+
planId: organization.billingPlanDowngrade
112+
})
113+
: null,
114+
primaryPaymentMethodPromise,
115+
backupPaymentMethodPromise
116+
]);
89117

90118
// make number
91119
const credits = availableCredit ? availableCredit.available : null;
92-
const { backup, primary } = getOrganizationPaymentMethods(organization, paymentMethods);
93120

94121
return {
95122
paymentMethods,
@@ -112,26 +139,3 @@ export const load: PageLoad = async ({ parent, depends, url, route }) => {
112139
primaryPaymentMethod: primary
113140
};
114141
};
115-
116-
function getOrganizationPaymentMethods(
117-
organization: Models.Organization,
118-
paymentMethods: Models.PaymentMethodList
119-
): {
120-
backup: Models.PaymentMethod | null;
121-
primary: Models.PaymentMethod | null;
122-
} {
123-
let backup: Models.PaymentMethod | null = null;
124-
let primary: Models.PaymentMethod | null = null;
125-
126-
for (const paymentMethod of paymentMethods.paymentMethods) {
127-
if (paymentMethod.$id === organization.paymentMethodId) {
128-
primary = paymentMethod;
129-
} else if (paymentMethod.$id === organization.backupPaymentMethodId) {
130-
backup = paymentMethod;
131-
}
132-
133-
if (primary && backup) break;
134-
}
135-
136-
return { primary, backup };
137-
}

0 commit comments

Comments
 (0)