lan-party-backend/web/src/components/event.rs

66 lines
1.4 KiB
Rust

use lan_party_core::event::*;
use yew::prelude::*;
#[derive(Debug, Clone, Properties, PartialEq)]
pub struct BlockProps {
children: Children,
}
#[function_component(Block)]
pub fn block(props: &BlockProps) -> Html {
html! {
<div class="px-3 py-3 rounded-lg border-solid border-gray-800 border-2 my-3">
{for props.children.iter()}
</div>
}
}
pub trait RenderEvent {
fn view(&self) -> Html;
}
impl RenderEvent for String {
fn view(&self) -> Html {
html! { self }
}
}
impl RenderEvent for bool {
fn view(&self) -> Html {
html! {
<input type="checkbox" value={self.to_string()} disabled={true} />
}
}
}
impl<T: RenderEvent> RenderEvent for Vec<T> {
fn view(&self) -> Html {
html! {
self.iter().map(|x| x.view()).collect::<Html>()
}
}
}
impl<T: RenderEvent> RenderEvent for &[T] {
fn view(&self) -> Html {
html! {
self.iter().map(|x| x.view()).collect::<Html>()
}
}
}
impl RenderEvent for lan_party_core::event::Event {
fn view(&self) -> Html {
html! {
<Block>
{ "Name: " }
{ self.name.view() }<br />
{ "Description: " }
{ self.description.view() }<br />
{ "Concluded: " }
{ self.concluded.view() }<br />
</Block>
}
}
}