grid_editor_trait_impl.rs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use crate::services::block_manager::GridBlockManager;
  2. use crate::services::row::GridBlock;
  3. use crate::services::view_editor::GridViewEditorDelegate;
  4. use flowy_sync::client_grid::GridRevisionPad;
  5. use flowy_task::TaskDispatcher;
  6. use grid_rev_model::{FieldRevision, RowRevision};
  7. use lib_infra::future::{to_fut, Fut};
  8. use std::sync::Arc;
  9. use tokio::sync::RwLock;
  10. pub(crate) struct GridViewEditorDelegateImpl {
  11. pub(crate) pad: Arc<RwLock<GridRevisionPad>>,
  12. pub(crate) block_manager: Arc<GridBlockManager>,
  13. pub(crate) task_scheduler: Arc<RwLock<TaskDispatcher>>,
  14. }
  15. impl GridViewEditorDelegate for GridViewEditorDelegateImpl {
  16. fn get_field_revs(&self, field_ids: Option<Vec<String>>) -> Fut<Vec<Arc<FieldRevision>>> {
  17. let pad = self.pad.clone();
  18. to_fut(async move {
  19. match pad.read().await.get_field_revs(field_ids) {
  20. Ok(field_revs) => field_revs,
  21. Err(e) => {
  22. tracing::error!("[GridViewRevisionDelegate] get field revisions failed: {}", e);
  23. vec![]
  24. }
  25. }
  26. })
  27. }
  28. fn get_field_rev(&self, field_id: &str) -> Fut<Option<Arc<FieldRevision>>> {
  29. let pad = self.pad.clone();
  30. let field_id = field_id.to_owned();
  31. to_fut(async move { Some(pad.read().await.get_field_rev(&field_id)?.1.clone()) })
  32. }
  33. fn index_of_row(&self, row_id: &str) -> Fut<Option<usize>> {
  34. let block_manager = self.block_manager.clone();
  35. let row_id = row_id.to_owned();
  36. to_fut(async move { block_manager.index_of_row(&row_id).await })
  37. }
  38. fn get_row_rev(&self, row_id: &str) -> Fut<Option<(usize, Arc<RowRevision>)>> {
  39. let block_manager = self.block_manager.clone();
  40. let row_id = row_id.to_owned();
  41. to_fut(async move {
  42. match block_manager.get_row_rev(&row_id).await {
  43. Ok(indexed_row) => indexed_row,
  44. Err(_) => None,
  45. }
  46. })
  47. }
  48. fn get_row_revs(&self) -> Fut<Vec<Arc<RowRevision>>> {
  49. let block_manager = self.block_manager.clone();
  50. to_fut(async move {
  51. let blocks = block_manager.get_blocks(None).await.unwrap();
  52. blocks
  53. .into_iter()
  54. .flat_map(|block| block.row_revs)
  55. .collect::<Vec<Arc<RowRevision>>>()
  56. })
  57. }
  58. fn get_blocks(&self) -> Fut<Vec<GridBlock>> {
  59. let block_manager = self.block_manager.clone();
  60. to_fut(async move { block_manager.get_blocks(None).await.unwrap_or_default() })
  61. }
  62. fn get_task_scheduler(&self) -> Arc<RwLock<TaskDispatcher>> {
  63. self.task_scheduler.clone()
  64. }
  65. }