UNPKG

prebid-react

Version:

React-focused Prebid.js integration package

109 lines (102 loc) 3.25 kB
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