use futures::channel::oneshot::Sender;
use perspective_client::config::Filter;
use perspective_js::utils::ApiResult;
use wasm_bindgen::JsValue;
use crate::components::settings_panel::SelectedTab;
use crate::config::*;
use crate::presentation::{
ColumnSettingsTab, ColumnSettingsTarget, DragDropProps, PresentationProps,
};
use crate::renderer::RendererProps;
use crate::session::{SessionProps, TableLoadState};
use crate::utils::Completion;
#[derive(Debug)]
pub struct MasterSelection {
pub filters: Vec<Filter>,
pub cell_fallback: Option<Filter>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Divider {
Settings,
ColumnSettings,
}
impl Divider {
pub fn pane_selector(self) -> &'static str {
match self {
Self::Settings => "#app_panel > .split-panel-child",
Self::ColumnSettings => "#modal_panel > .split-panel-child",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PaneTarget {
Width(i32),
Natural,
}
#[derive(Debug)]
pub enum PerspectiveViewerMsg {
ColumnSettingsPanelAutoWidth(f64),
ToggleColumnSettingsPin,
ToggleColumnSettingsPinComplete(Sender<()>),
ColumnSettingsTabChanged(ColumnSettingsTab),
OpenColumnSettings {
target: Option<ColumnSettingsTarget>,
sender: Option<Sender<()>>,
toggle: bool,
},
PreloadFontsUpdate,
Reset(bool, Option<Completion>),
ResetPanel(Option<String>, bool, Option<Completion>),
Resize,
LayoutChanged,
SetActivePanel(String, Option<Completion>),
ClosePanel(String, Option<Completion>),
PanelClosed(String),
CommitWorkspaceRestore(String),
DuplicatePanel(String),
NewPanel(String),
NewPanelFrom {
client: String,
table: String,
},
ToggleMaster(String),
MasterContribution(String, Option<MasterSelection>),
RemoveGlobalFilter(usize),
ClearGlobalFilters,
TitlesChanged,
DividerMove(Divider, PaneTarget),
DividerPump(Divider),
DividerCommit(Divider, PaneTarget),
DividerFinish(Divider),
SettingsPanelTabChanged(SelectedTab),
SettingsPanelAutoWidth(f64),
ToggleDebug,
ToggleSettingsComplete(SettingsUpdate, Sender<()>),
ToggleSettingsInit(
Option<SettingsUpdate>,
bool,
Option<Sender<ApiResult<JsValue>>>,
),
UpdateSession(Box<SessionProps>),
UpdateRenderer(Box<RendererProps>),
UpdatePresentation(Box<PresentationProps>),
UpdateSettingsOpen(bool),
UpdateIsWorkspace(bool),
UpdateColumnSettings(Box<crate::presentation::OpenColumnSettings>),
UpdateColumnSettingsCommit(Sender<()>),
UpdateDragDrop(Box<DragDropProps>),
UpdateSessionStats(bool, Option<TableLoadState>),
UpdateGlobalFilters,
UpdateInFlight(u32),
}