use futures::channel::oneshot;
use perspective_client::clone;
use perspective_js::utils::ApiFuture;
use crate::presentation::Presentation;
use crate::renderer::Renderer;
use crate::session::{ResetOptions, Session};
pub fn reset_all(
session: &Session,
renderer: &Renderer,
presentation: &Presentation,
all: bool,
sender: Option<oneshot::Sender<()>>,
) {
presentation.set_open_column_settings(None);
clone!(session, renderer, presentation);
ApiFuture::spawn(async move {
session
.reset(ResetOptions {
config: true,
expressions: all,
..ResetOptions::default()
})
.await?;
let columns_config = if all {
renderer.reset_columns_configs();
renderer.reset_plugin_config();
renderer
.plugin_config_changed
.emit(renderer.get_plugin_config());
None
} else {
Some(renderer.all_columns_configs())
};
renderer.reset(columns_config.as_ref()).await?;
presentation.reset_available_themes(None).await;
if all {
presentation.reset_theme().await?;
}
let result = renderer.draw(session.validate().await?.create_view()).await;
if let Some(sender) = sender {
sender.send(()).unwrap();
}
renderer.reset_changed.emit(());
result
})
}