block_manager_trait_impl.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. use crate::services::block_manager::GridBlockManager;
  2. use crate::services::grid_view_manager::GridViewRowDelegate;
  3. use flowy_grid_data_model::revision::RowRevision;
  4. use lib_infra::future::{wrap_future, AFFuture};
  5. use std::sync::Arc;
  6. impl GridViewRowDelegate for Arc<GridBlockManager> {
  7. fn gv_index_of_row(&self, row_id: &str) -> AFFuture<Option<usize>> {
  8. let block_manager = self.clone();
  9. let row_id = row_id.to_owned();
  10. wrap_future(async move { block_manager.index_of_row(&row_id).await })
  11. }
  12. fn gv_get_row_rev(&self, row_id: &str) -> AFFuture<Option<Arc<RowRevision>>> {
  13. let block_manager = self.clone();
  14. let row_id = row_id.to_owned();
  15. wrap_future(async move {
  16. match block_manager.get_row_rev(&row_id).await {
  17. Ok(row_rev) => row_rev,
  18. Err(_) => None,
  19. }
  20. })
  21. }
  22. fn gv_row_revs(&self) -> AFFuture<Vec<Arc<RowRevision>>> {
  23. let block_manager = self.clone();
  24. wrap_future(async move {
  25. let blocks = block_manager.get_block_snapshots(None).await.unwrap();
  26. blocks
  27. .into_iter()
  28. .map(|block| block.row_revs)
  29. .flatten()
  30. .collect::<Vec<Arc<RowRevision>>>()
  31. })
  32. }
  33. }