1+ import { Badge } from '@/components/ui/badge' ;
2+ import { Tabs , TabsContent , TabsList , TabsTrigger } from '@/components/ui/tabs' ;
3+ import type { Software } from '@/types/types' ;
4+ import SoftwareCard from './SoftwareCard' ;
5+
6+ interface SoftwareTabsProps {
7+ software : Software [ ] ;
8+ }
9+
10+ export default function SoftwareTabs ( { software } : SoftwareTabsProps ) {
11+ // Filter software by category
12+ const featuredSoftware = software . filter ( item => item . categories . featured ) ;
13+ const tools = software . filter ( item => item . categories . tool ) ;
14+ const databases = software . filter ( item => item . categories . database ) ;
15+
16+ return (
17+ < Tabs defaultValue = "featured" className = "w-full" >
18+ < TabsList className = "grid w-full grid-cols-3 mb-8" >
19+ < TabsTrigger value = "featured" className = "flex items-center gap-2" >
20+ Featured
21+ < Badge variant = "secondary" className = "ml-1" >
22+ { featuredSoftware . length }
23+ </ Badge >
24+ </ TabsTrigger >
25+ < TabsTrigger value = "tools" className = "flex items-center gap-2" >
26+ Tools
27+ < Badge variant = "secondary" className = "ml-1" >
28+ { tools . length }
29+ </ Badge >
30+ </ TabsTrigger >
31+ < TabsTrigger value = "databases" className = "flex items-center gap-2" >
32+ Databases
33+ < Badge variant = "secondary" className = "ml-1" >
34+ { databases . length }
35+ </ Badge >
36+ </ TabsTrigger >
37+ </ TabsList >
38+
39+ < TabsContent value = "featured" >
40+ < div className = "grid gap-6 md:grid-cols-2" >
41+ { featuredSoftware . map ( ( item ) => (
42+ < SoftwareCard
43+ key = { item . name }
44+ name = { item . name }
45+ short_description = { item . short_description }
46+ long_description = { item . long_description }
47+ code_repository = { item . code_repository }
48+ website = { item . website }
49+ publication = { item . publication }
50+ image = { item . image }
51+ categories = { item . categories }
52+ />
53+ ) ) }
54+ </ div >
55+ </ TabsContent >
56+
57+ < TabsContent value = "tools" >
58+ < div className = "grid gap-6 md:grid-cols-2" >
59+ { tools . map ( ( item ) => (
60+ < SoftwareCard
61+ key = { item . name }
62+ name = { item . name }
63+ short_description = { item . short_description }
64+ long_description = { item . long_description }
65+ code_repository = { item . code_repository }
66+ website = { item . website }
67+ publication = { item . publication }
68+ image = { item . image }
69+ categories = { item . categories }
70+ />
71+ ) ) }
72+ </ div >
73+ </ TabsContent >
74+
75+ < TabsContent value = "databases" >
76+ < div className = "grid gap-6 md:grid-cols-2" >
77+ { databases . map ( ( item ) => (
78+ < SoftwareCard
79+ key = { item . name }
80+ name = { item . name }
81+ short_description = { item . short_description }
82+ long_description = { item . long_description }
83+ code_repository = { item . code_repository }
84+ website = { item . website }
85+ publication = { item . publication }
86+ image = { item . image }
87+ categories = { item . categories }
88+ />
89+ ) ) }
90+ </ div >
91+ </ TabsContent >
92+ </ Tabs >
93+ ) ;
94+ }
0 commit comments