fixed state management bug

This commit is contained in:
Danny Zou 2024-05-12 14:10:05 -07:00
parent 4d734ef594
commit f311994058
3 changed files with 13 additions and 5 deletions

View File

@ -2,9 +2,11 @@ use leptos::*;
use leptos_icons::*; use leptos_icons::*;
use leptos::leptos_dom::*; use leptos::leptos_dom::*;
use crate::api::playlists::create_playlist; use crate::api::playlists::create_playlist;
use crate::api::playlists::get_playlists;
use crate::models::Playlist;
#[component] #[component]
pub fn CreatePlayList(closer: WriteSignal<bool>) -> impl IntoView { pub fn CreatePlayList(closer: WriteSignal<bool>, set_playlists: WriteSignal<Vec<Playlist>>) -> impl IntoView {
let (playlist_name, set_playlist_name) = create_signal("".to_string()); let (playlist_name, set_playlist_name) = create_signal("".to_string());
@ -20,6 +22,13 @@ pub fn CreatePlayList(closer: WriteSignal<bool>) -> impl IntoView {
log!("Playlist created successfully!"); log!("Playlist created successfully!");
closer.update(|value| *value = false); closer.update(|value| *value = false);
} }
let playlists = get_playlists().await;
if let Err(err) = playlists {
// Handle the error here, e.g., log it or display to the user
log!("Error getting playlists: {:?}", err);
} else {
set_playlists.update(|value| *value = playlists.unwrap());
}
}) })
}; };

View File

@ -90,7 +90,7 @@ pub fn PlayListPopUp(playlist: Playlist, set_show_playlist: WriteSignal<bool>) -
</div> </div>
<ul class="songs"> <ul class="songs">
{ {
move || songs.get().iter().enumerate().map(|(index,song)| view! { move || songs.get().iter().enumerate().map(|(_index,song)| view! {
<PlaylistSong song=song.clone() playlist_id=playlist.id.clone() set_songs=set_songs /> <PlaylistSong song=song.clone() playlist_id=playlist.id.clone() set_songs=set_songs />
}).collect::<Vec<_>>() }).collect::<Vec<_>>()
} }

View File

@ -11,7 +11,6 @@ pub fn Playlists() -> impl IntoView {
let (playlists, set_playlists) = create_signal(vec![]); let (playlists, set_playlists) = create_signal(vec![]);
create_effect(move |_| { create_effect(move |_| {
spawn_local(async move { spawn_local(async move {
let playlists2 = get_playlists().await; let playlists2 = get_playlists().await;
if let Err(err) = playlists2 { if let Err(err) = playlists2 {
@ -38,12 +37,12 @@ pub fn Playlists() -> impl IntoView {
when=move || create_playlist_open() when=move || create_playlist_open()
fallback=move || view! {<div></div>} fallback=move || view! {<div></div>}
> >
<CreatePlayList closer=set_create_playlist_open/> <CreatePlayList closer=set_create_playlist_open set_playlists=set_playlists/>
</Show> </Show>
<ul class="playlists"> <ul class="playlists">
{ {
move || playlists.get().iter().enumerate().map(|(index,playlist)| view! { move || playlists.get().iter().enumerate().map(|(_index,playlist)| view! {
<Playlist playlist=playlist.clone() /> <Playlist playlist=playlist.clone() />
}).collect::<Vec<_>>() }).collect::<Vec<_>>()
} }