RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/components/message/content/location/hooks/useAsyncImage.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { useEffect } from 'react';

import { useAsyncState } from '../../../../../hooks/useAsyncState';

export const useAsyncImage = (src: string | undefined): string | undefined => {
    const { value, resolve, reject, reset } = useAsyncState<string>();

    useEffect(() => {
        reset();

        if (!src) {
            return;
        }

        const image = new Image();
        image.addEventListener('load', () => {
            resolve(image.src);
        });
        image.addEventListener('error', (e) => {
            reject(e.error);
        });
        image.src = src;
    }, [src, resolve, reject, reset]);

    return value;
};