leptos_struct_table/components/
thead.rs1use crate::wrapper_render_fn;
2use crate::{ColumnSort, TableHeadEvent};
3use leptos::*;
4
5wrapper_render_fn!(
6 DefaultTableHeadRenderer,
8 thead,
9);
10
11wrapper_render_fn!(
12 DefaultTableHeadRowRenderer,
14 tr,
15);
16
17#[component]
24pub fn DefaultTableHeaderCellRenderer<F>(
25 #[prop(into)]
27 class: Signal<String>,
28 #[prop(into)]
30 inner_class: String,
31 index: usize,
33 #[prop(into)]
35 sort_priority: Signal<Option<usize>>,
36 #[prop(into)]
38 sort_direction: Signal<ColumnSort>,
39 on_click: F,
41 children: Children,
42) -> impl IntoView
43where
44 F: Fn(TableHeadEvent) + 'static,
45{
46 let style = default_th_sorting_style(sort_priority, sort_direction);
47
48 view! {
49 <th class=class
50 on:click=move |mouse_event| on_click(TableHeadEvent {
51 index,
52 mouse_event,
53 })
54 style=style
55 >
56 <span class=inner_class>
57 {children()}
58 </span>
59 </th>
60 }
61}
62
63pub fn default_th_sorting_style(
67 sort_priority: Signal<Option<usize>>,
68 sort_direction: Signal<ColumnSort>,
69) -> Signal<String> {
70 Signal::derive(move || {
71 let sort = match sort_direction.get() {
72 ColumnSort::Ascending => "--sort-icon: '▲';",
73 ColumnSort::Descending => "--sort-icon: '▼';",
74 ColumnSort::None => "--sort-icon: '';",
75 };
76
77 let priority = match sort_priority.get() {
78 Some(priority) => format!("--sort-priority: '{}';", priority + 1),
79 None => "--sort-priority: '';".to_string(),
80 };
81
82 format!("{} {}", sort, &priority)
83 })
84}