@@ -5,7 +5,7 @@ import { category } from "@repo/store";
5
5
import { Track , Problem } from "@prisma/client" ;
6
6
import { useRecoilValue } from "recoil" ;
7
7
import { useEffect , useState } from "react" ;
8
- import { Select , SelectTrigger , SelectValue , SelectContent , SelectGroup , SelectItem } from "@repo/ui" ;
8
+ import { Select , SelectTrigger , SelectValue , SelectContent , SelectGroup , SelectItem , Switch , Label } from "@repo/ui" ;
9
9
10
10
interface TrackPros extends Track {
11
11
problems : Problem [ ] ;
@@ -21,9 +21,13 @@ export const Tracks = ({ tracks }: { tracks: TrackPros[] }) => {
21
21
const selectedCategory = useRecoilValue ( category ) ;
22
22
const [ filteredTracks , setFilteredTracks ] = useState < TrackPros [ ] > ( tracks ) ;
23
23
const [ sortBy , setSortBy ] = useState < string > ( "" ) ;
24
-
24
+ const [ cohort3 , setCohort3 ] = useState < boolean > ( false ) ;
25
+
25
26
const filterTracks = ( ) => {
26
27
let filteredTracks = tracks ;
28
+ if ( cohort3 ) {
29
+ filteredTracks = filteredTracks . filter ( ( t ) => t . cohort === 3 ) ;
30
+ }
27
31
if ( selectedCategory . length > 0 ) {
28
32
filteredTracks = filteredTracks . filter ( ( t ) => t . categories . some ( ( c ) => c . category . category === selectedCategory ) ) ;
29
33
}
@@ -44,39 +48,46 @@ export const Tracks = ({ tracks }: { tracks: TrackPros[] }) => {
44
48
} ;
45
49
useEffect ( ( ) => {
46
50
filterTracks ( ) ;
47
- } , [ selectedCategory ] ) ;
51
+ } , [ selectedCategory , cohort3 ] ) ;
48
52
useEffect ( ( ) => {
49
53
sortTracks ( sortBy ) ;
50
54
} , [ sortBy ] ) ;
51
55
return (
52
56
< div >
53
- < Select
54
- onValueChange = { ( e ) => {
55
- setSortBy ( e ) ;
56
- } }
57
- >
58
- < SelectTrigger className = "w-[250px] mx-auto mt-6" >
59
- < SelectValue placeholder = "Sort by" />
60
- </ SelectTrigger >
61
- < SelectContent
62
- ref = { ( ref ) => {
63
- if ( ! ref ) return ;
64
- ref . ontouchstart = ( e ) => {
65
- e . preventDefault ( ) ;
66
- }
67
- } } >
68
- < SelectGroup >
69
- < SelectItem value = "ascending" > Ascending (A to Z)</ SelectItem >
70
- < SelectItem value = "descending" > Descending (Z to A)</ SelectItem >
71
- < SelectItem value = "new" > Newest first</ SelectItem >
72
- < SelectItem value = "old" > Oldest first</ SelectItem >
73
- </ SelectGroup >
74
- </ SelectContent >
75
- </ Select >
57
+ < div className = "flex flex-col gap-4 md:flex-row items-center justify-evenly mt-6" >
58
+ < Select
59
+ onValueChange = { ( e ) => {
60
+ setSortBy ( e ) ;
61
+ } }
62
+ >
63
+ < SelectTrigger className = "max-w-[250px]" >
64
+ < SelectValue placeholder = "Sort by" />
65
+ </ SelectTrigger >
66
+ < SelectContent
67
+ ref = { ( ref ) => {
68
+ if ( ! ref ) return ;
69
+ ref . ontouchstart = ( e ) => {
70
+ e . preventDefault ( ) ;
71
+ } ;
72
+ } }
73
+ >
74
+ < SelectGroup >
75
+ < SelectItem value = "ascending" > Ascending (A to Z)</ SelectItem >
76
+ < SelectItem value = "descending" > Descending (Z to A)</ SelectItem >
77
+ < SelectItem value = "new" > Newest first</ SelectItem >
78
+ < SelectItem value = "old" > Oldest first</ SelectItem >
79
+ </ SelectGroup >
80
+ </ SelectContent >
81
+ </ Select >
82
+ < div className = "flex items-center space-x-2" >
83
+ < Switch id = "cohort 3" checked = { cohort3 } onCheckedChange = { ( e ) => setCohort3 ( e . valueOf ( ) ) } />
84
+ < Label htmlFor = "cohort-3" > Cohort 3 Only</ Label >
85
+ </ div >
86
+ </ div >
76
87
< ul className = "p-8 md:20 grid grid-cols-1 gap-x-6 gap-y-8 place-items-center lg:grid-cols-2 w-full" >
77
88
{ filteredTracks . map ( ( t ) => (
78
89
< li key = { t . id } className = "max-w-screen-md w-full" >
79
- < TrackCard track = { t } />
90
+ < TrackCard track = { t } />
80
91
</ li >
81
92
) ) }
82
93
</ ul >
0 commit comments