use futures::FutureExt;
use perspective_client::clone;
use perspective_js::utils::*;
use crate::config::*;
use crate::renderer::{Renderer, StagedEdit};
use crate::session::{EditDelta, OpKind, Session};
pub fn set_edit_mode(session: &Session, renderer: &Renderer, mode: &str) {
let mut map = serde_json::Map::new();
map.insert(
"edit_mode".to_owned(),
serde_json::Value::String(mode.to_owned()),
);
let staged = renderer.stage(StagedEdit::PluginConfig(map.clone()));
let kind = OpKind::Edit {
delta: EditDelta::Renderer,
swaps_plugin: false,
};
let ticket = session.submit(kind, {
clone!(session, renderer);
move |_ctx| {
Box::pin(async move {
let view_config = session.committed_view_config().clone();
let changed = renderer
.update_plugin_config(&view_config, OptionalUpdate::Update(map))
.unwrap_or_default();
drop(staged);
Ok(Some(
async move {
if changed {
super::send_plugin_config::deliver_plugin_config(&session, &renderer)
.await?;
}
Ok(())
}
.boxed_local(),
))
})
}
});
ApiFuture::spawn(ticket.settle());
}