@navinc/base-react-components
Version:
Nav's Pattern Library
61 lines • 2.14 kB
JavaScript
;
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