block_manager_trait_impl.rs 1.6 KB

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