File size: 1,430 Bytes
cd201c7 7a85021 cd201c7 7a85021 cd201c7 7a85021 cd201c7 7a85021 cd201c7 7a85021 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import React, { useState } from "react";
import { ProviderInfo, CalendarData } from "../types/heatmap";
import OrganizationCard from "./OrganizationCard";
import ProviderHeatmapSkeleton from "./ProviderHeatmapSkeleton";
import ViewToggle from "./ViewToggle";
type ViewMode = 'daily' | 'weekly';
interface HeatmapGridProps {
sortedProviders: ProviderInfo[];
calendarData: CalendarData;
isLoading: boolean;
}
const HeatmapGrid: React.FC<HeatmapGridProps> = ({ sortedProviders, calendarData, isLoading }) => {
const [viewMode, setViewMode] = useState<ViewMode>('weekly');
if (isLoading) {
return (
<div className="flex flex-col gap-8 max-w-4xl mx-auto mb-16">
{Array.from({ length: 3 }).map((_, idx) => (
<ProviderHeatmapSkeleton key={idx} />
))}
</div>
);
}
return (
<div className="flex flex-col gap-8 max-w-4xl mx-auto mb-16">
{/* View Toggle */}
<div className="flex justify-center">
<ViewToggle
viewMode={viewMode}
onToggle={setViewMode}
/>
</div>
{/* Heatmap Cards */}
{sortedProviders.map((provider, index) => (
<OrganizationCard
key={provider.fullName || provider.authors[0]}
provider={provider}
calendarData={calendarData}
rank={index + 1}
viewMode={viewMode}
/>
))}
</div>
);
};
export default HeatmapGrid; |