controller.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use crate::services::sort::SortType;
  2. use flowy_task::TaskDispatcher;
  3. use grid_rev_model::{FieldRevision, RowRevision, SortRevision};
  4. use lib_infra::future::Fut;
  5. use std::sync::Arc;
  6. use tokio::sync::RwLock;
  7. pub trait SortDelegate: Send + Sync {
  8. fn get_sort_rev(&self, sort_type: SortType) -> Fut<Vec<Arc<SortRevision>>>;
  9. fn get_field_rev(&self, field_id: &str) -> Fut<Option<Arc<FieldRevision>>>;
  10. fn get_field_revs(&self, field_ids: Option<Vec<String>>) -> Fut<Vec<Arc<FieldRevision>>>;
  11. }
  12. pub struct SortController {
  13. view_id: String,
  14. handler_id: String,
  15. delegate: Box<dyn SortDelegate>,
  16. task_scheduler: Arc<RwLock<TaskDispatcher>>,
  17. }
  18. impl SortController {
  19. pub fn new<T>(view_id: &str, handler_id: &str, delegate: T, task_scheduler: Arc<RwLock<TaskDispatcher>>) -> Self
  20. where
  21. T: SortDelegate + 'static,
  22. {
  23. Self {
  24. view_id: view_id.to_string(),
  25. handler_id: handler_id.to_string(),
  26. delegate: Box::new(delegate),
  27. task_scheduler,
  28. }
  29. }
  30. pub async fn close(&self) {
  31. self.task_scheduler
  32. .write()
  33. .await
  34. .unregister_handler(&self.handler_id)
  35. .await;
  36. }
  37. pub fn sort_rows(&self, rows: &mut Vec<Arc<RowRevision>>) {
  38. todo!()
  39. }
  40. }