diff --git a/src/webpage.rs b/src/webpage.rs index ec194d9..4195ba0 100644 --- a/src/webpage.rs +++ b/src/webpage.rs @@ -1,4 +1,5 @@ use crate::localize_day; +use crate::session::{RegularSession, Session}; use crate::session_date_calculator::{DayIter, NthWeekday}; use chrono::Weekday; use leptos::prelude::*; @@ -39,13 +40,14 @@ pub fn App() -> impl IntoView { #[component] fn Sessions(config: SessionConfig) -> impl IntoView { - let mut session_iter = DayIter::default().filter(move |day| { + let mut session_iter = DayIter::default().flat_map(move |day| { config .sessions - .iter() - .any(|session_day| session_day.matches(day)) + .clone() + .into_iter() + .filter_map(move |session| session.clone().into_dated(day.clone()).ok()) }); - let (session_dates, set_session_dates) = + let (dated_sessions, mut_dated_sessions) = signal(session_iter.by_ref().take(2).collect::>()); view! { @@ -55,14 +57,14 @@ fn Sessions(config: SessionConfig) -> impl IntoView {

{config.motd}

{localize_day(&day)} } + each=move || dated_sessions.get() + key=|session| session.day.clone() + children=move |session| view! {
{localize_day(&session.day)}
} />
"Mehr anzeigen" @@ -98,7 +100,7 @@ where #[serde(default)] pub struct SessionConfig { pub motd: Option, - pub sessions: Vec, + pub sessions: Vec, } impl Default for SessionConfig { @@ -106,8 +108,8 @@ impl Default for SessionConfig { Self { motd: Some("Probe jeden ersten Sonntag im Monat um 10:00 Uhr und jeden dritten Dienstag im Monat um 18:30 Uhr".to_string()), sessions: vec![ - NthWeekday::new(1, Weekday::Sun), - NthWeekday::new(3, Weekday::Tue), + RegularSession::from(NthWeekday::new(1, Weekday::Sun)).into(), + RegularSession::from(NthWeekday::new(3, Weekday::Tue)).into(), ], } }