66 lines
1.4 KiB
Rust
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>
|
|
}
|
|
}
|
|
}
|