1
1
'use client' ;
2
2
3
3
import React from 'react' ;
4
- import { Form , InputNumber , Row , Col , Select , Input , Switch , Alert , Typography } from 'antd' ;
4
+ import { Form , InputNumber , Row , Col , Select , Input , Switch , Alert , Typography , Slider } from 'antd' ;
5
5
import { TENSION_KILTER_GRADES } from '@/app/lib/board-data' ;
6
6
import { useUISearchParams } from '@/app/components/queue-control/ui-searchparams-provider' ;
7
7
import SearchClimbNameInput from './search-climb-name-input' ;
@@ -15,14 +15,6 @@ const BasicSearchForm: React.FC = () => {
15
15
const userId = user ?. id ;
16
16
const grades = TENSION_KILTER_GRADES ;
17
17
18
- const handleGradeChange = ( type : 'min' | 'max' , value : number | undefined ) => {
19
- if ( type === 'min' ) {
20
- updateFilters ( { minGrade : value } ) ;
21
- } else {
22
- updateFilters ( { maxGrade : value } ) ;
23
- }
24
- } ;
25
-
26
18
const renderLogbookSection = ( ) => {
27
19
if ( ! userId ) {
28
20
return (
@@ -41,27 +33,31 @@ const BasicSearchForm: React.FC = () => {
41
33
< >
42
34
< Form . Item label = "Climbs I have Done" valuePropName = "checked" >
43
35
< Switch
36
+ style = { { float : 'right' } }
44
37
checked = { uiSearchParams . showDone }
45
38
onChange = { ( checked ) => updateFilters ( { showDone : checked } ) }
46
39
/>
47
40
</ Form . Item >
48
41
49
42
< Form . Item label = "Climbs I have Attempted" valuePropName = "checked" >
50
43
< Switch
44
+ style = { { float : 'right' } }
51
45
checked = { uiSearchParams . showAttempted }
52
46
onChange = { ( checked ) => updateFilters ( { showAttempted : checked } ) }
53
47
/>
54
48
</ Form . Item >
55
49
56
50
< Form . Item label = "Climbs I have Not Attempted" valuePropName = "checked" >
57
51
< Switch
52
+ style = { { float : 'right' } }
58
53
checked = { uiSearchParams . showNotAttempted }
59
54
onChange = { ( checked ) => updateFilters ( { showNotAttempted : checked } ) }
60
55
/>
61
56
</ Form . Item >
62
57
63
58
< Form . Item label = "Climbs I Liked" valuePropName = "checked" >
64
59
< Switch
60
+ style = { { float : 'right' } }
65
61
checked = { uiSearchParams . showOnlyLiked }
66
62
onChange = { ( checked ) => updateFilters ( { showOnlyLiked : checked } ) }
67
63
/>
@@ -71,57 +67,37 @@ const BasicSearchForm: React.FC = () => {
71
67
} ;
72
68
73
69
return (
74
- < Form labelCol = { { span : 8 } } wrapperCol = { { span : 16 } } >
70
+ < Form layout = "horizontal" labelAlign = "left" labelCol = { { span : 14 } } wrapperCol = { { span : 10 } } >
75
71
< Form . Item label = "Climb Name" >
76
72
< SearchClimbNameInput />
77
73
</ Form . Item >
78
74
79
75
< Form . Item label = "Grade Range" >
80
- < Row gutter = { 8 } >
81
- < Col span = { 12 } >
82
- < Form . Item label = "Min" noStyle >
83
- < Select
84
- value = { uiSearchParams . minGrade || 0 }
85
- defaultValue = { 0 }
86
- onChange = { ( value ) => handleGradeChange ( 'min' , value ) }
87
- style = { { width : '100%' } }
88
- >
89
- < Select . Option value = { 0 } > Any</ Select . Option >
90
- { grades . map ( ( grade ) => (
91
- < Select . Option key = { grade . difficulty_id } value = { grade . difficulty_id } >
92
- { grade . difficulty_name }
93
- </ Select . Option >
94
- ) ) }
95
- </ Select >
96
- </ Form . Item >
97
- </ Col >
98
- < Col span = { 12 } >
99
- < Form . Item label = "Max" noStyle >
100
- < Select
101
- value = { uiSearchParams . maxGrade || 0 }
102
- defaultValue = { 0 }
103
- onChange = { ( value ) => handleGradeChange ( 'max' , value ) }
104
- style = { { width : '100%' } }
105
- >
106
- < Select . Option value = { 0 } > Any</ Select . Option >
107
- { grades . map ( ( grade ) => (
108
- < Select . Option key = { grade . difficulty_id } value = { grade . difficulty_id } >
109
- { grade . difficulty_name }
110
- </ Select . Option >
111
- ) ) }
112
- </ Select >
113
- </ Form . Item >
114
- </ Col >
115
- </ Row >
76
+ < Slider
77
+ range
78
+ min = { grades [ 0 ] . difficulty_id }
79
+ max = { grades [ grades . length - 1 ] . difficulty_id }
80
+ value = { [ uiSearchParams . minGrade , uiSearchParams . maxGrade ] }
81
+ marks = { {
82
+ [ uiSearchParams . minGrade ] : {
83
+ style : { transform : 'translate(-5px, 0px)' } ,
84
+ label : grades . find ( ( { difficulty_id } ) => difficulty_id === uiSearchParams . minGrade ) ?. difficulty_name ,
85
+ } ,
86
+ [ uiSearchParams . maxGrade ] : {
87
+ style : { transform : 'translate(-5px, -30px)' } ,
88
+ label : grades . find ( ( { difficulty_id } ) => difficulty_id === uiSearchParams . maxGrade ) ?. difficulty_name ,
89
+ } ,
90
+ } }
91
+ onChange = { ( value ) => updateFilters ( { minGrade : value [ 0 ] , maxGrade : value [ 1 ] } ) }
92
+ />
116
93
</ Form . Item >
117
94
118
95
< Form . Item label = "Min Ascents" >
119
96
< InputNumber
120
97
min = { 1 }
121
98
value = { uiSearchParams . minAscents }
122
- onChange = { ( value ) => updateFilters ( { minAscents : value || undefined } ) }
99
+ onChange = { ( value ) => updateFilters ( { minAscents : value || 10 } ) }
123
100
style = { { width : '100%' } }
124
- placeholder = "Any"
125
101
/>
126
102
</ Form . Item >
127
103
@@ -158,30 +134,26 @@ const BasicSearchForm: React.FC = () => {
158
134
max = { 3.0 }
159
135
step = { 0.1 }
160
136
value = { uiSearchParams . minRating }
161
- onChange = { ( value ) => updateFilters ( { minRating : value || undefined } ) }
137
+ onChange = { ( value ) => updateFilters ( { minRating : value || 1 } ) }
162
138
style = { { width : '100%' } }
163
- placeholder = "Any"
164
139
/>
165
140
</ Form . Item >
166
141
167
- < Form . Item label = "Classics Only" >
168
- < Select
169
- value = { uiSearchParams . onlyClassics }
170
- onChange = { ( value ) => updateFilters ( { onlyClassics : value } ) }
171
- style = { { width : '100%' } }
172
- >
173
- < Select . Option value = "0" > No</ Select . Option >
174
- < Select . Option value = "1" > Yes</ Select . Option >
175
- </ Select >
142
+ < Form . Item label = "Classics Only" valuePropName = "checked" >
143
+ < Switch
144
+ style = { { float : 'right' } }
145
+ checked = { uiSearchParams . onlyClassics }
146
+ onChange = { ( checked ) => updateFilters ( { onlyClassics : checked } ) }
147
+ />
176
148
</ Form . Item >
177
149
178
150
< Form . Item label = "Grade Accuracy" >
179
151
< Select
180
152
value = { uiSearchParams . gradeAccuracy }
181
- onChange = { ( value ) => updateFilters ( { gradeAccuracy : value || undefined } ) }
153
+ onChange = { ( value ) => updateFilters ( { gradeAccuracy : value } ) }
182
154
style = { { width : '100%' } }
183
155
>
184
- < Select . Option value = { undefined } > Any</ Select . Option >
156
+ < Select . Option value = { 1 } > Any</ Select . Option >
185
157
< Select . Option value = { 0.2 } > Somewhat Accurate (<0.2)</ Select . Option >
186
158
< Select . Option value = { 0.1 } > Very Accurate (<0.1)</ Select . Option >
187
159
< Select . Option value = { 0.05 } > Extremely Accurate (<0.05)</ Select . Option >
@@ -200,6 +172,7 @@ const BasicSearchForm: React.FC = () => {
200
172
201
173
< Form . Item label = "Only Climbs with Beta Videos" valuePropName = "checked" >
202
174
< Switch
175
+ style = { { float : 'right' } }
203
176
checked = { uiSearchParams . onlyWithBeta }
204
177
onChange = { ( checked ) => updateFilters ( { onlyWithBeta : checked } ) }
205
178
/>
@@ -211,13 +184,15 @@ const BasicSearchForm: React.FC = () => {
211
184
212
185
< Form . Item label = "Boulders" valuePropName = "checked" >
213
186
< Switch
187
+ style = { { float : 'right' } }
214
188
checked = { uiSearchParams . showBoulders }
215
189
onChange = { ( checked ) => updateFilters ( { showBoulders : checked } ) }
216
190
/>
217
191
</ Form . Item >
218
192
219
193
< Form . Item label = "Routes" valuePropName = "checked" >
220
194
< Switch
195
+ style = { { float : 'right' } }
221
196
checked = { uiSearchParams . showRoutes }
222
197
onChange = { ( checked ) => updateFilters ( { showRoutes : checked } ) }
223
198
/>
@@ -229,20 +204,23 @@ const BasicSearchForm: React.FC = () => {
229
204
230
205
< Form . Item label = "Established" valuePropName = "checked" >
231
206
< Switch
207
+ style = { { float : 'right' } }
232
208
checked = { uiSearchParams . showEstablished }
233
209
onChange = { ( checked ) => updateFilters ( { showEstablished : checked } ) }
234
210
/>
235
211
</ Form . Item >
236
212
237
213
< Form . Item label = "Open Projects" valuePropName = "checked" >
238
214
< Switch
215
+ style = { { float : 'right' } }
239
216
checked = { uiSearchParams . showProjects }
240
217
onChange = { ( checked ) => updateFilters ( { showProjects : checked } ) }
241
218
/>
242
219
</ Form . Item >
243
220
244
221
< Form . Item label = "Drafts" valuePropName = "checked" >
245
222
< Switch
223
+ style = { { float : 'right' } }
246
224
checked = { uiSearchParams . showDrafts }
247
225
onChange = { ( checked ) => updateFilters ( { showDrafts : checked } ) }
248
226
/>
@@ -254,13 +232,15 @@ const BasicSearchForm: React.FC = () => {
254
232
255
233
< Form . Item label = "Only Tall Climbs" valuePropName = "checked" >
256
234
< Switch
235
+ style = { { float : 'right' } }
257
236
checked = { uiSearchParams . onlyTall }
258
237
onChange = { ( checked ) => updateFilters ( { onlyTall : checked } ) }
259
238
/>
260
239
</ Form . Item >
261
240
262
241
< Form . Item label = "Only Side Climbs" valuePropName = "checked" >
263
242
< Switch
243
+ style = { { float : 'right' } }
264
244
checked = { uiSearchParams . onlySide }
265
245
onChange = { ( checked ) => updateFilters ( { onlySide : checked } ) }
266
246
/>
0 commit comments