UNPKG

@navinc/base-react-components

Version:
61 lines 2.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTealiumUtag = exports.waitForTealium = void 0; const utils_1 = require("@navinc/utils"); const react_1 = require("react"); /** * @example * import { waitForTealium } from '@navinc/base-react-components' * * const tealiumData = await waitForTealium() */ const waitForTealium = () => { return new Promise((resolve, reject) => { let retriesRemaining = 50; const tryForTealium = () => { var _a; const tealiumData = (_a = global === null || global === void 0 ? void 0 : global.utag) === null || _a === void 0 ? void 0 : _a.data; if (tealiumData != null) { resolve(tealiumData); } else { if (retriesRemaining > 0) { --retriesRemaining; setTimeout(tryForTealium, 50); } else { reject(new Error('Timed out waiting for tealium')); } } }; tryForTealium(); }); }; exports.waitForTealium = waitForTealium; /** * @example * import { useTealiumUtag } from '@navinc/base-react-components' * * const { tealiumId, isTealiumLoading } = useTealiumUtag() * isTealiumLoading ? <div>Loading...</div> : <div>Tealium ID: {tealiumId}</div> */ const useTealiumUtag = ({ onError = utils_1.noop } = {}) => { const [data, setData] = (0, react_1.useState)(); const [loading, setIsLoading] = (0, react_1.useState)(true); // wait for tealium to be available before returning data (0, react_1.useEffect)(() => { (0, exports.waitForTealium)() .then((res) => { setData(res); setIsLoading(false); }) .catch((error) => { onError(error); }) .finally(() => setIsLoading(false)); }, [onError]); const tealiumId = data === null || data === void 0 ? void 0 : data.tealium_visitor_id; return { tealiumId, loading, data }; }; exports.useTealiumUtag = useTealiumUtag; //# sourceMappingURL=use-tealium-utag.js.map