Refactor SessionConfig to use new Session data type

This commit is contained in:
Leonard Steppy 2025-02-15 17:48:47 +01:00
parent 0c2716db8e
commit 6f648c0fb7

View File

@ -1,4 +1,5 @@
use crate::localize_day; use crate::localize_day;
use crate::session::{RegularSession, Session};
use crate::session_date_calculator::{DayIter, NthWeekday}; use crate::session_date_calculator::{DayIter, NthWeekday};
use chrono::Weekday; use chrono::Weekday;
use leptos::prelude::*; use leptos::prelude::*;
@ -39,13 +40,14 @@ pub fn App() -> impl IntoView {
#[component] #[component]
fn Sessions(config: SessionConfig) -> impl IntoView { 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 config
.sessions .sessions
.iter() .clone()
.any(|session_day| session_day.matches(day)) .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::<Vec<_>>()); signal(session_iter.by_ref().take(2).collect::<Vec<_>>());
view! { view! {
@ -55,14 +57,14 @@ fn Sessions(config: SessionConfig) -> impl IntoView {
<p>{config.motd}</p> <p>{config.motd}</p>
</div> </div>
<For <For
each=move || session_dates.get() each=move || dated_sessions.get()
key=|day| day.date key=|session| session.day.clone()
children=move |day| view! { <div class="box elem-background">{localize_day(&day)}</div> } children=move |session| view! { <div class="box elem-background">{localize_day(&session.day)}</div> }
/> />
<div <div
class="box button elem-background" class="box button elem-background"
on:click=move |_| { on:click=move |_| {
set_session_dates.write().extend(session_iter.by_ref().take(3)); mut_dated_sessions.write().extend(session_iter.by_ref().take(3));
} }
> >
"Mehr anzeigen" "Mehr anzeigen"
@ -98,7 +100,7 @@ where
#[serde(default)] #[serde(default)]
pub struct SessionConfig { pub struct SessionConfig {
pub motd: Option<String>, pub motd: Option<String>,
pub sessions: Vec<NthWeekday>, pub sessions: Vec<Session>,
} }
impl Default for SessionConfig { impl Default for SessionConfig {
@ -106,8 +108,8 @@ impl Default for SessionConfig {
Self { 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()), 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![ sessions: vec![
NthWeekday::new(1, Weekday::Sun), RegularSession::from(NthWeekday::new(1, Weekday::Sun)).into(),
NthWeekday::new(3, Weekday::Tue), RegularSession::from(NthWeekday::new(3, Weekday::Tue)).into(),
], ],
} }
} }