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 { 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>(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::( 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())) } } }