lan-party-backend/web/src/pages/events.rs

71 lines
2.0 KiB
Rust
Raw Normal View History

2022-09-12 09:49:16 +02:00
use lan_party_core::{
edit::IntoEdit,
2022-09-12 16:34:09 +02:00
event::{Event, EventSpec, EventUpdate},
view::IntoView,
2022-09-12 09:49:16 +02:00
};
use log::debug;
2022-09-12 16:34:09 +02:00
use reqwasm::http::Method;
use sycamore::{futures::spawn_local_scoped, prelude::*};
2022-09-05 20:16:13 +02:00
2022-09-12 16:34:09 +02:00
use crate::{
components::{Block, Button},
util::api_request,
};
2022-09-06 11:55:22 +02:00
#[component]
pub fn EventsPage<'a, G: Html>(cx: Scope<'a>) -> View<G> {
let event_spec = create_signal(cx, EventSpec::default());
2022-09-12 09:49:16 +02:00
let event_update = create_signal(cx, EventUpdate::default());
2022-09-06 11:55:22 +02:00
2022-09-12 18:03:34 +02:00
let events: &'a Signal<Vec<Event>> = create_signal(cx, Vec::<Event>::new());
2022-09-12 16:34:09 +02:00
spawn_local_scoped(cx, async move {
2022-09-12 18:03:34 +02:00
events.set(
2022-09-12 16:34:09 +02:00
api_request::<_, Vec<Event>>(Method::GET, "/event", Option::<()>::None)
.await
.map(|inner| inner.unwrap())
.unwrap(),
2022-09-12 18:03:34 +02:00
);
2022-09-12 16:34:09 +02:00
});
let onadd = move |_| {
spawn_local_scoped(cx, async move {
let new_event = api_request::<EventSpec, Event>(
Method::POST,
"/event",
Some((*event_spec).get().as_ref().clone()),
)
.await
.unwrap();
debug!("{:#?}", new_event);
2022-09-12 18:03:34 +02:00
events.modify().push(new_event.unwrap());
2022-09-12 16:34:09 +02:00
});
};
view! { cx,
2022-09-12 16:34:09 +02:00
Block(title="Events".into()) {
2022-09-12 18:03:34 +02:00
Keyed(
iterable=&events,
view=move |cx, event| {
let event = create_ref(cx, event);
view! { cx,
(event.view(cx))
br()
}
},
key=|event| (event.name.clone()),
)
2022-09-12 16:34:09 +02:00
}
2022-09-12 18:03:34 +02:00
br()
2022-09-09 13:01:30 +02:00
Block(title="Create new event".into()) {
2022-09-09 16:55:30 +02:00
(event_spec.edit(cx))
2022-09-12 16:34:09 +02:00
Button(icon="mdi-check".into(), onclick=onadd)
}
br()
Block(title="Update an event".into()) {
2022-09-12 09:49:16 +02:00
(event_update.edit(cx))
2022-09-12 16:34:09 +02:00
Button(icon="mdi-check".into(), onclick=move |_| debug!("{:#?}", event_update.get()))
}
2022-09-05 16:48:55 +02:00
}
}