hologram-web-library
Version:
Hologram Web Library components
40 lines (34 loc) • 1.11 kB
JavaScript
export default () => {
(function (cartwatcher) {
'use strict';
const fetchCart = async () => {
const response = await fetch('/cart.js');
return response.json();
};
const emitCartChanges = async () => {
const newCart = await fetchCart();
const event = new CustomEvent('cart_changed', { detail: newCart });
window.dispatchEvent(event);
};
const observeCartChanges = () => {
const cartObserver = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
const isValidRequestType = ['xmlhttprequest', 'fetch'].includes(
entry.initiatorType
);
const isCartChangeRequest = /\/cart\//.test(entry.name);
if (isValidRequestType && isCartChangeRequest) {
emitCartChanges();
}
});
});
cartObserver.observe({ entryTypes: ['resource'] });
};
const init = () => {
emitCartChanges().then(() => {
observeCartChanges();
});
};
cartwatcher.init = init;
})((window.cartwatcher = window.cartwatcher || {}));
};