grid_editor_trait_impl.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. use crate::services::grid_view_manager::GridViewFieldDelegate;
  2. use flowy_grid_data_model::revision::FieldRevision;
  3. use flowy_sync::client_grid::GridRevisionPad;
  4. use lib_infra::future::{wrap_future, AFFuture};
  5. use std::sync::Arc;
  6. use tokio::sync::RwLock;
  7. impl GridViewFieldDelegate for Arc<RwLock<GridRevisionPad>> {
  8. fn get_field_revs(&self) -> AFFuture<Vec<Arc<FieldRevision>>> {
  9. let pad = self.clone();
  10. wrap_future(async move {
  11. match pad.read().await.get_field_revs(None) {
  12. Ok(field_revs) => field_revs,
  13. Err(e) => {
  14. tracing::error!("[GridViewRevisionDelegate] get field revisions failed: {}", e);
  15. vec![]
  16. }
  17. }
  18. })
  19. }
  20. fn get_field_rev(&self, field_id: &str) -> AFFuture<Option<Arc<FieldRevision>>> {
  21. let pad = self.clone();
  22. let field_id = field_id.to_owned();
  23. wrap_future(async move {
  24. pad.read()
  25. .await
  26. .get_field_rev(&field_id)
  27. .map(|(_, field_rev)| field_rev.clone())
  28. })
  29. }
  30. }