Add horizontal scrolling

#12
by evijit HF Staff - opened
Files changed (1) hide show
  1. src/pages/index.tsx +39 -12
src/pages/index.tsx CHANGED
@@ -18,6 +18,7 @@ function Page({
18
  }: PageProps) {
19
  const [isLoading, setIsLoading] = useState(true);
20
  const [selectedTags, setSelectedTags] = useState<string[]>([]);
 
21
 
22
  useEffect(() => {
23
  if (calendarData && Object.keys(calendarData).length > 0) {
@@ -77,23 +78,49 @@ function Page({
77
  />
78
  </div>
79
 
80
- <div className="mb-16 mx-auto">
81
- <div className="overflow-x-auto scrollbar-hide">
82
- <div className="flex gap-6 px-4 py-2 min-w-max justify-center">
83
- {filteredProviders.map((provider, index) => (
84
- <OrganizationButton
85
- key={provider.fullName || provider.authors[0]}
86
- provider={provider}
87
- calendarData={calendarData}
88
- rank={index + 1}
89
- />
90
- ))}
 
 
 
 
 
 
 
 
 
 
91
  </div>
 
 
 
 
92
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
93
  </div>
94
 
95
  <HeatmapGrid
96
- sortedProviders={filteredProviders}
97
  calendarData={calendarData}
98
  isLoading={isLoading}
99
  />
 
18
  }: PageProps) {
19
  const [isLoading, setIsLoading] = useState(true);
20
  const [selectedTags, setSelectedTags] = useState<string[]>([]);
21
+ const [showAllOrgs, setShowAllOrgs] = useState(false);
22
 
23
  useEffect(() => {
24
  if (calendarData && Object.keys(calendarData).length > 0) {
 
78
  />
79
  </div>
80
 
81
+ <div className="mb-16 mx-auto max-w-full">
82
+ {/* Organization Buttons with Horizontal Scroll */}
83
+ <div className="relative px-4">
84
+ {/* Scrollable container with visible scrollbar */}
85
+ <div
86
+ className="overflow-x-auto overflow-y-hidden pb-4 scrollbar-thin scrollbar-thumb-muted-foreground/30 scrollbar-track-transparent hover:scrollbar-thumb-muted-foreground/50"
87
+ style={{
88
+ scrollbarWidth: 'thin',
89
+ scrollbarColor: 'rgba(115, 115, 115, 0.3) transparent'
90
+ }}
91
+ >
92
+ <div className="flex gap-6 py-2 w-max mx-auto">
93
+ {(showAllOrgs ? filteredProviders : filteredProviders.slice(0, 10)).map((provider, index) => (
94
+ <OrganizationButton
95
+ key={provider.fullName || provider.authors[0]}
96
+ provider={provider}
97
+ calendarData={calendarData}
98
+ rank={index + 1}
99
+ />
100
+ ))}
101
+ </div>
102
  </div>
103
+
104
+ {/* Visual scroll indicators */}
105
+ <div className="absolute left-0 top-0 bottom-4 w-8 bg-gradient-to-r from-background via-background/80 to-transparent pointer-events-none" />
106
+ <div className="absolute right-0 top-0 bottom-4 w-8 bg-gradient-to-l from-background via-background/80 to-transparent pointer-events-none" />
107
  </div>
108
+
109
+ {/* Show More/Less Button */}
110
+ {filteredProviders.length > 10 && (
111
+ <div className="flex justify-center mt-4">
112
+ <button
113
+ onClick={() => setShowAllOrgs(!showAllOrgs)}
114
+ className="px-6 py-2 text-sm font-medium text-foreground bg-muted hover:bg-muted/80 rounded-full transition-colors duration-200 border border-border"
115
+ >
116
+ {showAllOrgs ? `Show Less (Top 10)` : `Show All ${filteredProviders.length} Organizations`}
117
+ </button>
118
+ </div>
119
+ )}
120
  </div>
121
 
122
  <HeatmapGrid
123
+ sortedProviders={showAllOrgs ? filteredProviders : filteredProviders.slice(0, 10)}
124
  calendarData={calendarData}
125
  isLoading={isLoading}
126
  />