use graphql_client::{GraphQLQuery, Response}; use leptos::*; use crate::features::navbar_projects::gen::queries::get_projects_list_view::{ ResponseData, Variables, }; use crate::features::navbar_projects::gen::queries::GetProjectsListView; use super::gen::queries::get_projects_list_view::GetProjectsListViewGetProjects; pub async fn get_projects_list() -> anyhow::Result> { let request_body = GetProjectsListView::build_query(Variables {}); let payload = serde_json::to_string(&request_body)?; let res = reqwasm::http::Request::post("http://localhost:3001/graphql") .credentials(reqwasm::http::RequestCredentials::Include) .body(payload) .send() .await?; let response_body: Response = res.json().await?; Ok(response_body .data .ok_or(anyhow::anyhow!("failed to get projects list"))? .get_projects) } #[component] pub fn NavbarProjectsView( projects: Resource<(), Vec>, ) -> impl IntoView { let projects_view = move || { projects.with(|projects| { if projects.is_none() { return Vec::new() } let projects = projects.as_ref().unwrap(); if projects.is_empty() { return vec![view! {
"No projects"
}.into_any()]; } projects .into_iter() .map(|project| { view! {
{&project.name}
}.into_any() }) .collect::>() }) }; view! {
{projects_view}
} } #[component] pub fn NavbarProjects() -> impl IntoView { let projects = create_local_resource(|| (), |_| async { get_projects_list().await.unwrap() }); view! { } }