use std::future::Future;
use perspective_js::utils::ApiResult;
use wasm_bindgen::JsCast;
use web_sys::*;
use crate::js::plugin::JsPerspectiveViewerPlugin;
pub async fn activate_plugin<T>(
viewer: &HtmlElement,
plugin: &JsPerspectiveViewerPlugin,
task: impl Future<Output = ApiResult<T>>,
) -> ApiResult<T> {
let html_plugin = plugin.unchecked_ref::<HtmlElement>();
if html_plugin.parent_node().is_none() {
html_plugin.style().set_property("opacity", "0")?;
viewer.append_child(html_plugin)?;
}
let result = task.await;
html_plugin.style().set_property("opacity", "1")?;
result
}
pub fn remove_inactive_plugin(
viewer: &HtmlElement,
plugin: &JsPerspectiveViewerPlugin,
plugins: &[JsPerspectiveViewerPlugin],
) -> ApiResult<()> {
for idx in 0..viewer.children().length() {
let elem = viewer.children().item(idx).unwrap();
if &elem != plugin.unchecked_ref::<Element>()
&& plugins
.iter()
.any(|x| *x.unchecked_ref::<Element>() == elem)
{
viewer.remove_child(&elem)?;
break;
}
}
Ok(())
}