diff --git a/components/Avatar.tsx b/components/Avatar.tsx
index 02cf38a9..b1f58d63 100644
--- a/components/Avatar.tsx
+++ b/components/Avatar.tsx
@@ -1,37 +1,22 @@
-import { useState } from "react";
-import md5 from "../lib/md5";
+import * as AvatarPrimitive from "@radix-ui/react-avatar";
+import { defaultAvatarSrc } from "@lib/profile";
-export default function Avatar({
- user,
- className = "",
- fallback,
- imageSrc = "",
-}: {
- user: any;
+export type AvatarProps = {
className?: string;
- fallback?: JSX.Element;
imageSrc?: string;
-}) {
- const [gravatarAvailable, setGravatarAvailable] = useState(true);
+ displayName: string;
+ gravatarFallbackMd5?: string;
+};
- if (imageSrc) {
- return
;
- }
-
- if (user.avatar) {
- return
;
- }
-
- if (gravatarAvailable) {
- return (
-
setGravatarAvailable(false)}
- src={`https://www.gravatar.com/avatar/${md5(user.email)}?s=160&d=identicon&r=PG`}
- alt="Avatar"
- className={className}
- />
- );
- }
-
- return fallback || null;
+export default function Avatar({ imageSrc, displayName, gravatarFallbackMd5, className = "" }: AvatarProps) {
+ return (
+
+
+
+ {gravatarFallbackMd5 && (
+
+ )}
+
+
+ );
}
diff --git a/components/Shell.tsx b/components/Shell.tsx
index a8d6b3f1..312219c3 100644
--- a/components/Shell.tsx
+++ b/components/Shell.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
-import React, { Fragment, useEffect } from "react";
+import React, { Fragment, useEffect, useState } from "react";
import { useRouter } from "next/router";
-import { useSession } from "next-auth/client";
+import { signOut, useSession } from "next-auth/client";
import { Menu, Transition } from "@headlessui/react";
import { collectPageParameters, telemetryEventTypes, useTelemetry } from "../lib/telemetry";
import { SelectorIcon } from "@heroicons/react/outline";
@@ -18,6 +18,8 @@ import {
import Logo from "./Logo";
import classNames from "@lib/classNames";
import { Toaster } from "react-hot-toast";
+import Avatar from "@components/Avatar";
+import { User } from "@prisma/client";
export default function Shell(props) {
const router = useRouter();
@@ -112,7 +114,7 @@ export default function Shell(props) {
-
+
@@ -191,45 +193,52 @@ export default function Shell(props) {
) : null;
}
-function UserDropdown({ session, small, bottom }: { session: any; small?: boolean; bottom?: boolean }) {
+function UserDropdown({ small, bottom }: { small?: boolean; bottom?: boolean }) {
+ const [user, setUser] = useState(null);
+
+ useEffect(() => {
+ fetch("/api/me")
+ .then((res) => res.json())
+ .then((responseBody) => {
+ setUser(responseBody.user);
+ });
+ }, []);
+
return (