use perspective_client::config::ViewConfigUpdate;
use perspective_client::{ViewWindow, clone};
use perspective_js::utils::{ApiError, ApiFuture};
use crate::session::Session;
pub async fn get_column_values(session: &Session, column: String) -> Result<Vec<String>, ApiError> {
let expressions = Some(session.get_view_config().expressions.clone());
let config = ViewConfigUpdate {
group_by: Some(vec![column]),
columns: Some(vec![]),
expressions,
..ViewConfigUpdate::default()
};
let table = session
.get_table()
.ok_or_else(|| ApiError::from("No table set"))?;
let view = table.view(Some(config.clone())).await?;
let csv = view.to_csv(ViewWindow::default()).await?;
clone!(view);
ApiFuture::spawn(async move {
view.delete().await?;
Ok(())
});
let res = csv
.lines()
.map(|val| {
if val.starts_with('\"') && val.ends_with('\"') {
(val[1..val.len() - 1]).to_owned()
} else {
val.to_owned()
}
})
.skip(2)
.collect::<Vec<String>>();
Ok(res)
}