MCPcopy Create free account
hub / github.com/BcnRust/devbcn-workshop / App

Function App

front/src/main.rs:39–156  ·  view source on GitHub ↗

create a component that renders a div with the text "Hello, world!"

(cx: Scope)

Source from the content-addressed store, hash-verified

37
38// create a component that renders a div with the text "Hello, world!"
39fn App(cx: Scope) -> Element {
40 use_shared_state_provider(cx, || FilmModalVisibility(false));
41 let is_modal_visible = use_shared_state::<FilmModalVisibility>(cx).unwrap();
42 let films = use_state::<Option<Vec<Film>>>(cx, || None);
43 let selected_film = use_state::<Option<Film>>(cx, || None);
44 let force_get_films = use_state(cx, || ());
45
46 {
47 let films = films.clone();
48 use_effect(cx, force_get_films, |_| async move {
49 let existing_films = get_films().await;
50 if existing_films.is_empty() {
51 films.set(None);
52 } else {
53 films.set(Some(existing_films));
54 }
55 });
56 }
57
58 let delete_film = move |filmId| {
59 let force_get_films = force_get_films.clone();
60 cx.spawn({
61 async move {
62 let response = reqwest::Client::new()
63 .delete(&format!("{}/{}", &films_endpoint(), filmId))
64 .send()
65 .await;
66 match response {
67 Ok(_data) => {
68 log::info!("Film deleted");
69 force_get_films.set(());
70 }
71 Err(err) => {
72 log::info!("Error deleting film: {:?}", err);
73 }
74 }
75 }
76 });
77 };
78
79 let create_or_update_film = move |film: Film| {
80 let force_get_films = force_get_films.clone();
81 let current_selected_film = selected_film.clone();
82 let is_modal_visible = is_modal_visible.clone();
83
84 cx.spawn({
85 async move {
86 let response = if current_selected_film.get().is_some() {
87 reqwest::Client::new()
88 .put(&films_endpoint())
89 .json(&film)
90 .send()
91 .await
92 } else {
93 reqwest::Client::new()
94 .post(&films_endpoint())
95 .json(&film)
96 .send()

Callers

nothing calls this directly

Calls 7

FilmModalVisibilityClass · 0.85
get_filmsFunction · 0.85
films_endpointFunction · 0.85
setMethod · 0.45
deleteMethod · 0.45
getMethod · 0.45
renderMethod · 0.45

Tested by

no test coverage detected