use dioxus::prelude::*;
use freya_elements::elements as dioxus_elements;
#[derive(Props)]
pub struct TableHeadProps<'a> {
children: Element<'a>,
}
#[allow(non_snake_case)]
pub fn TableHead<'a>(cx: Scope<'a, TableHeadProps<'a>>) -> Element {
render!(
rect {
width: "100%",
&cx.props.children
}
)
}
#[derive(Props)]
pub struct TableBodyProps<'a> {
children: Element<'a>,
}
#[allow(non_snake_case)]
pub fn TableBody<'a>(cx: Scope<'a, TableBodyProps<'a>>) -> Element {
render!(
rect {
width: "100%",
&cx.props.children
}
)
}
#[derive(Props)]
pub struct TableRowProps<'a> {
children: Element<'a>,
#[props(default = false)]
alternate_colors: bool,
}
#[allow(non_snake_case)]
pub fn TableRow<'a>(cx: Scope<'a, TableRowProps<'a>>) -> Element {
let background = if cx.props.alternate_colors {
"rgb(240, 240, 240)"
} else {
"transparent"
};
render!(
rect {
direction: "horizontal",
width: "100%",
min_height: "35",
background: "{background}",
&cx.props.children
}
rect {
height: "1",
width: "100%",
background: "rgb(200, 200, 200)"
}
)
}
#[derive(Props)]
pub struct TableCellProps<'a> {
children: Element<'a>,
}
#[allow(non_snake_case)]
pub fn TableCell<'a>(cx: Scope<'a, TableCellProps<'a>>) -> Element {
let config = cx.consume_context::<TableConfig>().unwrap();
let width = 100.0 / config.columns as f32;
render!(
rect {
overflow: "clip",
padding: "5 25",
width: "{width}%",
display: "center",
height: "35",
align: "right",
&cx.props.children
}
)
}
#[derive(Props)]
pub struct TableProps<'a> {
columns: usize,
children: Element<'a>,
#[props(default = "auto".to_string(), into)]
height: String,
}
#[allow(non_snake_case)]
pub fn Table<'a>(cx: Scope<'a, TableProps<'a>>) -> Element {
cx.provide_context(TableConfig {
columns: cx.props.columns,
});
let height = &cx.props.height;
render!(
rect {
overflow: "clip",
background: "white",
corner_radius: "6",
shadow: "0 2 15 5 rgb(35, 35, 35, 70)",
height: "{height}",
&cx.props.children
}
)
}
#[derive(Clone)]
pub struct TableConfig {
columns: usize,
}