import * as React from "react"; import {useState} from "react"; import {ClientAvatar, kDefaultAvatarImage, kLoadingAvatarImage} from "tc-shared/file/Avatars"; import {useTr} from "tc-shared/ui/react-elements/Helper"; import {showImagePreview} from "tc-shared/ui/frames/ImagePreview"; const ImageStyle = { height: "100%", width: "100%", cursor: "pointer" }; const AvatarLoadingImage = React.memo((props: { alt?: string }) => ( {typeof )); const AvatarDefaultImage = React.memo((props: { className?: string, alt?: string }) => ( {typeof { if(event.isDefaultPrevented()) { return; } event.preventDefault(); showImagePreview(kDefaultAvatarImage, kDefaultAvatarImage); }} /> )); const ClientAvatarRenderer = React.memo((props: { avatar: ClientAvatar, className?: string, alt?: string }) => { const [ , setRevision ] = useState(0); let image; switch (props.avatar.getState()) { case "unset": image = ( ); break; case "loading": image = ( ); break; case "loaded": const imageUrl = props.avatar.getAvatarUrl(); image = ( {typeof { if(event.isDefaultPrevented()) { return; } event.preventDefault(); showImagePreview(imageUrl, undefined); }} draggable={false} /> ); break; case "errored": image = ( {typeof ); break; case undefined: break; } props.avatar.events.reactUse("avatar_state_changed", () => { setRevision(performance.now()); }, undefined, []); return image; }); export const AvatarRenderer = React.memo((props: { avatar: ClientAvatar | "loading" | "default", className?: string, alt?: string }) => { let body; if(props.avatar === "loading") { body = ( ); } else if(props.avatar === "default") { body = ( ); } else if(props.avatar instanceof ClientAvatar) { body = ( ); } return (
{body}
); });