use crate::prelude::*; use chrono::TimeDelta; use leptos::prelude::*; /// Campaign header: editable name, campaign image, in-game date and /// session steppers, and Save/Load/Clear buttons (not wired yet — see /// ROADMAP phase 1). #[component] pub fn Header () -> impl IntoView { let state = expect_context::(); let campaign = state.campaign(); let date = state.date(); let session = state.session(); let image = state.campaign_image(); // Shifts the in-game date by ±1 day (saturating, via checked_add_signed). let adjust_day = move |adjustment: i64| date.update(|d| { *d = d.checked_add_signed(TimeDelta::days(adjustment)).unwrap(); }); // Shifts the session counter by ±1, guarding against underflow. let adjust_session = move |adjustment: isize| session.update(|s| { if let Some(new) = s.checked_add_signed(adjustment) { *s = new; } }); view! {
aex v{env!("CARGO_PKG_VERSION")} by mk

{move || format!("{}", date.get().format("%d/%m/%Y"))}

Сессия #{move || format!("{}", session.get())}

} }