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::()
}