create a component that renders a div with the text "Hello, world!"
(cx: Scope)
| 37 | |
| 38 | // create a component that renders a div with the text "Hello, world!" |
| 39 | fn 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() |
nothing calls this directly
no test coverage detected