Skip to content

Commit 99b63b3

Browse files
Feat: Add PayPal Subscription Payment Session hook (#788)
* add paypal-subscriptions types and react hook * chore: add changeset * add tests * update to fix console warnings * add is pending * update with isPending test
1 parent bd2fa93 commit 99b63b3

File tree

8 files changed

+994
-154
lines changed

8 files changed

+994
-154
lines changed

.changeset/five-words-kick.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@paypal/paypal-js": minor
3+
---
4+
5+
Adds paypal-subscriptions component types.

.changeset/light-goats-switch.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@paypal/react-paypal-js": minor
3+
---
4+
5+
Adds PayPal Subscription Payment Session hook.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import {
2+
OnShippingAddressChangeData,
3+
OnShippingOptionsChangeData,
4+
} from "./paypal-payments";
5+
import {
6+
PresentationModeOptionsForAuto,
7+
PresentationModeOptionsForModal,
8+
PresentationModeOptionsForPopup,
9+
PresentationModeOptionsForPaymentHandler,
10+
BasePaymentSessionOptions,
11+
OnApproveDataOneTimePayments,
12+
BasePaymentSession,
13+
} from "./base-component";
14+
15+
export type PayPalSubscriptionSessionOptions = BasePaymentSessionOptions & {
16+
onApprove?: (data: OnApproveDataOneTimePayments) => Promise<void>;
17+
onShippingAddressChange?: (
18+
data: OnShippingAddressChangeData,
19+
) => Promise<void>;
20+
onShippingOptionsChange?: (
21+
data: OnShippingOptionsChangeData,
22+
) => Promise<void>;
23+
};
24+
25+
export type PayPalSubscriptionPaymentSession = BasePaymentSession & {
26+
start: (
27+
presentationModeOptions: PayPalSubscriptionPresentationModeOptions,
28+
subscriptionsOptionsPromise?: Promise<{ subscriptionId: string }>,
29+
) => Promise<void | { redirectURL?: string }>;
30+
hasReturned?: () => boolean;
31+
resume?: () => Promise<void>;
32+
};
33+
34+
export interface PayPalSubscriptionsInstance {
35+
createPayPalSubscriptionPaymentSession: (
36+
subscriptionSessionOptions: PayPalSubscriptionSessionOptions,
37+
) => PayPalSubscriptionPaymentSession;
38+
}
39+
40+
export type PayPalSubscriptionPresentationModeOptions =
41+
| PresentationModeOptionsForAuto
42+
| PresentationModeOptionsForPopup
43+
| PresentationModeOptionsForModal
44+
| PresentationModeOptionsForPaymentHandler;

packages/paypal-js/types/v6/index.d.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from "./components/find-eligible-methods";
99
import { CardFieldsInstance } from "./components/card-fields";
1010
import { PayPalMessagesInstance } from "./components/paypal-messages";
11+
import { PayPalSubscriptionsInstance } from "./components/paypal-subscriptions";
1112

1213
export interface PayPalV6Namespace {
1314
/**
@@ -40,6 +41,7 @@ export type Components =
4041
| "paypal-payments"
4142
| "paypal-guest-payments"
4243
| "paypal-messages"
44+
| "paypal-subscriptions"
4345
| "venmo-payments"
4446
| "paypal-legacy-billing-agreements"
4547
| "card-fields";
@@ -134,7 +136,10 @@ export type SdkInstance<T extends readonly Components[]> = BaseInstance &
134136
("paypal-legacy-billing-agreements" extends T[number]
135137
? PayPalLegacyBillingInstance
136138
: unknown) &
137-
("card-fields" extends T[number] ? CardFieldsInstance : unknown);
139+
("card-fields" extends T[number] ? CardFieldsInstance : unknown) &
140+
("paypal-subscriptions" extends T[number]
141+
? PayPalSubscriptionsInstance
142+
: unknown);
138143

139144
/**
140145
* @internal
@@ -202,6 +207,7 @@ export * from "./components/venmo-payments";
202207
export * from "./components/find-eligible-methods";
203208
export * from "./components/card-fields";
204209
export * from "./components/paypal-messages";
210+
export * from "./components/paypal-subscriptions";
205211

206212
// export a subset of types from base-component
207213
export {

0 commit comments

Comments
 (0)