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

66 lines
1.9 KiB
Rust

use lan_party_core::{
edit::IntoEdit,
event::{Event, EventSpec, EventUpdate},
view::IntoView,
};
use log::debug;
use reqwasm::http::Method;
use sycamore::{futures::spawn_local_scoped, prelude::*};
use crate::{
components::{Block, Button},
util::api_request,
};
#[component]
pub fn EventsPage<'a, G: Html>(cx: Scope<'a>) -> View<G> {
let event_spec = create_signal(cx, EventSpec::default());
let event_update = create_signal(cx, EventUpdate::default());
let events = create_signal(cx, None);
let test_event = create_signal(cx, None);
spawn_local_scoped(cx, async move {
events.set(Some(
api_request::<_, Vec<Event>>(Method::GET, "/event", Option::<()>::None)
.await
.map(|inner| inner.unwrap())
.unwrap(),
));
test_event.set(Some(events.get().unwrap().get(0).unwrap().clone()));
debug!("{:#?}", test_event);
});
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);
let mut cloned = (*events).get().as_ref().clone();
cloned.unwrap().push(new_event.unwrap());
events.set(cloned);
});
};
view! { cx,
Block(title="Events".into()) {
(test_event.view(cx))
(events.view(cx))
}
Block(title="Create new event".into()) {
(event_spec.edit(cx))
Button(icon="mdi-check".into(), onclick=onadd)
}
br()
Block(title="Update an event".into()) {
(event_update.edit(cx))
Button(icon="mdi-check".into(), onclick=move |_| debug!("{:#?}", event_update.get()))
}
}
}