Skip to content

Commit d8fa5d9

Browse files
authored
chore(clerk-js,types): Get payment_method_order from FAPI (#6034)
1 parent 3cbe7ef commit d8fa5d9

File tree

5 files changed

+25
-5
lines changed

5 files changed

+25
-5
lines changed

.changeset/dry-streets-jog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@clerk/clerk-js': patch
3+
'@clerk/types': patch
4+
---
5+
6+
Get `payment_method_order` for Stripe payment elements from backend

packages/clerk-js/src/core/resources/CommercePaymentSource.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export class CommercePaymentSource extends BaseResource implements CommercePayme
7474
export class CommerceInitializedPaymentSource extends BaseResource implements CommerceInitializedPaymentSourceResource {
7575
externalClientSecret!: string;
7676
externalGatewayId!: string;
77+
paymentMethodOrder!: string[];
7778

7879
constructor(data: CommerceInitializedPaymentSourceJSON) {
7980
super();
@@ -87,7 +88,7 @@ export class CommerceInitializedPaymentSource extends BaseResource implements Co
8788

8889
this.externalClientSecret = data.external_client_secret;
8990
this.externalGatewayId = data.external_gateway_id;
90-
91+
this.paymentMethodOrder = data.payment_method_order;
9192
return this;
9293
}
9394
}

packages/clerk-js/src/ui/components/PaymentSources/AddPaymentSource.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const usePaymentSourceUtils = () => {
4141

4242
const externalGatewayId = initializedPaymentSource?.externalGatewayId;
4343
const externalClientSecret = initializedPaymentSource?.externalClientSecret;
44+
const paymentMethodOrder = initializedPaymentSource?.paymentMethodOrder;
4445
const stripePublishableKey = commerceSettings.billing.stripePublishableKey;
4546

4647
const { data: stripe } = useSWR(
@@ -65,13 +66,14 @@ const usePaymentSourceUtils = () => {
6566
stripe,
6667
initializePaymentSource,
6768
externalClientSecret,
69+
paymentMethodOrder,
6870
};
6971
};
7072

7173
const [AddPaymentSourceContext, useAddPaymentSourceContext] = createContextAndHook<any>('AddPaymentSourceRoot');
7274

7375
const AddPaymentSourceRoot = ({ children, ...rest }: PropsWithChildren<AddPaymentSourceProps>) => {
74-
const { initializePaymentSource, externalClientSecret, stripe } = usePaymentSourceUtils();
76+
const { initializePaymentSource, externalClientSecret, stripe, paymentMethodOrder } = usePaymentSourceUtils();
7577
const [headerTitle, setHeaderTitle] = useState<LocalizationKey | undefined>(undefined);
7678
const [headerSubtitle, setHeaderSubtitle] = useState<LocalizationKey | undefined>(undefined);
7779
const [submitLabel, setSubmitLabel] = useState<LocalizationKey | undefined>(undefined);
@@ -93,6 +95,7 @@ const AddPaymentSourceRoot = ({ children, ...rest }: PropsWithChildren<AddPaymen
9395
initializePaymentSource,
9496
externalClientSecret,
9597
stripe,
98+
paymentMethodOrder,
9699
...rest,
97100
},
98101
}}
@@ -212,8 +215,16 @@ const FormButton = ({ text }: { text: LocalizationKey }) => {
212215
};
213216

214217
const AddPaymentSourceForm = ({ children }: PropsWithChildren) => {
215-
const { headerTitle, headerSubtitle, submitLabel, checkout, initializePaymentSource, onSuccess, cancelAction } =
216-
useAddPaymentSourceContext();
218+
const {
219+
headerTitle,
220+
headerSubtitle,
221+
submitLabel,
222+
checkout,
223+
initializePaymentSource,
224+
onSuccess,
225+
cancelAction,
226+
paymentMethodOrder,
227+
} = useAddPaymentSourceContext();
217228
const [isPaymentElementReady, setIsPaymentElementReady] = useState(false);
218229
const stripe = useStripe();
219230
const card = useCardState();
@@ -273,7 +284,7 @@ const AddPaymentSourceForm = ({ children }: PropsWithChildren) => {
273284
defaultCollapsed: false,
274285
},
275286
// TODO(@COMMERCE): Should this be fetched from the fapi?
276-
paymentMethodOrder: ['card', 'apple_pay', 'google_pay'],
287+
paymentMethodOrder: paymentMethodOrder || ['card'],
277288
applePay: checkout
278289
? {
279290
recurringPaymentRequest: {

packages/types/src/commerce.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export interface CommercePaymentSourceResource extends ClerkResource {
106106
export interface CommerceInitializedPaymentSourceResource extends ClerkResource {
107107
externalClientSecret: string;
108108
externalGatewayId: string;
109+
paymentMethodOrder: string[];
109110
}
110111

111112
export type GetStatementsParams = WithOptionalOrgType<ClerkPaginationParams>;

packages/types/src/json.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,7 @@ export interface CommerceInitializedPaymentSourceJSON extends ClerkResourceJSON
649649
object: 'commerce_payment_source_initialize';
650650
external_client_secret: string;
651651
external_gateway_id: string;
652+
payment_method_order: string[];
652653
}
653654

654655
export interface CommerceStatementJSON extends ClerkResourceJSON {

0 commit comments

Comments
 (0)