66 lines
1.9 KiB
Rust
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()))
|
|
}
|
|
}
|
|
}
|