diff --git a/packages/paypal-commerce-integration/src/paypal-commerce-types.ts b/packages/paypal-commerce-integration/src/paypal-commerce-types.ts index 71493cfa05..574d223cf4 100644 --- a/packages/paypal-commerce-integration/src/paypal-commerce-types.ts +++ b/packages/paypal-commerce-integration/src/paypal-commerce-types.ts @@ -360,6 +360,8 @@ export interface PayPalCommerceButtons { render(id: string): void; close(): void; isEligible(): boolean; + hasReturned?(): boolean; + resume?(): void; } export interface PayPalCommerceButtonsOptions { diff --git a/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.spec.ts b/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.spec.ts index ec77b953c1..1b18e4778f 100644 --- a/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.spec.ts +++ b/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.spec.ts @@ -371,6 +371,7 @@ describe('PayPalCommerceButtonStrategy', () => { await strategy.initialize(initializationOptions); expect(paypalSdk.Buttons).toHaveBeenCalledWith({ + appSwitchWhenAvailable: true, fundingSource: paypalSdk.FUNDING.PAYPAL, style: paypalCommerceOptions.style, createOrder: expect.any(Function), @@ -382,6 +383,7 @@ describe('PayPalCommerceButtonStrategy', () => { await strategy.initialize(buyNowInitializationOptions); expect(paypalSdk.Buttons).toHaveBeenCalledWith({ + appSwitchWhenAvailable: true, fundingSource: paypalSdk.FUNDING.PAYPAL, style: paypalCommerceOptions.style, createOrder: expect.any(Function), @@ -408,6 +410,7 @@ describe('PayPalCommerceButtonStrategy', () => { await strategy.initialize(initializationOptions); expect(paypalSdk.Buttons).toHaveBeenCalledWith({ + appSwitchWhenAvailable: true, fundingSource: paypalSdk.FUNDING.PAYPAL, style: paypalCommerceOptions.style, createOrder: expect.any(Function), diff --git a/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts b/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts index d2aac469da..d38fda68e3 100644 --- a/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts +++ b/packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts @@ -104,11 +104,14 @@ export default class PayPalCommerceButtonStrategy implements CheckoutButtonStrat const { isHostedCheckoutEnabled } = paymentMethod.initializationData || {}; const defaultCallbacks = { + appSwitchWhenAvailable: true, // Need an indicator to trigger App Switch createOrder: () => this.paypalCommerceIntegrationService.createOrder('paypalcommerce'), onApprove: ({ orderID }: ApproveCallbackPayload) => this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID), }; + console.log('DEFAULT', defaultCallbacks); + const buyNowFlowCallbacks = { onClick: () => this.handleClick(buyNowInitializeOptions), onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(), @@ -134,7 +137,16 @@ export default class PayPalCommerceButtonStrategy implements CheckoutButtonStrat const paypalButton = paypalSdk.Buttons(buttonRenderOptions); if (paypalButton.isEligible()) { - paypalButton.render(`#${containerId}`); + // AppSwitch Flow + if (paypalButton?.hasReturned && paypalButton.hasReturned()) { + console.log('HAS RETURNED'); + if (paypalButton.resume) { + paypalButton?.resume(); + } + } else { + console.log('RENDER'); + paypalButton.render(`#${containerId}`); + } } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') { onEligibilityFailure(); } else {