@@ -3,7 +3,8 @@ mod theme;
3
3
pub use theme:: TimePickerTheme ;
4
4
5
5
use crate :: {
6
- use_theme, Button , ButtonSize , ButtonVariant , Icon , Input , InputSuffix , SignalWatch , Theme ,
6
+ use_theme, Button , ButtonSize , ButtonVariant , Icon , Input , InputSuffix , Scrollbar , SignalWatch ,
7
+ Theme ,
7
8
} ;
8
9
use chrono:: { Local , NaiveTime , Timelike } ;
9
10
use leptos:: * ;
@@ -187,96 +188,99 @@ fn Panel(
187
188
>
188
189
<div class="thaw-time-picker-panel__time" >
189
190
<div class="thaw-time-picker-panel__time-hour" ref=hour_ref>
190
-
191
- { ( 0 ..24 )
192
- . map( |hour| {
193
- let comp_ref = ComponentRef :: <PanelTimeItemRef >:: default ( ) ;
194
- let on_click = move |_| {
195
- selected_time
196
- . update( move |time| {
197
- * time = if let Some ( time) = time {
198
- time. with_hour( hour)
199
- } else {
200
- NaiveTime :: from_hms_opt( hour, 0 , 0 )
201
- }
202
- } ) ;
203
- comp_ref. get_untracked( ) . unwrap( ) . scroll_into_view( ) ;
204
- } ;
205
- let is_selected = Memo :: new( move |_| {
206
- selected_time. get( ) . map_or( false , |v| v. hour( ) == hour)
207
- } ) ;
208
- view! {
209
- <PanelTimeItem
210
- value=hour
211
- on: click=on_click
212
- is_selected
213
- comp_ref
214
- />
215
- }
216
- } )
217
- . collect_view( ) }
191
+ <Scrollbar size=6 >
192
+ { ( 0 ..24 )
193
+ . map( |hour| {
194
+ let comp_ref = ComponentRef :: <PanelTimeItemRef >:: default ( ) ;
195
+ let on_click = move |_| {
196
+ selected_time
197
+ . update( move |time| {
198
+ * time = if let Some ( time) = time {
199
+ time. with_hour( hour)
200
+ } else {
201
+ NaiveTime :: from_hms_opt( hour, 0 , 0 )
202
+ }
203
+ } ) ;
204
+ comp_ref. get_untracked( ) . unwrap( ) . scroll_into_view( ) ;
205
+ } ;
206
+ let is_selected = Memo :: new( move |_| {
207
+ selected_time. get( ) . map_or( false , |v| v. hour( ) == hour)
208
+ } ) ;
209
+ view! {
210
+ <PanelTimeItem
211
+ value=hour
212
+ on: click=on_click
213
+ is_selected
214
+ comp_ref
215
+ />
216
+ }
217
+ } )
218
+ . collect_view( ) }
219
+ </Scrollbar >
218
220
<div class="thaw-time-picker-panel__time-padding" ></div>
219
221
</div>
220
222
<div class="thaw-time-picker-panel__time-minute" ref=minute_ref>
221
-
222
- { ( 0 ..60 )
223
- . map( |minute| {
224
- let comp_ref = ComponentRef :: <PanelTimeItemRef >:: default ( ) ;
225
- let on_click = move |_| {
226
- selected_time
227
- . update( move |time| {
228
- * time = if let Some ( time) = time {
229
- time. with_minute( minute)
230
- } else {
231
- NaiveTime :: from_hms_opt( now_time( ) . hour( ) , minute, 0 )
232
- }
233
- } ) ;
234
- comp_ref. get_untracked( ) . unwrap( ) . scroll_into_view( ) ;
235
- } ;
236
- let is_selected = Memo :: new( move |_| {
237
- selected_time. get( ) . map_or( false , |v| v. minute( ) == minute)
238
- } ) ;
239
- view! {
240
- <PanelTimeItem
241
- value=minute
242
- on: click=on_click
243
- is_selected
244
- comp_ref
245
- />
246
- }
247
- } )
223
+ < Scrollbar size= 6 >
224
+ { ( 0 ..60 )
225
+ . map( |minute| {
226
+ let comp_ref = ComponentRef :: <PanelTimeItemRef >:: default ( ) ;
227
+ let on_click = move |_| {
228
+ selected_time
229
+ . update( move |time| {
230
+ * time = if let Some ( time) = time {
231
+ time. with_minute( minute)
232
+ } else {
233
+ NaiveTime :: from_hms_opt( now_time( ) . hour( ) , minute, 0 )
234
+ }
235
+ } ) ;
236
+ comp_ref. get_untracked( ) . unwrap( ) . scroll_into_view( ) ;
237
+ } ;
238
+ let is_selected = Memo :: new( move |_| {
239
+ selected_time. get( ) . map_or( false , |v| v. minute( ) == minute)
240
+ } ) ;
241
+ view! {
242
+ <PanelTimeItem
243
+ value=minute
244
+ on: click=on_click
245
+ is_selected
246
+ comp_ref
247
+ />
248
+ }
249
+ } )
248
250
. collect_view( ) }
251
+ </Scrollbar >
249
252
<div class="thaw-time-picker-panel__time-padding" ></div>
250
253
</div>
251
254
<div class="thaw-time-picker-panel__time-second" ref=second_ref>
252
-
253
- { ( 0 ..60 )
254
- . map( |second| {
255
- let comp_ref = ComponentRef :: <PanelTimeItemRef >:: default ( ) ;
256
- let on_click = move |_| {
257
- selected_time
258
- . update( move |time| {
259
- * time = if let Some ( time) = time {
260
- time. with_second( second)
261
- } else {
262
- now_time( ) . with_second( second)
263
- }
264
- } ) ;
265
- comp_ref. get_untracked( ) . unwrap( ) . scroll_into_view( ) ;
266
- } ;
267
- let is_selected = Memo :: new( move |_| {
268
- selected_time. get( ) . map_or( false , |v| v. second( ) == second)
269
- } ) ;
270
- view! {
271
- <PanelTimeItem
272
- value=second
273
- on: click=on_click
274
- is_selected
275
- comp_ref
276
- />
277
- }
278
- } )
279
- . collect_view( ) }
255
+ <Scrollbar size=6 >
256
+ { ( 0 ..60 )
257
+ . map( |second| {
258
+ let comp_ref = ComponentRef :: <PanelTimeItemRef >:: default ( ) ;
259
+ let on_click = move |_| {
260
+ selected_time
261
+ . update( move |time| {
262
+ * time = if let Some ( time) = time {
263
+ time. with_second( second)
264
+ } else {
265
+ now_time( ) . with_second( second)
266
+ }
267
+ } ) ;
268
+ comp_ref. get_untracked( ) . unwrap( ) . scroll_into_view( ) ;
269
+ } ;
270
+ let is_selected = Memo :: new( move |_| {
271
+ selected_time. get( ) . map_or( false , |v| v. second( ) == second)
272
+ } ) ;
273
+ view! {
274
+ <PanelTimeItem
275
+ value=second
276
+ on: click=on_click
277
+ is_selected
278
+ comp_ref
279
+ />
280
+ }
281
+ } )
282
+ . collect_view( ) }
283
+ </Scrollbar >
280
284
<div class="thaw-time-picker-panel__time-padding" ></div>
281
285
</div>
282
286
</div>
0 commit comments