use leptos::prelude::*;
use orbital_base_components::DatetimeTimezone;
use std::collections::HashSet;
use crate::engine::HistoryRowHeightCache;
use crate::types::{
HistoryEvents, HistoryFeatures, HistoryFilter, HistoryFilterActorOption, HistoryGroupBy,
HistoryLayout, HistoryLocale, HistoryRenderers, HistorySort,
};
use chrono::{DateTime, Utc};
#[derive(Clone)]
pub struct HistoryContext {
pub locale: Signal<HistoryLocale>,
pub features: HistoryFeatures,
pub layout: HistoryLayout,
pub events: HistoryEvents,
pub renderers: HistoryRenderers,
pub display_timezone: Signal<DatetimeTimezone>,
pub filter: Signal<HistoryFilter>,
pub sort: Signal<HistorySort>,
pub is_client: bool,
pub set_filter: Callback<(HistoryFilter,), ()>,
pub set_sort: Callback<(HistorySort,), ()>,
pub scroll_top: Signal<f64>,
pub filter_kind_options: Signal<Vec<String>>,
pub filter_actor_options: Signal<Vec<HistoryFilterActorOption>>,
pub virtual_row_height: f64,
pub page: Option<Signal<usize>>,
pub page_count: Option<Signal<usize>>,
pub go_to_page: Option<Callback<(usize,), ()>>,
pub read_watermark: Signal<Option<DateTime<Utc>>>,
pub row_height_cache: HistoryRowHeightCache,
pub list_layout_keys: RwSignal<Vec<String>>,
pub group_by: Signal<HistoryGroupBy>,
pub expanded_groups: RwSignal<HashSet<String>>,
pub toggle_group: Callback<(String,), ()>,
}
pub fn provide_history_context(ctx: HistoryContext) {
provide_context(ctx);
}
pub fn use_history_context() -> HistoryContext {
use_context::<HistoryContext>().expect("HistoryContext must be provided by HistoryTimeline")
}