table_rs/yew/
types.rs

1use std::collections::HashMap;
2use yew::prelude::*;
3
4#[derive(Properties, PartialEq, Clone, Default)]
5pub struct Column {
6    pub id: &'static str,
7    pub header: &'static str,
8    pub accessor: Callback<()>,
9    pub sortable: bool,
10    #[prop_or(100)]
11    pub min_width: u32,
12    #[prop_or_default]
13    pub class: Option<&'static str>,
14    #[prop_or_default]
15    pub style: Option<&'static str>,
16}
17
18#[derive(Clone, PartialEq)]
19pub enum SortOrder {
20    Asc,
21    Desc,
22}
23
24#[derive(Properties, PartialEq, Clone, Default)]
25pub struct TableClasses {
26    #[prop_or("table-container")]
27    pub container: &'static str,
28    #[prop_or("table")]
29    pub table: &'static str,
30    #[prop_or("thead")]
31    pub thead: &'static str,
32    #[prop_or("tbody")]
33    pub tbody: &'static str,
34    #[prop_or("pagination-controls")]
35    pub pagination: &'static str,
36    #[prop_or("search-input")]
37    pub search_input: &'static str,
38}
39
40#[derive(Properties, PartialEq)]
41pub struct TableProps {
42    pub data: Vec<HashMap<&'static str, String>>,
43    pub columns: Vec<Column>,
44    #[prop_or(10)]
45    pub page_size: usize,
46    #[prop_or(false)]
47    pub loading: bool,
48    #[prop_or_default]
49    pub classes: TableClasses,
50    #[prop_or_default]
51    pub styles: HashMap<&'static str, &'static str>,
52    #[prop_or(false)]
53    pub paginate: bool,
54    #[prop_or(false)]
55    pub search: bool,
56}
57
58#[derive(Properties, PartialEq)]
59pub struct HeaderProps {
60    pub columns: Vec<Column>,
61    pub sort_column: UseStateHandle<Option<&'static str>>,
62    pub sort_order: UseStateHandle<SortOrder>,
63    pub on_sort_column: Callback<&'static str>,
64    pub classes: TableClasses,
65}
66
67#[derive(Properties, PartialEq)]
68pub struct TableHeaderProps {
69    pub columns: Vec<Column>,
70    pub sort_column: UseStateHandle<Option<&'static str>>,
71    pub sort_order: UseStateHandle<SortOrder>,
72    pub on_sort_column: Callback<&'static str>,
73    pub classes: TableClasses,
74}
75
76#[derive(Properties, PartialEq)]
77pub struct PaginationControlsProps {
78    pub page: UseStateHandle<usize>,
79    pub total_pages: usize,
80}