fix: show team url in dropdown menu on hover (#1122)

fixes: #943 

<img width="330" alt="Screenshot 2024-02-19 211732"
src="https://github.com/documenso/documenso/assets/75713174/724078ca-e107-4acb-a75d-c7d2cdd29b80">


Video Link:
https://www.loom.com/share/35328504cf3f46e9be78bd485252e8dc?sid=1f309776-8b52-4af4-b86b-652b762fef5b
This commit is contained in:
Lucas Smith
2024-05-24 23:46:57 +10:00
committed by GitHub

View File

@@ -3,6 +3,7 @@
import Link from 'next/link'; import Link from 'next/link';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { motion } from 'framer-motion';
import { CheckCircle2, ChevronsUpDown, Plus, Settings2 } from 'lucide-react'; import { CheckCircle2, ChevronsUpDown, Plus, Settings2 } from 'lucide-react';
import { signOut } from 'next-auth/react'; import { signOut } from 'next-auth/react';
@@ -25,6 +26,8 @@ import {
DropdownMenuTrigger, DropdownMenuTrigger,
} from '@documenso/ui/primitives/dropdown-menu'; } from '@documenso/ui/primitives/dropdown-menu';
const MotionLink = motion(Link);
export type MenuSwitcherProps = { export type MenuSwitcherProps = {
user: User; user: User;
teams: GetTeamsResponse; teams: GetTeamsResponse;
@@ -170,18 +173,43 @@ export const MenuSwitcher = ({ user, teams: initialTeamsData }: MenuSwitcherProp
<div className="custom-scrollbar max-h-[40vh] overflow-auto"> <div className="custom-scrollbar max-h-[40vh] overflow-auto">
{teams.map((team) => ( {teams.map((team) => (
<DropdownMenuItem asChild key={team.id}> <DropdownMenuItem asChild key={team.id}>
<Link href={formatRedirectUrlOnSwitch(team.url)}> <MotionLink
initial="initial"
animate="initial"
whileHover="animate"
href={formatRedirectUrlOnSwitch(team.url)}
>
<AvatarWithText <AvatarWithText
avatarFallback={formatAvatarFallback(team.name)} avatarFallback={formatAvatarFallback(team.name)}
primaryText={team.name} primaryText={team.name}
secondaryText={formatSecondaryAvatarText(team)} secondaryText={
<div className="relative">
<motion.span
className="overflow-hidden"
variants={{
initial: { opacity: 1, translateY: 0 },
animate: { opacity: 0, translateY: '100%' },
}}
>
{formatSecondaryAvatarText(team)}
</motion.span>
<motion.span
className="absolute inset-0"
variants={{
initial: { opacity: 0, translateY: '100%' },
animate: { opacity: 1, translateY: 0 },
}}
>{`/t/${team.url}`}</motion.span>
</div>
}
rightSideComponent={ rightSideComponent={
isPathTeamUrl(team.url) && ( isPathTeamUrl(team.url) && (
<CheckCircle2 className="ml-auto fill-black text-white dark:fill-white dark:text-black" /> <CheckCircle2 className="ml-auto fill-black text-white dark:fill-white dark:text-black" />
) )
} }
/> />
</Link> </MotionLink>
</DropdownMenuItem> </DropdownMenuItem>
))} ))}
</div> </div>