/* 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) {
// 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.clinetId}&disable-funding=credit,card`;
if (subscription) queries += '&vault=true';
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 (