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}