paypal-checkout
Version:
PayPal Checkout components, for integrating checkout products.
69 lines (48 loc) • 1.82 kB
JavaScript
/* @flow */
import { config } from './config';
import { responder } from './responder';
import { isLatest, getVersion, isCheckoutXComponent } from './component';
import { loadScript, warn, parseQuery, stringifyError } from './util';
const integrationResponder = responder();
export function onLoadCheckoutIntegration(callback : (err : ?Error, result : ?mixed) => void) : void {
return integrationResponder.listen(callback);
}
function getIntegrationURLs() : { latest : boolean, major : string, minor : string } {
return {
latest: isLatest(),
major: config.checkoutjs_url.replace('{version}', ''),
minor: config.checkoutjs_url.replace('{version}', `.${ getVersion() }`)
};
}
function getIntegrationProps() : Object {
const props : Object = { ...config.script_props };
const query = parseQuery();
if (query.env) {
props['data-env'] = query.env;
}
if (query.stage) {
props['data-stage'] = query.stage;
}
return props;
}
function loadCheckoutIntegration(callback : (err : ?Error, result : ?mixed) => void) : void {
if (!isCheckoutXComponent()) {
return callback(null, null);
}
const urls = getIntegrationURLs();
const props = getIntegrationProps();
loadScript(urls.latest ? urls.major : urls.minor, config.xchild_global, props, (err, result) => {
if (err && !urls.latest) {
return loadScript(`${ urls.major }?t=${ Date.now() }`, config.xchild_global, props, callback);
}
return callback(err, result);
});
}
loadCheckoutIntegration((err : ?Error, result : ?mixed) : void => {
if (err) {
warn('Failed to load checkout.js', stringifyError(err));
}
if (err || result) {
return integrationResponder.respond(err, result);
}
});