RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/lib/utils/getAvatarAsPng.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { IUser } from '@rocket.chat/core-typings';

import { getUserAvatarURL } from '../../../app/utils/client/getUserAvatarURL';

export const getAvatarAsPng = (username: IUser['username'], cb: (dataURL: string) => void): (() => void) => {
    const image = new Image();

    const onLoad = (): void => {
        const canvas = document.createElement('canvas');
        canvas.width = image.width;
        canvas.height = image.height;
        const context = canvas.getContext('2d');

        if (!context) {
            throw new Error('failed to get canvas context');
        }

        context.drawImage(image, 0, 0);
        try {
            return cb(canvas.toDataURL('image/png'));
        } catch (e) {
            return cb('');
        }
    };

    const onError = (): void => cb('');

    image.onload = onLoad;
    image.onerror = onError;
    image.src = getUserAvatarURL(username || '') as string;

    return onError;
};