Skip to content

Commit a0a16cc

Browse files
authored
feat: config grid filter in backend & add tests
* chore: add search crate * chore: add task order test * chore: enable timeout * add task crate * chore: run filter task * chore: run filter task * chore: filter rows * chore: cache filter result * chore: filter rows when open a grid * chore: add tests * test: add number filter test * test: add checkbox fitler test * chore: fix test Co-authored-by: nathan <[email protected]>
1 parent a1e0282 commit a0a16cc

File tree

83 files changed

+2267
-1609
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2267
-1609
lines changed

frontend/rust-lib/Cargo.lock

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/rust-lib/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ members = [
1515
"flowy-error",
1616
"flowy-revision",
1717
"flowy-grid",
18+
"flowy-task",
1819
]
1920

2021
[profile.dev]

frontend/rust-lib/dart-ffi/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub extern "C" fn async_event(port: i64, input: *const u8, len: usize) {
4444
log::error!("sdk not init yet.");
4545
return;
4646
}
47-
Some(e) => e.dispatcher.clone(),
47+
Some(e) => e.event_dispatcher.clone(),
4848
};
4949
let _ = EventDispatcher::async_send_with_callback(dispatcher, request, move |resp: EventResponse| {
5050
log::trace!("[FFI]: Post data to dart through {} port", port);
@@ -62,7 +62,7 @@ pub extern "C" fn sync_event(input: *const u8, len: usize) -> *const u8 {
6262
log::error!("sdk not init yet.");
6363
return forget_rust(Vec::default());
6464
}
65-
Some(e) => e.dispatcher.clone(),
65+
Some(e) => e.event_dispatcher.clone(),
6666
};
6767
let _response = EventDispatcher::sync_send(dispatcher, request);
6868

frontend/rust-lib/flowy-error/src/errors.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,5 @@ impl std::convert::From<protobuf::ProtobufError> for FlowyError {
112112
FlowyError::internal().context(e)
113113
}
114114
}
115+
116+
impl std::error::Error for FlowyError {}

frontend/rust-lib/flowy-grid/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ edition = "2021"
99
lib-dispatch = { path = "../lib-dispatch" }
1010
dart-notify = { path = "../dart-notify" }
1111
flowy-revision = { path = "../flowy-revision" }
12+
flowy-task= { path = "../flowy-task" }
1213
flowy-error = { path = "../flowy-error", features = ["db"]}
1314
flowy-derive = { path = "../../../shared-lib/flowy-derive" }
1415
lib-ot = { path = "../../../shared-lib/lib-ot" }
@@ -17,6 +18,7 @@ grid-rev-model = { path = "../../../shared-lib/grid-rev-model" }
1718
flowy-sync = { path = "../../../shared-lib/flowy-sync" }
1819
flowy-http-model = { path = "../../../shared-lib/flowy-http-model" }
1920
flowy-database = { path = "../flowy-database" }
21+
anyhow = "1.0"
2022

2123
strum = "0.21"
2224
strum_macros = "0.21"

