@shopgate/pwa-common
Version:
Common library for the Shopgate Connect PWA.
11 lines • 2.15 kB
JavaScript
function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React,{Fragment,useMemo}from'react';import PropTypes from'prop-types';import Helmet from'react-helmet';import{embeddedMedia}from'@shopgate/pwa-common/collections';/**
* EmbeddedMedia component. Handles loading of media related scripts e.g. the Vimeo Player.
* @returns {JSX}
*/var EmbeddedMedia=function EmbeddedMedia(_ref){var children=_ref.children,cookieConsentSettings=_ref.cookieConsentSettings;var cookieConsent=useMemo(function(){return _extends({comfortCookiesAccepted:false,statisticsCookiesAccepted:false},cookieConsentSettings);},[cookieConsentSettings]);if(!embeddedMedia.getHasPendingProviders()||!cookieConsent.comfortCookiesAccepted){return children;}// Get all pending providers
var pendingProviders=Array.from(embeddedMedia.providers).filter(function(p){return p.isPending;});/**
* Inject onLoad cb to script tags
* @param {Element[]} scriptTags script tags to listen for
* @param {MediaProvider} provider Provider
*/var updateProviderScripts=function updateProviderScripts(_ref2){var scriptTags=_ref2.scriptTags;if(scriptTags){scriptTags.forEach(function(scriptTag){var provider=pendingProviders.find(function(p){return p.remoteScriptUrl===scriptTag.getAttribute('src');});// eslint-disable-next-line no-param-reassign
scriptTag.onload=function(){provider.onScriptLoaded();};});}};var scripts=pendingProviders.map(function(provider){return{src:provider.remoteScriptUrl,type:'text/javascript'};});return React.createElement(Fragment,null,React.createElement(Helmet,{script:scripts// Helmet doesn't support `onload` in script objects so we have to hack in our own
,onChangeClientState:function onChangeClientState(newState,addedTags){return updateProviderScripts(addedTags);}}),children);};EmbeddedMedia.defaultProps={cookieConsentSettings:{comfortCookiesAccepted:false,statisticsCookiesAccepted:false}};export default EmbeddedMedia;