@@ -4,7 +4,7 @@ use serde::Serialize;
44use web_sys:: { console, HtmlInputElement , InputEvent } ;
55use yew_hooks:: use_set;
66use yew_hooks:: use_async;
7- // use yew_custom_components::pagination::Pagination;
7+ use yew_custom_components:: pagination:: Pagination ;
88use yew_custom_components:: table:: { Options , Table } ;
99use yew_custom_components:: table:: types:: { ColumnBuilder , TableData } ;
1010use crate :: types:: mock_data:: Entry ;
@@ -254,7 +254,6 @@ pub fn home() -> Html {
254254 let library_search = ( * library_search_term) . as_ref ( ) . cloned ( ) ;
255255
256256 let page = use_state ( || 0usize ) ;
257- let current_page = ( * page) . clone ( ) ;
258257
259258 let selected_ids = use_set ( HashSet :: < i32 > :: new ( ) ) ;
260259 let sum = selected_ids. current ( ) . len ( ) ;
@@ -434,23 +433,16 @@ pub fn home() -> Html {
434433 } ;
435434
436435 let limit = 10 ;
437- let current_page = if filtered_data. is_empty ( ) {
438- 0
439- } else {
440- current_page. min ( ( filtered_data. len ( ) - 1 ) / limit)
441- } ;
442-
443- let start = current_page * limit;
444- let end = ( start + limit) . min ( filtered_data. len ( ) ) ;
445436
446- let paginated_data = if filtered_data. is_empty ( ) {
447- Vec :: new ( )
448- } else {
449- filtered_data [ start..end ] . to_vec ( )
450- } ;
437+ let total_rows = filtered_data. len ( ) ;
438+ let current_page = ( * page ) . min ( total_rows . saturating_sub ( 1 ) / limit ) ;
439+
440+ let start = current_page * limit ;
441+ let end = ( start + limit ) . min ( total_rows ) ;
451442
452- // let total = filtered_data.len().max(1) ;
443+ let page_rows = if total_rows == 0 { Vec :: new ( ) } else { filtered_data [ start..end ] . to_vec ( ) } ;
453444
445+
454446 let oninput_element_search = {
455447 let element_search_term = element_search_term. clone ( ) ;
456448 Callback :: from ( move |e : InputEvent | {
@@ -522,21 +514,21 @@ pub fn home() -> Html {
522514 } )
523515 } ;
524516
525- // let pagination_options = yew_custom_components::pagination::Options::default()
526- // .show_prev_next(true)
527- // .show_first_last(true)
528- // .list_classes(vec!(String::from("pagination")))
529- // .item_classes(vec!(String::from("page-item")))
530- // .link_classes(vec!(String::from("page-link")))
531- // .active_item_classes(vec!(String::from("active")))
532- // .disabled_item_classes(vec!(String::from("disabled")));
533-
534- // let handle_page = {
535- // let page = page.clone();
536- // Callback::from(move |new_page: usize| {
537- // page.set(new_page);
538- // })
539- // };
517+ let pagination_options = yew_custom_components:: pagination:: Options :: default ( )
518+ . show_prev_next ( true )
519+ . show_first_last ( true )
520+ . list_classes ( vec ! ( String :: from( "pagination" ) ) )
521+ . item_classes ( vec ! ( String :: from( "page-item" ) ) )
522+ . link_classes ( vec ! ( String :: from( "page-link" ) ) )
523+ . active_item_classes ( vec ! ( String :: from( "active" ) ) )
524+ . disabled_item_classes ( vec ! ( String :: from( "disabled" ) ) ) ;
525+
526+ let handle_page = {
527+ let page = page. clone ( ) ;
528+ Callback :: from ( move |new_page : usize | {
529+ page. set ( new_page) ;
530+ } )
531+ } ;
540532
541533 html ! (
542534 <>
@@ -642,30 +634,33 @@ pub fn home() -> Html {
642634 </button>
643635
644636 </div>
645-
637+ // First column
646638 <div class="d-flex mb-2" >
647639 <div class="flex-grow-1 p-2 input-group me-2" >
648640 <Table <TableLine >
649641 options={ options. clone( ) }
650- limit={ Some ( limit) }
651- page={ current_page}
652- // search={element_search.clone()}
653642 classes={ classes!( "table" , "table-hover" ) }
654643 columns={ columns. clone( ) }
655- data={ paginated_data }
644+ data={ page_rows . clone ( ) }
656645 orderable={ true }
657646 />
658- <h5>{ sum} { " / 41337" } </h5>
647+ <div class="d-flex justify-content-between align-items-center mt-2 w-100" >
648+ <h5 class="mb-0 align-self-center" >{ sum } { " / 41337" } </h5>
649+ <div class="my-auto" >
650+ <Pagination
651+ total={ total_rows}
652+ limit={ limit}
653+ max_pages={ 1 }
654+ options={ pagination_options. clone( ) }
655+ on_page={ Some ( handle_page) }
656+ />
657+ </div>
658+ </div>
659659 </div>
660+
661+ // Second column
660662 <div class="flex-grow-1 p-2 input-group" >
661663
662- // <Pagination
663- // total={total}
664- // limit={limit}
665- // max_pages={6}
666- // options={pagination_options}
667- // on_page={Some(handle_page)}
668- // />
669664 <div class="flex-grow-1 p-2 input-group me-2" >
670665 <PlotComponent
671666 selected_ids={ ( * selected_ids. current( ) ) . clone( ) }
0 commit comments