mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: grid tasks
This commit is contained in:
@ -0,0 +1 @@
|
||||
pub(crate) struct FilterRunner {}
|
3
frontend/rust-lib/flowy-grid/src/services/filter/mod.rs
Normal file
3
frontend/rust-lib/flowy-grid/src/services/filter/mod.rs
Normal file
@ -0,0 +1,3 @@
|
||||
mod filter_runner;
|
||||
|
||||
pub use filter_runner::*;
|
@ -3,7 +3,9 @@ mod util;
|
||||
mod block_manager;
|
||||
pub mod block_revision_editor;
|
||||
pub mod field;
|
||||
mod filter;
|
||||
pub mod grid_editor;
|
||||
pub mod persistence;
|
||||
pub mod row;
|
||||
pub mod setting;
|
||||
// mod tasks;
|
||||
|
3
frontend/rust-lib/flowy-grid/src/services/tasks/mod.rs
Normal file
3
frontend/rust-lib/flowy-grid/src/services/tasks/mod.rs
Normal file
@ -0,0 +1,3 @@
|
||||
mod filter;
|
||||
mod runner;
|
||||
mod scheduler;
|
76
frontend/rust-lib/flowy-grid/src/services/tasks/scheduler.rs
Normal file
76
frontend/rust-lib/flowy-grid/src/services/tasks/scheduler.rs
Normal file
@ -0,0 +1,76 @@
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::BinaryHeap;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
|
||||
enum TaskType {
|
||||
/// Remove the row if it doesn't satisfy the filter.
|
||||
Filter,
|
||||
/// Generate snapshot for grid, unused by now.
|
||||
Snapshot,
|
||||
}
|
||||
|
||||
/// Two tasks are equal if they have the same type.
|
||||
impl PartialEq for TaskType {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
matches!((self, other),)
|
||||
}
|
||||
}
|
||||
|
||||
pub type TaskId = u32;
|
||||
|
||||
#[derive(Eq, Debug, Clone, Copy)]
|
||||
struct PendingTask {
|
||||
kind: TaskType,
|
||||
id: TaskId,
|
||||
}
|
||||
|
||||
impl PartialEq for PendingTask {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.id.eq(&other.id)
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for PendingTask {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||
Some(self.cmp(other))
|
||||
}
|
||||
}
|
||||
|
||||
impl Ord for PendingTask {
|
||||
fn cmp(&self, other: &Self) -> Ordering {
|
||||
self.id.cmp(&other.id).reverse()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Hash, Debug, Clone)]
|
||||
enum TaskListIdentifier {
|
||||
Filter(String),
|
||||
Snapshot(String),
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct TaskList {
|
||||
tasks: BinaryHeap<PendingTask>,
|
||||
}
|
||||
|
||||
impl Deref for TaskList {
|
||||
type Target = BinaryHeap<PendingTask>;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.tasks
|
||||
}
|
||||
}
|
||||
|
||||
impl DerefMut for TaskList {
|
||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||
&mut self.tasks
|
||||
}
|
||||
}
|
||||
|
||||
impl TaskList {
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
tasks: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user