wrbapp/src/components/admin/members.rs

71 lines
2.1 KiB
Rust

pub mod migration;
use dioxus::prelude::*;
use crate::util::model::member::Member;
pub fn Members() -> Element {
let members = use_resource(fetch_members);
rsx! {
div {
class: "flex justify-center",
div {
class: "max-w-4xl w-full",
h2 { class: "font-bold text-lg", "Leden" },
match &*members.read_unchecked() {
Some(Ok(res)) => rsx! {
div {
class: "overflow-x-auto",
table {
class: "table table-zebra table-pin-rows",
thead {
tr {
th { "Relatiecode" }
th { "Naam" }
th { "Registratiecode" }
}
}
tbody {
for member in res {
MemberRow { member: member.clone() }
}
}
}
}
},
Some(Err(_)) => rsx! { div { "Error while loading members" } },
None => rsx! { div { "Loading..." } },
}
}
}
}
}
#[derive(Props, Clone, PartialEq)]
struct MemberRowProps {
member: Member,
}
fn MemberRow(props: MemberRowProps) -> Element {
let registration_token = props
.member
.registration_token
.unwrap_or("None".to_string());
rsx! {
tr {
class: "hover hover:cursor-pointer",
th { "{props.member.id}" }
td { "{props.member.name.full}" }
td { "{registration_token} {props.member.hours:?}" }
}
}
}
#[server]
async fn fetch_members() -> Result<Vec<Member>, ServerFnError> {
let members = Member::fetch_all().await?;
Ok(members)
}