table_rs/yew/
controls.rs

1use crate::yew::types::PaginationControlsProps;
2use yew::prelude::*;
3
4#[function_component(PaginationControls)]
5pub fn pagination_controls(props: &PaginationControlsProps) -> Html {
6    let PaginationControlsProps {
7        page,
8        total_pages,
9        classes,
10        texts,
11    } = props;
12    let page_val = **page;
13
14    let on_prev = {
15        let page = page.clone();
16        Callback::from(move |_| {
17            if *page > 0 {
18                page.set(*page - 1);
19            }
20        })
21    };
22
23    let on_next = {
24        let page = page.clone();
25        Callback::from(move |_| {
26            page.set(*page + 1);
27        })
28    };
29
30    html! {
31        <div class={classes.pagination}>
32            <button class={classes.pagination_button} onclick={on_prev} disabled={page_val == 0}>
33                { texts.previous_button }
34            </button>
35            <span>
36                { texts.page_indicator.replace("{current}", &(page_val + 1).to_string()).replace("{total}", &total_pages.to_string()) }
37            </span>
38            <button
39                class={classes.pagination_button}
40                onclick={on_next}
41                disabled={page_val + 1 >= *total_pages}
42            >
43                { texts.next_button }
44            </button>
45        </div>
46    }
47}