/* eslint-disable camelcase */ import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { scriptLoader, scriptRemover } from '../../utils/scriptLoaders'; import { Loader } from '../../components/helpers'; export class PayPalButtonScriptLoader extends Component { state = { isSdkLoaded: window.paypal && true, isSubscription: true }; static getDerivedStateFromProps(props, state) { const { isSubscription } = props; if (isSubscription !== state.isSubscription) { return { isSubscription: isSubscription }; } return null; } componentDidMount() { if (!window.paypal) { this.loadScript(this.props.isSubscription); } } componentDidUpdate(prevProps) { if ( prevProps.isSubscription !== this.state.isSubscription || prevProps.style !== this.props.style ) { // eslint-disable-next-line react/no-did-update-set-state this.setState({ isSdkLoaded: false }); this.loadScript(this.state.isSubscription, true); } } loadScript(subscription, deleteScript) { if (deleteScript) scriptRemover('paypal-sdk'); let queries = `?client-id=${this.props.clientId}&disable-funding=credit,bancontact,blik,eps,giropay,ideal,mybank,p24,sepa,sofort,venmo`; if (subscription) queries += '&vault=true&intent=subscription'; scriptLoader( 'paypal-sdk', 'paypal-sdk', true, `https://www.paypal.com/sdk/js${queries}`, this.onScriptLoad ); } onScriptLoad = () => { this.setState({ isSdkLoaded: true }); }; captureOneTimePayment(data, actions) { return actions.order.capture().then(details => { return this.props.onApprove(details, data); }); } render() { const { isSdkLoaded, isSubscription } = this.state; const { onApprove, onError, onCancel, createSubscription, createOrder, style } = this.props; if (!isSdkLoaded) return ; const Button = window.paypal.Buttons.driver('react', { React, ReactDOM }); return (