define(['underscore','jquery','Magento_Paypal/js/in-context/paypal-sdk','mage/url','Magento_Customer/js/customer-data','domReady!'],function(_,$,paypalSdk,url,customerData){'use strict';function performCreateOrder(clientConfig){var params={'quote_id':clientConfig.quoteId,'customer_id':clientConfig.customerId||'','form_key':clientConfig.formKey,button:clientConfig.button};var redirectErrorUrl=url.build('checkout/cart/index');return $.Deferred(function(deferred){clientConfig.rendererComponent.beforePayment(deferred.resolve,deferred.reject).then(function(){$.post(clientConfig.getTokenUrl,params).done(function(res,statusText,xhr){clientConfig.rendererComponent.afterPayment(res,deferred.resolve,deferred.reject);}).fail(function(jqXHR,textStatus,err){if(jqXHR.status===406){window.location.replace(redirectErrorUrl);}else{clientConfig.rendererComponent.catchOnAuthorize(err,deferred.resolve,deferred.reject);}});});}).promise();} function performOnApprove(clientConfig,data,actions){var params={paymentToken:data.orderID,payerId:data.payerID,paypalFundingSource:customerData.get('paypal-funding-source'),'form_key':clientConfig.formKey};return $.Deferred(function(deferred){clientConfig.rendererComponent.beforeOnAuthorize(deferred.resolve,deferred.reject,actions).then(function(){$.post(clientConfig.onAuthorizeUrl,params).done(function(res){clientConfig.rendererComponent.afterOnAuthorize(res,deferred.resolve,deferred.reject,actions);customerData.set('paypal-funding-source','');}).fail(function(jqXHR,textStatus,err){clientConfig.rendererComponent.catchOnAuthorize(err,deferred.resolve,deferred.reject);customerData.set('paypal-funding-source','');});});}).promise();} return function(clientConfig,element){paypalSdk(clientConfig.sdkUrl,clientConfig.dataAttributes).done(function(paypal){paypal.Buttons({style:clientConfig.styles,onInit:function(data,actions){clientConfig.rendererComponent.validate(actions);},createOrder:function(){return performCreateOrder(clientConfig);},onApprove:function(data,actions){performOnApprove(clientConfig,data,actions);},onClick:function(data){customerData.set('paypal-funding-source',data.fundingSource);clientConfig.rendererComponent.validate();clientConfig.rendererComponent.onClick();},onCancel:function(data,actions){clientConfig.rendererComponent.onCancel(data,actions);},onError:function(err){clientConfig.rendererComponent.onError(err);}}).render(element);});};});