"use strict"; exports.__esModule = true; exports.default = useImage; var _react = require("react"); /** * Fetch and load an image for programatic use such as in a `` element. * * @param imageOrUrl The `HtmlImageElement` or image url to load * @param crossOrigin The `crossorigin` attribute to set * * ```ts * const { image, error } = useImage('/static/kittens.png') * const ref = useRef() * * useEffect(() => { * const ctx = ref.current.getContext('2d') * * if (image) { * ctx.drawImage(image, 0, 0) * } * }, [ref, image]) * * return ( * <> * {error && "there was a problem loading the image"} * * * ``` */ function useImage(imageOrUrl, crossOrigin) { var _useState = (0, _react.useState)({ image: null, error: null }), state = _useState[0], setState = _useState[1]; (0, _react.useEffect)(function () { if (!imageOrUrl) return undefined; var image; if (typeof imageOrUrl === 'string') { image = new Image(); if (crossOrigin) image.crossOrigin = crossOrigin; image.src = imageOrUrl; } else { image = imageOrUrl; if (image.complete && image.naturalHeight > 0) { setState({ image: image, error: null }); return; } } function onLoad() { setState({ image: image, error: null }); } function onError(error) { setState({ image: image, error: error }); } image.addEventListener('load', onLoad); image.addEventListener('error', onError); return function () { image.removeEventListener('load', onLoad); image.removeEventListener('error', onError); }; }, [imageOrUrl, crossOrigin]); return state; }