@shopify/hydrogen-react
Version:
React components, hooks, and utilities for creating custom Shopify storefronts
53 lines (52 loc) • 1.53 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const require$$0 = require("react");
const SCRIPTS_LOADED = {};
function loadScript(src, options) {
const isScriptLoaded = SCRIPTS_LOADED[src];
if (isScriptLoaded) {
return isScriptLoaded;
}
const promise = new Promise((resolve, reject) => {
const script = document.createElement("script");
if (options == null ? void 0 : options.module) {
script.type = "module";
} else {
script.type = "text/javascript";
}
script.src = src;
script.onload = () => {
resolve(true);
};
script.onerror = () => {
reject(false);
};
if ((options == null ? void 0 : options.in) === "head") {
document.head.appendChild(script);
} else {
document.body.appendChild(script);
}
});
SCRIPTS_LOADED[src] = promise;
return promise;
}
function useLoadScript(url, options) {
const [status, setStatus] = require$$0.useState("loading");
const stringifiedOptions = JSON.stringify(options);
require$$0.useEffect(() => {
async function loadScriptWrapper() {
try {
setStatus("loading");
await loadScript(url, options);
setStatus("done");
} catch (error) {
setStatus("error");
}
}
loadScriptWrapper();
}, [url, stringifiedOptions, options]);
return status;
}
exports.loadScript = loadScript;
exports.useLoadScript = useLoadScript;
//# sourceMappingURL=load-script.js.map