// Alternatively, set up a standard PayPal button with a custom order of presentation modes
async function setUpPayPalButton(sdkInstance) {
const paypalPaymentSession = sdkInstance.createPayPalOneTimePaymentSession(
paymentSessionOptions,
);
const paypalButton = document.querySelector("paypal-button");
paypalButton.removeAttribute("hidden");
paypalButton.addEventListener("click", async () => {
const createOrderPromiseReference = createOrder();
const presentationModesToTry = ["payment-handler", "popup", "modal"];
for (const presentationMode of presentationModesToTry) {
try {
await paypalPaymentSession.start(
{ presentationMode },
createOrderPromiseReference,
);
// Exit early when start() successfully resolves
break;
} catch (error) {
// Try another presentationMode for a recoverable error
if (error.isRecoverable) {
continue;
}
throw error;
}
}
});
}