use std::collections::{HashMap, HashSet}; use freya::prelude::*; use oneclient_content::packages::ProviderId; use oneclient_db::models::ClusterId; #[derive(Clone)] pub struct ActiveClusterState(pub State>); pub fn use_provide_active_cluster(active: ActiveClusterState) { use_provide_root_context(move || active.clone()); } pub fn use_active_cluster_id() -> State> { consume_root_context::().0 } /// Startup curtain stays up past the Startup route until home content settles /// so the app never reveals a half-populated home #[derive(Clone, Copy)] pub struct SplashState { pub active: State, pub home_ready: State, } pub fn use_provide_splash(state: SplashState) { use_provide_root_context(move || state); } pub fn use_splash() -> SplashState { consume_root_context::() } #[derive(Clone)] pub struct BrowserCompatState(pub State); pub fn use_provide_browser_compat(state: BrowserCompatState) { use_provide_root_context(move || state.clone()); } pub fn use_browser_compat() -> State { consume_root_context::().0 } #[derive(Clone)] pub struct LinkConfirmState(pub State>); pub fn use_provide_link_confirm(state: LinkConfirmState) { use_provide_root_context(move || state.clone()); } pub fn use_link_confirm() -> State> { consume_root_context::().0 } #[derive(Clone)] pub struct BrowserUiState { pub query: String, pub provider: ProviderId, pub categories: Vec, pub page: usize, } impl Default for BrowserUiState { fn default() -> Self { Self { query: String::new(), provider: ProviderId::Modrinth, categories: Vec::new(), page: 0, } } } #[derive(Clone)] pub struct BrowserStateStore(pub State>); pub fn use_provide_browser_state(store: BrowserStateStore) { use_provide_root_context(move || store.clone()); } pub fn use_browser_state_store() -> State> { consume_root_context::().0 } #[derive(Clone)] pub struct OnboardingSelectionState { pub selected: State>, /// Until set the shell keeps re-deriving `selected` from the catalog so a /// late-settling bundle list still gets the right defaults pub user_touched: State, /// `None` means "no migration decision yet" pub migrated_categories: State>>, pub language: State, pub reduce_motion: State, pub predownload: State, pub setup_started: State, /// `None` = don't import pub import_folder: State>, pub import_dedicated: State, } pub fn use_provide_onboarding_selection(state: OnboardingSelectionState) { use_provide_root_context(move || state.clone()); } pub fn use_onboarding_selection() -> OnboardingSelectionState { consume_root_context::() }