frontend/rust-lib/flowy-grid/src/entities/field_entities.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,7 @@ impl std::convert::From<&FieldTypeRevision> for FieldType {
591591
FieldType::from(*ty)
592592
}
593593
}
594+
594595
impl std::convert::From<FieldTypeRevision> for FieldType {
595596
fn from(ty: FieldTypeRevision) -> Self {
596597
match ty {
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
11
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
22
use flowy_error::ErrorCode;
3-
use grid_rev_model::FilterConfigurationRevision;
3+
use grid_rev_model::FilterRevision;
44
use std::sync::Arc;
55

66
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
7-
pub struct CheckboxFilterConfigurationPB {
7+
pub struct CheckboxFilterPB {
88
#[pb(index = 1)]
9-
pub condition: CheckboxCondition,
9+
pub condition: CheckboxFilterCondition,
1010
}
1111

1212
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
1313
#[repr(u8)]
14-
pub enum CheckboxCondition {
14+
pub enum CheckboxFilterCondition {
1515
IsChecked = 0,
1616
IsUnChecked = 1,
1717
}
1818

19-
impl std::convert::From<CheckboxCondition> for i32 {
20-
fn from(value: CheckboxCondition) -> Self {
21-
value as i32
19+
impl std::convert::From<CheckboxFilterCondition> for u32 {
20+
fn from(value: CheckboxFilterCondition) -> Self {
21+
value as u32
2222
}
2323
}
2424

25-
impl std::default::Default for CheckboxCondition {
25+
impl std::default::Default for CheckboxFilterCondition {
2626
fn default() -> Self {
27-
CheckboxCondition::IsChecked
27+
CheckboxFilterCondition::IsChecked
2828
}
2929
}
3030

31-
impl std::convert::TryFrom<u8> for CheckboxCondition {
31+
impl std::convert::TryFrom<u8> for CheckboxFilterCondition {
3232
type Error = ErrorCode;
3333

3434
fn try_from(value: u8) -> Result<Self, Self::Error> {
3535
match value {
36-
0 => Ok(CheckboxCondition::IsChecked),
37-
1 => Ok(CheckboxCondition::IsUnChecked),
36+
0 => Ok(CheckboxFilterCondition::IsChecked),
37+
1 => Ok(CheckboxFilterCondition::IsUnChecked),
3838
_ => Err(ErrorCode::InvalidData),
3939
}
4040
}
4141
}
4242

43-
impl std::convert::From<Arc<FilterConfigurationRevision>> for CheckboxFilterConfigurationPB {
44-
fn from(rev: Arc<FilterConfigurationRevision>) -> Self {
45-
CheckboxFilterConfigurationPB {
46-
condition: CheckboxCondition::try_from(rev.condition).unwrap_or(CheckboxCondition::IsChecked),
43+
impl std::convert::From<Arc<FilterRevision>> for CheckboxFilterPB {
44+
fn from(rev: Arc<FilterRevision>) -> Self {
45+
CheckboxFilterPB {
46+
condition: CheckboxFilterCondition::try_from(rev.condition).unwrap_or(CheckboxFilterCondition::IsChecked),
4747
}
4848
}
4949
}

frontend/rust-lib/flowy-grid/src/entities/filter_entities/date_filter.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ use crate::entities::parser::NotEmptyStr;
22
use crate::entities::FieldType;
33
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
44
use flowy_error::ErrorCode;
5-
use grid_rev_model::FilterConfigurationRevision;
5+
use grid_rev_model::FilterRevision;
66
use serde::{Deserialize, Serialize};
77
use std::str::FromStr;
88
use std::sync::Arc;
99

1010
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
11-
pub struct DateFilterConfigurationPB {
11+
pub struct DateFilterPB {
1212
#[pb(index = 1)]
1313
pub condition: DateFilterCondition,
1414

@@ -98,6 +98,11 @@ pub enum DateFilterCondition {
9898
DateIsEmpty = 6,
9999
}
100100

101+
impl std::convert::From<DateFilterCondition> for u32 {
102+
fn from(value: DateFilterCondition) -> Self {
103+
value as u32
104+
}
105+
}
101106
impl std::default::Default for DateFilterCondition {
102107
fn default() -> Self {
103108
DateFilterCondition::DateIs
@@ -120,19 +125,15 @@ impl std::convert::TryFrom<u8> for DateFilterCondition {
120125
}
121126
}
122127
}
123-
impl std::convert::From<Arc<FilterConfigurationRevision>> for DateFilterConfigurationPB {
124-
fn from(rev: Arc<FilterConfigurationRevision>) -> Self {
128+
impl std::convert::From<Arc<FilterRevision>> for DateFilterPB {
129+
fn from(rev: Arc<FilterRevision>) -> Self {
125130
let condition = DateFilterCondition::try_from(rev.condition).unwrap_or(DateFilterCondition::DateIs);
126-
let mut filter = DateFilterConfigurationPB {
131+
let mut filter = DateFilterPB {
127132
condition,
128133
..Default::default()
129134
};
130135

131-
if let Some(range) = rev
132-
.content
133-
.as_ref()
134-
.and_then(|content| DateRange::from_str(content).ok())
135-
{
136+
if let Ok(range) = DateRange::from_str(&rev.content) {
136137
filter.start = range.start;
137138
filter.end = range.end;
138139
};

frontend/rust-lib/flowy-grid/src/entities/filter_entities/number_filter.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
22
use flowy_error::ErrorCode;
3-
use grid_rev_model::FilterConfigurationRevision;
3+
use grid_rev_model::FilterRevision;
44

55
use std::sync::Arc;
66

77
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
8-
pub struct NumberFilterConfigurationPB {
8+
pub struct NumberFilterPB {
99
#[pb(index = 1)]
1010
pub condition: NumberFilterCondition,
1111

12-
#[pb(index = 2, one_of)]
13-
pub content: Option<String>,
12+
#[pb(index = 2)]
13+
pub content: String,
1414
}
1515

1616
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
@@ -32,9 +32,9 @@ impl std::default::Default for NumberFilterCondition {
3232
}
3333
}
3434

35-
impl std::convert::From<NumberFilterCondition> for i32 {
35+
impl std::convert::From<NumberFilterCondition> for u32 {
3636
fn from(value: NumberFilterCondition) -> Self {
37-
value as i32
37+
value as u32
3838
}
3939
}
4040
impl std::convert::TryFrom<u8> for NumberFilterCondition {
@@ -55,9 +55,9 @@ impl std::convert::TryFrom<u8> for NumberFilterCondition {
5555
}
5656
}
5757

58-
impl std::convert::From<Arc<FilterConfigurationRevision>> for NumberFilterConfigurationPB {
59-
fn from(rev: Arc<FilterConfigurationRevision>) -> Self {
60-
NumberFilterConfigurationPB {
58+
impl std::convert::From<Arc<FilterRevision>> for NumberFilterPB {
59+
fn from(rev: Arc<FilterRevision>) -> Self {
60+
NumberFilterPB {
6161
condition: NumberFilterCondition::try_from(rev.condition).unwrap_or(NumberFilterCondition::Equal),
6262
content: rev.content.clone(),
6363
}

frontend/rust-lib/flowy-grid/src/entities/filter_entities/select_option_filter.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use crate::services::field::SelectOptionIds;
22
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
33
use flowy_error::ErrorCode;
4-
use grid_rev_model::FilterConfigurationRevision;
4+
use grid_rev_model::FilterRevision;
55
use std::sync::Arc;
66

77
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
8-
pub struct SelectOptionFilterConfigurationPB {
8+
pub struct SelectOptionFilterPB {
99
#[pb(index = 1)]
1010
pub condition: SelectOptionCondition,
1111

@@ -21,9 +21,9 @@ pub enum SelectOptionCondition {
2121
OptionIsNotEmpty = 3,
2222
}
2323

24-
impl std::convert::From<SelectOptionCondition> for i32 {
24+
impl std::convert::From<SelectOptionCondition> for u32 {
2525
fn from(value: SelectOptionCondition) -> Self {
26-
value as i32
26+
value as u32
2727
}
2828
}
2929

@@ -47,10 +47,10 @@ impl std::convert::TryFrom<u8> for SelectOptionCondition {
4747
}
4848
}
4949

50-
impl std::convert::From<Arc<FilterConfigurationRevision>> for SelectOptionFilterConfigurationPB {
51-
fn from(rev: Arc<FilterConfigurationRevision>) -> Self {
50+
impl std::convert::From<Arc<FilterRevision>> for SelectOptionFilterPB {
51+
fn from(rev: Arc<FilterRevision>) -> Self {
5252
let ids = SelectOptionIds::from(rev.content.clone());
53-
SelectOptionFilterConfigurationPB {
53+
SelectOptionFilterPB {
5454
condition: SelectOptionCondition::try_from(rev.condition).unwrap_or(SelectOptionCondition::OptionIs),
5555
option_ids: ids.into_inner(),
5656
}

0 commit comments

Comments
 (0)