@@ -22,6 +22,7 @@ import { Checkbox } from "@/components/ui/checkbox";
22
22
import { useState } from "react" ;
23
23
import { cn } from "@/lib/utils" ;
24
24
import { CaretDownIcon } from "@radix-ui/react-icons" ;
25
+ import { RadioGroup , RadioGroupItem } from "@/components/ui/radio-group" ;
25
26
26
27
interface MatchConfigurationPanelProps {
27
28
difficulties : Difficulty [ ] ;
@@ -45,14 +46,6 @@ export default function ConfigurationPanel({
45
46
handleFindMatch,
46
47
} = useFindMatchContext ( ) ;
47
48
48
- const handleDifficultyCheckboxChange = ( text : Difficulty ) => {
49
- if ( difficulties . includes ( text ) ) {
50
- setDifficulty ( difficulties . filter ( ( item ) => item !== text ) ) ;
51
- } else {
52
- setDifficulty ( [ ...difficulties , text ] ) ;
53
- }
54
- } ;
55
-
56
49
const handleTopicCheckboxChange = ( text : Category ) => {
57
50
if ( topics . includes ( text ) ) {
58
51
setTopics ( topics . filter ( ( item ) => item !== text ) ) ;
@@ -87,7 +80,7 @@ export default function ConfigurationPanel({
87
80
variant = { collapseDifficulties ? "soft" : "outline" }
88
81
>
89
82
< div className = "flex flex-row justify-between w-full" >
90
- < span > Select difficulties </ span >
83
+ < span > Select difficulty </ span >
91
84
< CaretDownIcon
92
85
className = { cn (
93
86
"w-6 h-6" ,
@@ -100,7 +93,7 @@ export default function ConfigurationPanel({
100
93
< div
101
94
ref = { difficultyRef }
102
95
className = { cn (
103
- "grid grid-cols-2 gap-4 z-0 opacity-100 transition-all duration-500" ,
96
+ "z-0 opacity-100 transition-all duration-500" ,
104
97
collapseDifficulties && `-z-10 opacity-0`
105
98
) }
106
99
style = { {
@@ -109,40 +102,38 @@ export default function ConfigurationPanel({
109
102
} px`,
110
103
} }
111
104
>
112
- < div className = "flex items-center col-span-2 space-x-2" >
113
- < Checkbox
114
- id = "All"
115
- checked = { difficulties . length === difficultyOptions . length }
116
- onCheckedChange = { ( ) =>
117
- difficulties . length !== difficultyOptions . length
118
- ? setDifficulty ( [ ...difficultyOptions ] )
119
- : setDifficulty ( [ ] )
120
- }
121
- />
122
- < label
123
- htmlFor = "All"
124
- className = "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
125
- >
126
- Select All
127
- </ label >
128
- </ div >
129
- { difficultyOptions . map ( ( difficulty , index ) => (
130
- < div key = { index } className = "flex items-center space-x-2" >
131
- < Checkbox
132
- id = { difficulty }
133
- checked = { difficulties . includes ( difficulty ) }
134
- onCheckedChange = { ( ) =>
135
- handleDifficultyCheckboxChange ( difficulty )
136
- }
137
- />
138
- < label
139
- htmlFor = { difficulty }
140
- className = "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
141
- >
142
- { difficulty }
143
- </ label >
105
+ < RadioGroup
106
+ value = { difficulties }
107
+ onValueChange = { ( selectedValue : Difficulty ) =>
108
+ setDifficulty ( selectedValue )
109
+ }
110
+ className = "flex w-full"
111
+ >
112
+ < div className = "flex flex-row justify-start w-full gap-12" >
113
+ { difficultyOptions . map ( ( difficultyOption ) => (
114
+ < div
115
+ key = { difficultyOption }
116
+ className = "flex flex-row items-center gap-2"
117
+ >
118
+ < RadioGroupItem
119
+ value = { difficultyOption }
120
+ id = { difficultyOption }
121
+ className = "flex items-center space-x-2"
122
+ >
123
+ < span className = "text-sm font-medium leading-none" >
124
+ { difficultyOption }
125
+ </ span >
126
+ </ RadioGroupItem >
127
+ < label
128
+ htmlFor = { difficultyOption }
129
+ className = "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
130
+ >
131
+ { difficultyOption }
132
+ </ label >
133
+ </ div >
134
+ ) ) }
144
135
</ div >
145
- ) ) }
136
+ </ RadioGroup >
146
137
</ div >
147
138
< Button
148
139
onClick = { ( ) => setCollapseTopics ( ! collapseTopics ) }
0 commit comments