1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
-
- exports.__esModule = true;
- exports.default = useImage;
-
- var _react = require("react");
-
- /**
- * Fetch and load an image for programatic use such as in a `<canvas>` 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<HTMLCanvasElement>()
- *
- * 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"}
- * <canvas ref={ref} />
- * </>
- * ```
- */
- 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();
- image.src = imageOrUrl;
- if (crossOrigin) image.crossOrigin = crossOrigin;
- } 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;
- }
|