Page Title Updates on Playing Song

This commit is contained in:
Aidan Westphal 2024-10-04 23:19:07 +00:00
parent 20a3c0c7df
commit 2bb9b3bdd7
2 changed files with 19 additions and 1 deletions

View File

@ -1,4 +1,5 @@
use crate::playbar::PlayBar; use crate::playbar::PlayBar;
use crate::playbar::CustomTitle;
use crate::playstatus::PlayStatus; use crate::playstatus::PlayStatus;
use crate::queue::Queue; use crate::queue::Queue;
use leptos::*; use leptos::*;
@ -24,7 +25,7 @@ pub fn App() -> impl IntoView {
<Stylesheet id="leptos" href="/pkg/libretunes.css"/> <Stylesheet id="leptos" href="/pkg/libretunes.css"/>
// sets the document title // sets the document title
<Title text="LibreTunes"/> <CustomTitle play_status=play_status/>
// content for this welcome page // content for this welcome page
<Router fallback=|| { <Router fallback=|| {

View File

@ -5,6 +5,7 @@ use crate::api::songs;
use leptos::ev::MouseEvent; use leptos::ev::MouseEvent;
use leptos::html::{Audio, Div}; use leptos::html::{Audio, Div};
use leptos::leptos_dom::*; use leptos::leptos_dom::*;
use leptos_meta::Title;
use leptos::*; use leptos::*;
use leptos_icons::*; use leptos_icons::*;
use leptos_use::{utils::Pausable, use_interval_fn}; use leptos_use::{utils::Pausable, use_interval_fn};
@ -460,6 +461,22 @@ fn QueueToggle(status: RwSignal<PlayStatus>) -> impl IntoView {
} }
} }
/// Renders the title of the page based on the currently playing song
#[component]
pub fn CustomTitle(play_status: RwSignal<PlayStatus>) -> impl IntoView {
let title = create_memo(move |_| {
play_status.with(|play_status| {
match play_status.queue.front() {
Some(song_data) => song_data.title.clone(),
None => "LibreTunes".to_owned(),
}
})
});
view! {
<Title text=title />
}
}
/// The main play bar component, containing the progress bar, media info, play controls, and play duration /// The main play bar component, containing the progress bar, media info, play controls, and play duration
#[component] #[component]
pub fn PlayBar(status: RwSignal<PlayStatus>) -> impl IntoView { pub fn PlayBar(status: RwSignal<PlayStatus>) -> impl IntoView {