|
import React from "react"; |
|
import { ProviderInfo, CalendarData } from "../types/heatmap"; |
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/tooltip"; |
|
|
|
interface OrganizationButtonProps { |
|
provider: ProviderInfo; |
|
calendarData: CalendarData; |
|
rank: number; |
|
} |
|
|
|
const OrganizationButton: React.FC<OrganizationButtonProps> = ({ |
|
provider, |
|
calendarData, |
|
rank |
|
}) => { |
|
const providerName = provider.fullName || provider.authors[0]; |
|
const calendarKey = provider.authors[0]; |
|
const providerData = calendarData[calendarKey] || []; |
|
const totalCount = providerData.reduce((sum, day) => sum + day.count, 0); |
|
|
|
const handleClick = () => { |
|
const element = document.getElementById(`provider-${calendarKey}`); |
|
if (element) { |
|
element.scrollIntoView({ behavior: 'smooth' }); |
|
} |
|
}; |
|
|
|
const getRankBadgeClasses = () => { |
|
if (rank === 1) { |
|
return "bg-gradient-to-br from-yellow-400 to-yellow-600 text-yellow-900"; |
|
} |
|
if (rank === 2) { |
|
return "bg-gradient-to-br from-gray-300 to-gray-500 text-gray-900"; |
|
} |
|
if (rank === 3) { |
|
return "bg-gradient-to-br from-amber-600 to-amber-800 text-amber-100"; |
|
} |
|
return "bg-gradient-to-br from-gray-800 to-gray-900 text-gray-100"; |
|
}; |
|
|
|
return ( |
|
<TooltipProvider> |
|
<Tooltip> |
|
<TooltipTrigger asChild> |
|
<div |
|
className="flex flex-col items-center min-w-0 flex-shrink-0 cursor-pointer group px-1" |
|
onClick={handleClick} |
|
> |
|
{/* Logo Circle */} |
|
<div className="relative"> |
|
{/* Rank Badge */} |
|
<div className={`absolute -top-2 -left-2 ${getRankBadgeClasses()} text-xs font-bold rounded-full min-w-[24px] h-6 flex items-center justify-center px-1.5 shadow-lg border-2 border-background z-10`}> |
|
#{rank} |
|
</div> |
|
|
|
{provider.avatarUrl ? ( |
|
<img |
|
src={provider.avatarUrl} |
|
alt={`${providerName} logo`} |
|
className="w-16 h-16 rounded-lg shadow-lg transition-all duration-200 bg-white dark:bg-gray-900" |
|
/> |
|
) : ( |
|
<div className="w-16 h-16 rounded-lg bg-muted flex items-center justify-center text-xl font-bold text-muted-foreground hover:bg-muted/80 transition-all duration-200"> |
|
{providerName.charAt(0).toUpperCase()} |
|
</div> |
|
)} |
|
</div> |
|
|
|
{/* Activity Info */} |
|
<div className="mt-1.5 text-center"> |
|
{/* Provider Name */} |
|
<div className="text-xs font-medium text-foreground truncate max-w-20 text-center"> |
|
{providerName} |
|
</div> |
|
</div> |
|
</div> |
|
</TooltipTrigger> |
|
<TooltipContent side="bottom" className="bg-background border border-border shadow-lg"> |
|
<p className="text-sm font-medium"> |
|
{totalCount} new repos in the last year |
|
</p> |
|
</TooltipContent> |
|
</Tooltip> |
|
</TooltipProvider> |
|
); |
|
}; |
|
|
|
export default OrganizationButton; |
|
|