Files
contextswitch/web/src/lib.rs
2022-05-09 12:19:54 +02:00

69 lines
2.4 KiB
Rust

use components::tasks_list::TasksList;
use contextswitch::Task;
use reqwasm::http::Request;
use uikit_rs as uk;
use wasm_bindgen::prelude::*;
use yew::prelude::*;
mod components;
#[wasm_bindgen(module = "/js/api.js")]
extern "C" {
fn get_api_base_url() -> String;
}
#[function_component(App)]
pub fn app() -> Html {
let tasks = use_state(Vec::new);
{
let tasks = tasks.clone();
use_effect_with_deps(
move |_| {
wasm_bindgen_futures::spawn_local(async move {
let fetched_tasks: Vec<Task> =
Request::get(&format!("{}/tasks?filter=task", get_api_base_url()))
.send()
.await
.unwrap() // TODO
.json()
.await
.unwrap(); // TODO
tasks.set(fetched_tasks);
});
|| ()
},
(),
);
}
let selected_task = use_state(|| None);
let on_task_select = {
let selected_task = selected_task.clone();
Callback::from(move |task: Option<Task>| {
selected_task.set(task);
})
};
html! {
<uk::Section style={uk::SectionStyle::Default}>
<uk::Container size={uk::ContainerSize::Small}>
<uk::Filter target=".status-filter"
filter_width={uk::Width::_Expand}
filter_component={uk::UIKitComponent::SubNav}
filter_class={"uk-subnav-pill"}
filters={vec![uk::FilterData { class: "".to_string(), label: "all".to_string() },
uk::FilterData { class: ".task-status-pending".to_string(), label: "pending".to_string() },
uk::FilterData { class: ".task-status-completed".to_string(), label: "completed".to_string() }]}>
<uk::Grid gap_size={uk::GridGapSize::Small}
margin={vec![uk::Margin::Default]}
height_match={true}
class={"status-filter"}>
<TasksList tasks={(*tasks).clone()}
selected_task={(*selected_task).clone()}
on_task_select={on_task_select} />
</uk::Grid>
</uk::Filter>
</uk::Container>
</uk::Section>
}
}