Skip to content

Commit 3a28add

Browse files
authored
Merge pull request #17 from Allentro/pagination
Including pagination into the home page.
2 parents dbf45c0 + 8008e2f commit 3a28add

File tree

1 file changed

+39
-44
lines changed

1 file changed

+39
-44
lines changed

src/sauce/home.rs

Lines changed: 39 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use serde::Serialize;
44
use web_sys::{console, HtmlInputElement, InputEvent};
55
use yew_hooks::use_set;
66
use yew_hooks::use_async;
7-
// use yew_custom_components::pagination::Pagination;
7+
use yew_custom_components::pagination::Pagination;
88
use yew_custom_components::table::{Options, Table};
99
use yew_custom_components::table::types::{ColumnBuilder, TableData};
1010
use 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

Comments
 (0)