prebid-react
Version:
React-focused Prebid.js integration package
109 lines (102 loc) • 3.25 kB
JavaScript
import React, { createContext, useEffect, useContext, useRef, useState } from 'react';
var initPrebid = function (config) {
var pbjs = window.pbjs;
pbjs.que.push(function () {
pbjs.setConfig({
debug: process.env.NODE_ENV === 'development',
bidderTimeout: config.timeout,
enableSendAllBids: true,
});
});
};
var PrebidContext = createContext(null);
var PrebidProvider = function (_a) {
var children = _a.children, config = _a.config;
useEffect(function () {
initPrebid(config);
}, [config]);
var refresh = function () {
window.pbjs.requestBids({
bidsBackHandler: function () {
window.googletag.pubads().refresh();
}
});
};
return (React.createElement(PrebidContext.Provider, { value: { pbjs: window.pbjs, refresh: refresh } }, children));
};
var usePrebid = function () {
var context = useContext(PrebidContext);
if (!context) {
throw new Error('usePrebid must be used within a PrebidProvider');
}
return context;
};
var AdUnit = function (_a) {
var code = _a.code, sizes = _a.sizes, bids = _a.bids;
var divRef = useRef(null);
var pbjs = usePrebid().pbjs;
useEffect(function () {
if (!divRef.current || !pbjs)
return;
var adUnit = {
code: code,
mediaTypes: {
banner: {
sizes: sizes,
},
},
bids: bids,
};
pbjs.addAdUnits([adUnit]);
pbjs.requestBids({
adUnitCodes: [code],
bidsBackHandler: function () {
window.googletag.cmd.push(function () {
window.googletag.display(code);
});
},
});
return function () {
pbjs.removeAdUnit(code);
};
}, [code, sizes, bids, pbjs]);
return React.createElement("div", { id: code, ref: divRef });
};
var useAdUnit = function (code) {
var pbjs = usePrebid().pbjs;
var _a = useState(false), isLoaded = _a[0], setIsLoaded = _a[1];
var _b = useState(false), isRendered = _b[0], setIsRendered = _b[1];
useEffect(function () {
if (!pbjs)
return;
var handleBidResponse = function () {
setIsLoaded(true);
};
var handleAdRender = function () {
setIsRendered(true);
};
pbjs.onEvent('bidResponse', handleBidResponse, code);
pbjs.onEvent('adRender', handleAdRender, code);
return function () {
pbjs.offEvent('bidResponse', handleBidResponse, code);
pbjs.offEvent('adRender', handleAdRender, code);
};
}, [code, pbjs]);
var refresh = function () {
if (pbjs) {
pbjs.requestBids({
adUnitCodes: [code],
bidsBackHandler: function () {
window.googletag.pubads().refresh([code]);
}
});
}
};
return {
isLoaded: isLoaded,
isRendered: isRendered,
refresh: refresh
};
};
export { AdUnit, PrebidProvider, useAdUnit, usePrebid };
//# sourceMappingURL=index.esm.js.map