Spaces:
Running
Running
import React from "react"; | |
import { ProviderInfo, CalendarData } from "../types/heatmap"; | |
import Heatmap from "./Heatmap"; | |
import OrganizationHeader from "./OrganizationHeader"; | |
interface OrganizationCardProps { | |
provider: ProviderInfo; | |
calendarData: CalendarData; | |
rank: number; | |
} | |
const OrganizationCard = React.memo(({ provider, calendarData, rank }: OrganizationCardProps) => { | |
const providerName = provider.fullName || provider.authors[0]; | |
const calendarKey = provider.authors[0]; | |
const totalCount = calendarData[calendarKey]?.reduce((sum, day) => sum + day.count, 0) || 0; | |
return ( | |
<div id={`provider-${calendarKey}`} className="relative bg-gradient-to-br from-card to-card/95 rounded-2xl border border-border shadow-lg hover:shadow-xl transition-all duration-300 p-6 group"> | |
<OrganizationHeader | |
provider={provider} | |
calendarKey={calendarKey} | |
providerName={providerName} | |
totalCount={totalCount} | |
/> | |
<div className="flex flex-col items-center bg-muted/30 rounded-xl p-3 group-hover:bg-muted/40 transition-colors duration-300"> | |
<Heatmap | |
data={calendarData[calendarKey]} | |
color={provider.color} | |
providerName={providerName} | |
fullName={provider.fullName ?? providerName} | |
avatarUrl={provider.avatarUrl ?? ''} | |
authorId={calendarKey} | |
showHeader={false} | |
/> | |
</div> | |
<div className="mt-3 text-xs text-muted-foreground italic text-center"> | |
<span className="font-bold text-foreground">{totalCount}</span> new repos in the last year | |
</div> | |
</div> | |
); | |
}); | |
export default OrganizationCard; |