usehooks-ts
Version:
React hook library, ready to use, written in Typescript.
42 lines • 1.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
function useScript(src) {
var _a = (0, react_1.useState)(src ? 'loading' : 'idle'), status = _a[0], setStatus = _a[1];
(0, react_1.useEffect)(function () {
if (!src) {
setStatus('idle');
return;
}
var script = document.querySelector("script[src=\"".concat(src, "\"]"));
if (!script) {
script = document.createElement('script');
script.src = src;
script.async = true;
script.setAttribute('data-status', 'loading');
document.body.appendChild(script);
var setAttributeFromEvent = function (event) {
script === null || script === void 0 ? void 0 : script.setAttribute('data-status', event.type === 'load' ? 'ready' : 'error');
};
script.addEventListener('load', setAttributeFromEvent);
script.addEventListener('error', setAttributeFromEvent);
}
else {
setStatus(script.getAttribute('data-status'));
}
var setStateFromEvent = function (event) {
setStatus(event.type === 'load' ? 'ready' : 'error');
};
script.addEventListener('load', setStateFromEvent);
script.addEventListener('error', setStateFromEvent);
return function () {
if (script) {
script.removeEventListener('load', setStateFromEvent);
script.removeEventListener('error', setStateFromEvent);
}
};
}, [src]);
return status;
}
exports.default = useScript;
//# sourceMappingURL=useScript.js.map
;