use perspective_client::clone;
use yew::Component;
use super::{HasRenderer, HasSession};
use crate::ApiFuture;
use crate::root::Root;
use crate::session::{ResetOptions, TableIntermediateState};
pub trait DeleteAll: HasSession + HasRenderer {
fn delete_all<T: Component>(&self, root: &Root<T>) -> ApiFuture<()> {
self.session().table_unloaded.emit(false);
clone!(self.renderer(), self.session(), root);
ApiFuture::new(self.renderer().clone().with_lock(async move {
renderer.delete()?;
root.borrow_mut().take().ok_or("Already deleted")?.destroy();
session
.reset(ResetOptions {
config: true,
expressions: true,
table: Some(TableIntermediateState::Ejected),
..ResetOptions::default()
})
.await?;
Ok(())
}))
}
}
impl<T: HasSession + HasRenderer> DeleteAll for T {}