Files
decomp.me/frontend/src/components/user/UserAvatar.tsx
Alex Bates 04a5a32c07 Upgrade to Next.js 13 (#618)
Resolves #610.
2022-12-19 23:11:57 +09:00

29 lines
911 B
TypeScript

import { useEffect, useState } from "react"
import Image from "next/image"
import classNames from "classnames"
import * as api from "../../lib/api"
import AnonymousFrogAvatar from "./AnonymousFrog"
import styles from "./UserAvatar.module.scss"
export type Props = {
user: api.User | api.AnonymousUser
className?: string
}
export default function UserAvatar({ user, className }: Props) {
const userIsYou = api.useUserIsYou()
// Avoid hydration mismatch
const [isMounted, setIsMounted] = useState(false)
useEffect(() => setIsMounted(true), [])
return <span className={classNames(styles.avatar, className)}>
{api.isAnonUser(user) ? <AnonymousFrogAvatar user={user}/> : user.avatar_url && <Image src={user.avatar_url} alt="" fill sizes="64px" />}
{isMounted && !userIsYou(user) && user.is_online && <div className={styles.online} title="Online" />}
</span>
}