Allows nameless users to Signout and update profile (#1181)
This commit is contained in:
parent
7de35dc4e5
commit
11e7779a58
2 changed files with 25 additions and 19 deletions
|
@ -100,7 +100,7 @@ export function ShellSubHeading(props: {
|
|||
return (
|
||||
<div className={classNames("block sm:flex justify-between mb-3", props.className)}>
|
||||
<div>
|
||||
<h2 className="flex items-center content-center space-x-2 text-base font-bold text-gray-900 leading-6">
|
||||
<h2 className="flex items-center content-center space-x-2 text-base font-bold leading-6 text-gray-900">
|
||||
{props.title}
|
||||
</h2>
|
||||
{props.subtitle && <p className="mr-4 text-sm text-neutral-500">{props.subtitle}</p>}
|
||||
|
@ -171,7 +171,7 @@ export default function Shell(props: {
|
|||
if (i18n.status === "loading" || isRedirectingToOnboarding || loading) {
|
||||
// show spinner whilst i18n is loading to avoid language flicker
|
||||
return (
|
||||
<div className="z-50 absolute w-full h-screen bg-gray-50 flex items-center">
|
||||
<div className="absolute z-50 flex items-center w-full h-screen bg-gray-50">
|
||||
<Loader />
|
||||
</div>
|
||||
);
|
||||
|
@ -225,7 +225,7 @@ export default function Shell(props: {
|
|||
))}
|
||||
</nav>
|
||||
</div>
|
||||
<div className="p-2 pt-2 pr-2 hover:bg-gray-100 rounded-sm m-2">
|
||||
<div className="p-2 pt-2 pr-2 m-2 rounded-sm hover:bg-gray-100">
|
||||
<UserDropdown />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -309,20 +309,24 @@ function UserDropdown({ small }: { small?: boolean }) {
|
|||
const query = useMeQuery();
|
||||
const user = query.data;
|
||||
|
||||
return user ? (
|
||||
return (
|
||||
<Dropdown>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<div className="flex items-center space-x-2 cursor-pointer group">
|
||||
<Avatar
|
||||
imageSrc={user.avatar}
|
||||
alt={user.username}
|
||||
imageSrc={user?.avatar || ""}
|
||||
alt={user?.username || "Nameless User"}
|
||||
className={classNames(small ? "w-8 h-8" : "w-10 h-10", "bg-gray-300 rounded-full flex-shrink-0")}
|
||||
/>
|
||||
{!small && (
|
||||
<>
|
||||
<span className="flex-grow text-sm">
|
||||
<span className="block font-medium text-gray-900 truncate">{user.name}</span>
|
||||
<span className="block font-normal truncate text-neutral-500">cal.com/{user.username}</span>
|
||||
<span className="block font-medium text-gray-900 truncate">
|
||||
{user?.username || "Nameless User"}
|
||||
</span>
|
||||
<span className="block font-normal truncate text-neutral-500">
|
||||
{user?.username ? `cal.com/${user.username}` : "No public page"}
|
||||
</span>
|
||||
</span>
|
||||
<SelectorIcon
|
||||
className="flex-shrink-0 w-5 h-5 text-gray-400 group-hover:text-gray-500"
|
||||
|
@ -333,15 +337,17 @@ function UserDropdown({ small }: { small?: boolean }) {
|
|||
</div>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent>
|
||||
<DropdownMenuItem>
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href={`${process.env.NEXT_PUBLIC_APP_URL}/${user?.username || ""}`}
|
||||
className="flex px-4 py-2 text-sm text-gray-700 items-center">
|
||||
<ExternalLinkIcon className="w-5 h-5 mr-3 text-gray-500" /> {t("view_public_page")}
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
{user?.username && (
|
||||
<DropdownMenuItem>
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href={`${process.env.NEXT_PUBLIC_APP_URL}/${user.username}`}
|
||||
className="flex items-center px-4 py-2 text-sm text-gray-700">
|
||||
<ExternalLinkIcon className="w-5 h-5 mr-3 text-gray-500" /> {t("view_public_page")}
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
<DropdownMenuSeparator className="h-px bg-gray-200" />
|
||||
<DropdownMenuItem>
|
||||
<a
|
||||
|
@ -389,5 +395,5 @@ function UserDropdown({ small }: { small?: boolean }) {
|
|||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</Dropdown>
|
||||
) : null;
|
||||
);
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ async function getUserFromSession({
|
|||
return null;
|
||||
}
|
||||
const { email, username } = user;
|
||||
if (!username || !email) {
|
||||
if (!email) {
|
||||
return null;
|
||||
}
|
||||
const avatar = user.avatar || defaultAvatarSrc({ email });
|
||||
|
|
Loading…
Reference in a new issue