use perspective_client::config::ViewConfig;
use crate::presentation::{ColumnLocator, OpenColumnSettings};
use crate::renderer::Renderer;
use crate::session::SessionMetadata;
pub fn get_column_locator(
metadata: &SessionMetadata,
name: Option<String>,
) -> Option<ColumnLocator> {
name.and_then(|name| {
if metadata.is_column_expression(&name) {
Some(ColumnLocator::Expression(name))
} else {
metadata.get_table_columns().and_then(|x| {
x.iter()
.find_map(|n| (n == &name).then_some(ColumnLocator::Table(name.clone())))
})
}
})
}
pub fn get_current_column_locator(
open_column_settings: &OpenColumnSettings,
renderer: &Renderer,
view_config: &ViewConfig,
_metadata: &SessionMetadata,
) -> Option<ColumnLocator> {
open_column_settings
.locator
.clone()
.filter(|locator| match locator {
ColumnLocator::Table(_name) => {
locator
.name()
.map(|name| {
view_config.columns.iter().any(|maybe_col| {
maybe_col
.as_ref()
.map(|col| col == name)
.unwrap_or_default()
})
})
.unwrap_or_default()
&& renderer.can_render_column_styles()
},
_ => true,
})
}