sudo-archive/src/components/Avatar.tsx

51 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-11-22 23:45:06 +00:00
import classNames from "classnames";
import { UserIcon } from "@/components/UserIcon";
import { AccountProfile } from "@/pages/parts/auth/AccountCreatePart";
import { useAuthStore } from "@/stores/auth";
export interface AvatarProps {
profile: AccountProfile["profile"];
2023-11-22 23:45:06 +00:00
sizeClass?: string;
iconClass?: string;
}
export function Avatar(props: AvatarProps) {
return (
<div
2023-11-22 23:45:06 +00:00
className={classNames(
props.sizeClass,
"rounded-full overflow-hidden flex items-center justify-center text-white"
)}
style={{
background: `linear-gradient(to bottom right, ${props.profile.colorA}, ${props.profile.colorB})`,
}}
>
2023-11-22 23:45:06 +00:00
<UserIcon className={props.iconClass} icon={props.profile.icon as any} />
</div>
);
}
2023-11-22 23:45:06 +00:00
export function UserAvatar(props: {
sizeClass?: string;
iconClass?: string;
bottom?: React.ReactNode;
}) {
const auth = useAuthStore();
if (!auth.account) return null;
2023-11-22 23:45:06 +00:00
return (
<div className="relative inline-block">
<Avatar
profile={auth.account.profile}
sizeClass={props.sizeClass ?? "w-[2rem] h-[2rem]"}
iconClass={props.iconClass}
/>
{props.bottom ? (
<div className="absolute bottom-0 left-1/2 transform translate-y-1/2 -translate-x-1/2">
{props.bottom}
</div>
) : null}
</div>
);
}