From 5de6a7447a13876596b6bc4ae60597cfd46c82e3 Mon Sep 17 00:00:00 2001 From: appflowy Date: Fri, 12 Aug 2022 16:05:56 +0800 Subject: [PATCH] chore: read group data from backend --- .../entities/group_entities/checkbox_group.rs | 7 -- .../entities/group_entities/configuration.rs | 56 +++++++++ .../src/entities/group_entities/date_group.rs | 26 ----- .../src/entities/group_entities/mod.rs | 14 +-- .../entities/group_entities/number_group.rs | 7 -- .../group_entities/select_option_group.rs | 7 -- .../src/entities/group_entities/text_group.rs | 7 -- .../src/entities/group_entities/url_group.rs | 7 -- .../src/services/cell/any_cell_data.rs | 16 ++- .../checkbox_type_option_entities.rs | 2 +- .../date_type_option/date_tests.rs | 4 +- .../date_type_option_entities.rs | 2 +- .../number_type_option_entities.rs | 15 ++- .../multi_select_type_option.rs | 2 +- .../selection_type_option/select_option.rs | 4 +- .../single_select_type_option.rs | 2 +- .../text_type_option/text_type_option.rs | 8 +- .../type_options/url_type_option/url_tests.rs | 2 +- .../url_type_option_entities.rs | 2 +- .../flowy-grid/src/services/grid_editor.rs | 3 +- .../src/services/group/group_configuration.rs | 70 ----------- .../group/group_generator/checkbox_group.rs | 46 +++++++- .../group/group_generator/date_group.rs | 5 - .../group/group_generator/generator.rs | 109 ++++++++++++------ .../src/services/group/group_generator/mod.rs | 8 -- .../group/group_generator/number_group.rs | 5 - .../group_generator/select_option_group.rs | 99 +++++++++++----- .../group/group_generator/text_group.rs | 5 - .../group/group_generator/url_group.rs | 5 - .../src/services/group/group_service.rs | 100 ++++++++++++---- .../flowy-grid/src/services/group/mod.rs | 2 - .../tests/grid/block_test/script.rs | 14 +-- .../rust-lib/flowy-grid/tests/grid/script.rs | 2 +- .../src/client_grid/grid_revision_pad.rs | 2 +- 34 files changed, 365 insertions(+), 300 deletions(-) delete mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/checkbox_group.rs create mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/date_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/number_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/select_option_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/text_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/entities/group_entities/url_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_configuration.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_generator/date_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_generator/number_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_generator/text_group.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_generator/url_group.rs diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/checkbox_group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/checkbox_group.rs deleted file mode 100644 index ba121694a7..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/checkbox_group.rs +++ /dev/null @@ -1,7 +0,0 @@ -use flowy_derive::ProtoBuf; - -#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct CheckboxGroupConfigurationPB { - #[pb(index = 1)] - pub(crate) hide_empty: bool, -} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs new file mode 100644 index 0000000000..baa39d91a2 --- /dev/null +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs @@ -0,0 +1,56 @@ +use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct UrlGroupConfigurationPB { + #[pb(index = 1)] + hide_empty: bool, +} + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct TextGroupConfigurationPB { + #[pb(index = 1)] + hide_empty: bool, +} + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct SelectOptionGroupConfigurationPB { + #[pb(index = 1)] + hide_empty: bool, +} + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct NumberGroupConfigurationPB { + #[pb(index = 1)] + hide_empty: bool, +} + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct DateGroupConfigurationPB { + #[pb(index = 1)] + pub condition: DateCondition, + + #[pb(index = 2)] + hide_empty: bool, +} + +#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)] +#[repr(u8)] +pub enum DateCondition { + Relative = 0, + Day = 1, + Week = 2, + Month = 3, + Year = 4, +} + +impl std::default::Default for DateCondition { + fn default() -> Self { + DateCondition::Relative + } +} + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct CheckboxGroupConfigurationPB { + #[pb(index = 1)] + pub(crate) hide_empty: bool, +} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/date_group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/date_group.rs deleted file mode 100644 index c117b22f8b..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/date_group.rs +++ /dev/null @@ -1,26 +0,0 @@ -use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; - -#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct DateGroupConfigurationPB { - #[pb(index = 1)] - pub condition: DateCondition, - - #[pb(index = 2)] - hide_empty: bool, -} - -#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)] -#[repr(u8)] -pub enum DateCondition { - Relative = 0, - Day = 1, - Week = 2, - Month = 3, - Year = 4, -} - -impl std::default::Default for DateCondition { - fn default() -> Self { - DateCondition::Relative - } -} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/mod.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/mod.rs index 1ededd3188..c1834c1009 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/mod.rs @@ -1,15 +1,5 @@ -mod checkbox_group; -mod date_group; +mod configuration; mod group; -mod number_group; -mod select_option_group; -mod text_group; -mod url_group; -pub use checkbox_group::*; -pub use date_group::*; +pub use configuration::*; pub use group::*; -pub use number_group::*; -pub use select_option_group::*; -pub use text_group::*; -pub use url_group::*; diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/number_group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/number_group.rs deleted file mode 100644 index ddb63a6ce5..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/number_group.rs +++ /dev/null @@ -1,7 +0,0 @@ -use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; - -#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct NumberGroupConfigurationPB { - #[pb(index = 1)] - hide_empty: bool, -} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/select_option_group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/select_option_group.rs deleted file mode 100644 index 67dfe8d1b7..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/select_option_group.rs +++ /dev/null @@ -1,7 +0,0 @@ -use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; - -#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct SelectOptionGroupConfigurationPB { - #[pb(index = 1)] - hide_empty: bool, -} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/text_group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/text_group.rs deleted file mode 100644 index b349850843..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/text_group.rs +++ /dev/null @@ -1,7 +0,0 @@ -use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; - -#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct TextGroupConfigurationPB { - #[pb(index = 1)] - hide_empty: bool, -} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/url_group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/url_group.rs deleted file mode 100644 index 955cb60ae3..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/url_group.rs +++ /dev/null @@ -1,7 +0,0 @@ -use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; - -#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct UrlGroupConfigurationPB { - #[pb(index = 1)] - hide_empty: bool, -} diff --git a/frontend/rust-lib/flowy-grid/src/services/cell/any_cell_data.rs b/frontend/rust-lib/flowy-grid/src/services/cell/any_cell_data.rs index 690f6f225f..8f76ea62c5 100644 --- a/frontend/rust-lib/flowy-grid/src/services/cell/any_cell_data.rs +++ b/frontend/rust-lib/flowy-grid/src/services/cell/any_cell_data.rs @@ -114,6 +114,11 @@ impl AnyCellData { pub struct CellBytes(pub Bytes); pub trait CellBytesParser { + type Object; + fn parser(bytes: &Bytes) -> FlowyResult; +} + +pub trait CellBytesCustomParser { type Object; fn parse(&self, bytes: &Bytes) -> FlowyResult; } @@ -132,11 +137,18 @@ impl CellBytes { Ok(Self(bytes)) } - pub fn with_parser

(&self) -> FlowyResult + pub fn parser

(&self) -> FlowyResult where P: CellBytesParser, { - P::parse(&self.0) + P::parser(&self.0) + } + + pub fn custom_parser

(&self, parser: P) -> FlowyResult + where + P: CellBytesCustomParser, + { + parser.parse(&self.0) } // pub fn parse<'a, T: TryFrom<&'a [u8]>>(&'a self) -> FlowyResult diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option_entities.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option_entities.rs index 3da9ebd23f..cfc123fad9 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option_entities.rs @@ -60,7 +60,7 @@ impl ToString for CheckboxCellData { pub struct CheckboxCellDataParser(); impl CellBytesParser for CheckboxCellDataParser { type Object = CheckboxCellData; - fn parse(&self, bytes: &Bytes) -> FlowyResult { + fn parser(bytes: &Bytes) -> FlowyResult { match String::from_utf8(bytes.to_vec()) { Ok(s) => CheckboxCellData::from_str(&s), Err(_) => Ok(CheckboxCellData("".to_string())), diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs index 5bdc39ed71..ea5a33871a 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs @@ -3,7 +3,7 @@ mod tests { use crate::entities::FieldType; use crate::services::cell::CellDataOperation; use crate::services::field::*; - // use crate::services::field::{DateCellChangeset, DateCellData, DateFormat, DateTypeOption, TimeFormat}; + // use crate::services::field::{DateCellChangeset, DateCellData, DateFormat, DateTypeOptionPB, TimeFormat}; use flowy_grid_data_model::revision::FieldRevision; use strum::IntoEnumIterator; @@ -137,7 +137,7 @@ mod tests { let decoded_data = type_option .decode_cell_data(encoded_data.into(), &FieldType::DateTime, field_rev) .unwrap() - .with_parser(DateCellDataParser()) + .parser::() .unwrap(); if type_option.include_time { diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option_entities.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option_entities.rs index 1c54606f75..98be107941 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option_entities.rs @@ -204,7 +204,7 @@ pub struct DateCellDataParser(); impl CellBytesParser for DateCellDataParser { type Object = DateCellDataPB; - fn parse(&self, bytes: &Bytes) -> FlowyResult { + fn parser(bytes: &Bytes) -> FlowyResult { DateCellDataPB::try_from(bytes.as_ref()).map_err(internal_error) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option_entities.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option_entities.rs index 6297114a07..aa372222b8 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option_entities.rs @@ -1,4 +1,4 @@ -use crate::services::cell::CellBytesParser; +use crate::services::cell::{CellBytesCustomParser, CellBytesParser}; use crate::services::field::number_currency::Currency; use crate::services::field::{strip_currency_symbol, NumberFormat, STRIP_SYMBOL}; use bytes::Bytes; @@ -93,8 +93,19 @@ impl ToString for NumberCellData { } } } -pub struct NumberCellDataParser(pub NumberFormat); +pub struct NumberCellDataParser(); impl CellBytesParser for NumberCellDataParser { + type Object = NumberCellData; + fn parser(bytes: &Bytes) -> FlowyResult { + match String::from_utf8(bytes.to_vec()) { + Ok(s) => NumberCellData::from_format_str(&s, true, &NumberFormat::Num), + Err(_) => Ok(NumberCellData::default()), + } + } +} + +pub struct NumberCellCustomDataParser(pub NumberFormat); +impl CellBytesCustomParser for NumberCellCustomDataParser { type Object = NumberCellData; fn parse(&self, bytes: &Bytes) -> FlowyResult { match String::from_utf8(bytes.to_vec()) { diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs index a09c81e97f..0bffef4c52 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs @@ -180,7 +180,7 @@ mod tests { type_option .decode_cell_data(cell_data.into(), &field_type, field_rev) .unwrap() - .with_parser(SelectOptionCellDataParser()) + .parser::() .unwrap() .select_options, ); diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs index 3e6c95c5ec..5538ff24c7 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs @@ -206,7 +206,7 @@ impl std::ops::DerefMut for SelectOptionIds { pub struct SelectOptionIdsParser(); impl CellBytesParser for SelectOptionIdsParser { type Object = SelectOptionIds; - fn parse(&self, bytes: &Bytes) -> FlowyResult { + fn parser(bytes: &Bytes) -> FlowyResult { match String::from_utf8(bytes.to_vec()) { Ok(s) => Ok(SelectOptionIds::from(s)), Err(_) => Ok(SelectOptionIds::from("".to_owned())), @@ -218,7 +218,7 @@ pub struct SelectOptionCellDataParser(); impl CellBytesParser for SelectOptionCellDataParser { type Object = SelectOptionCellDataPB; - fn parse(&self, bytes: &Bytes) -> FlowyResult { + fn parser(bytes: &Bytes) -> FlowyResult { SelectOptionCellDataPB::try_from(bytes.as_ref()).map_err(internal_error) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs index 8722b3a479..2380079a7f 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs @@ -162,7 +162,7 @@ mod tests { type_option .decode_cell_data(cell_data.into(), &field_type, field_rev) .unwrap() - .with_parser(SelectOptionCellDataParser()) + .parser::() .unwrap() .select_options, ); diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs index 00ea95125f..f21ca91f8c 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs @@ -96,7 +96,7 @@ impl FromCellString for TextCellData { pub struct TextCellDataParser(); impl CellBytesParser for TextCellDataParser { type Object = TextCellData; - fn parse(&self, bytes: &Bytes) -> FlowyResult { + fn parser(bytes: &Bytes) -> FlowyResult { match String::from_utf8(bytes.to_vec()) { Ok(s) => Ok(TextCellData(s)), Err(_) => Ok(TextCellData("".to_owned())), @@ -124,7 +124,7 @@ mod tests { type_option .decode_cell_data(1647251762.to_string().into(), &field_type, &date_time_field_rev) .unwrap() - .with_parser(DateCellDataParser()) + .parser::() .unwrap() .date, "Mar 14,2022".to_owned() @@ -144,7 +144,7 @@ mod tests { &single_select_field_rev ) .unwrap() - .with_parser(SelectOptionCellDataParser()) + .parser::() .unwrap() .select_options, vec![done_option], @@ -167,7 +167,7 @@ mod tests { type_option .decode_cell_data(cell_data.into(), &FieldType::MultiSelect, &multi_select_field_rev) .unwrap() - .with_parser(SelectOptionCellDataParser()) + .parser::() .unwrap() .select_options, vec![google_option, facebook_option] diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_tests.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_tests.rs index ddccfdb606..97b8275287 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_tests.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_tests.rs @@ -184,7 +184,7 @@ mod tests { type_option .decode_cell_data(encoded_data.into(), field_type, field_rev) .unwrap() - .with_parser(URLCellDataParser()) + .parser::() .unwrap() } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option_entities.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option_entities.rs index 6ff77cea9a..46e67fdf18 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option_entities.rs @@ -30,7 +30,7 @@ pub struct URLCellDataParser(); impl CellBytesParser for URLCellDataParser { type Object = URLCellDataPB; - fn parse(&self, bytes: &Bytes) -> FlowyResult { + fn parser(bytes: &Bytes) -> FlowyResult { URLCellDataPB::try_from(bytes.as_ref()).map_err(internal_error) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index b0cab2f5af..f2e28701df 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -564,8 +564,9 @@ impl GridRevisionEditor { }) } + #[tracing::instrument(level = "trace", skip_all, err)] pub async fn load_groups(&self) -> FlowyResult { - let groups = self.group_service.load_groups().await.unwrap_or(vec![]); + let groups = self.group_service.load_groups().await.unwrap_or_default(); Ok(RepeatedGridGroupPB { items: groups }) } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_configuration.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_configuration.rs deleted file mode 100644 index b67e4f5404..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_configuration.rs +++ /dev/null @@ -1,70 +0,0 @@ -use crate::entities::{ - CheckboxGroupConfigurationPB, DateGroupConfigurationPB, NumberGroupConfigurationPB, - SelectOptionGroupConfigurationPB, TextGroupConfigurationPB, UrlGroupConfigurationPB, -}; -use crate::services::cell::CellBytes; -use crate::services::field::{ - CheckboxCellDataParser, DateCellDataParser, NumberCellDataParser, NumberFormat, SelectOptionCellDataParser, - TextCellDataParser, URLCellDataParser, -}; -use crate::services::group::GroupAction; - -// impl GroupAction for TextGroupConfigurationPB { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// if let Ok(cell_data) = cell_bytes.with_parser(TextCellDataParser()) { -// cell_data.as_ref() == content -// } else { -// false -// } -// } -// } -// -// impl GroupAction for NumberGroupConfigurationPB { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// if let Ok(cell_data) = cell_bytes.with_parser(NumberCellDataParser(NumberFormat::Num)) { -// false -// } else { -// false -// } -// } -// } -// -// impl GroupAction for DateGroupConfigurationPB { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// if let Ok(cell_data) = cell_bytes.with_parser(DateCellDataParser()) { -// false -// } else { -// false -// } -// } -// } -// -// impl GroupAction for SelectOptionGroupConfigurationPB { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// if let Ok(cell_data) = cell_bytes.with_parser(SelectOptionCellDataParser()) { -// false -// } else { -// false -// } -// } -// } -// -// impl GroupAction for UrlGroupConfigurationPB { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// if let Ok(cell_data) = cell_bytes.with_parser(URLCellDataParser()) { -// false -// } else { -// false -// } -// } -// } -// -// impl GroupAction for CheckboxGroupConfigurationPB { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// if let Ok(cell_data) = cell_bytes.with_parser(CheckboxCellDataParser()) { -// false -// } else { -// false -// } -// } -// } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/checkbox_group.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/checkbox_group.rs index 43df16d196..32b699d3a1 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/checkbox_group.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/checkbox_group.rs @@ -1,7 +1,43 @@ use crate::entities::CheckboxGroupConfigurationPB; -use crate::services::cell::{AnyCellData, CellData, CellGroupOperation}; -use crate::services::field::{CheckboxCellData, CheckboxTypeOptionPB}; -use crate::services::group::GroupController; -use flowy_error::FlowyResult; -// pub type CheckboxGroupGenerator = GroupGenerator; +use crate::services::field::{CheckboxCellData, CheckboxCellDataParser, CheckboxTypeOptionPB, CHECK, UNCHECK}; +use crate::services::group::{Group, GroupAction, GroupCellContentProvider, GroupController, GroupGenerator}; + +pub type CheckboxGroupController = + GroupController; + +pub struct CheckboxGroupGenerator(); +impl GroupGenerator for CheckboxGroupGenerator { + type ConfigurationType = CheckboxGroupConfigurationPB; + type TypeOptionType = CheckboxTypeOptionPB; + + fn gen_groups( + _configuration: &Option, + _type_option: &Option, + _cell_content_provider: &dyn GroupCellContentProvider, + ) -> Vec { + let check_group = Group { + id: "true".to_string(), + desc: "".to_string(), + rows: vec![], + content: CHECK.to_string(), + }; + + let uncheck_group = Group { + id: "false".to_string(), + desc: "".to_string(), + rows: vec![], + content: UNCHECK.to_string(), + }; + + vec![check_group, uncheck_group] + } +} + +impl GroupAction for CheckboxGroupController { + type CellDataType = CheckboxCellData; + + fn should_group(&self, _content: &str, _cell_data: &Self::CellDataType) -> bool { + false + } +} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/date_group.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/date_group.rs deleted file mode 100644 index d0cda990d3..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/date_group.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::entities::CheckboxGroupConfigurationPB; -use crate::services::field::DateTypeOptionPB; -use crate::services::group::GroupController; - -// pub type CheckboxGroupGenerator = GroupGenerator; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/generator.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/generator.rs index 66e195c814..4740e6e7bb 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/generator.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/generator.rs @@ -1,52 +1,70 @@ -use crate::services::cell::{decode_any_cell_data, CellBytes, CellBytesParser}; +use crate::entities::{GroupPB, RowPB}; +use crate::services::cell::{decode_any_cell_data, CellBytesParser}; use bytes::Bytes; use flowy_error::FlowyResult; use flowy_grid_data_model::revision::{ - CellRevision, FieldRevision, GroupConfigurationRevision, RowRevision, TypeOptionDataDeserializer, + FieldRevision, GroupConfigurationRevision, RowRevision, TypeOptionDataDeserializer, }; -use std::collections::HashMap; +use indexmap::IndexMap; use std::marker::PhantomData; use std::sync::Arc; -pub trait GroupAction { - fn should_group(&self, content: &str, cell_data: CD) -> bool; +pub trait GroupAction { + type CellDataType; + + fn should_group(&self, content: &str, cell_data: &Self::CellDataType) -> bool; } pub trait GroupCellContentProvider { /// We need to group the rows base on the deduplication cell content when the field type is /// RichText. - fn deduplication_cell_content(&self, field_id: &str) -> Vec { + fn deduplication_cell_content(&self, _field_id: &str) -> Vec { vec![] } } -pub trait GroupGenerator { +pub trait GroupGenerator { + type ConfigurationType; + type TypeOptionType; + fn gen_groups( - configuration: &Option, - type_option: &Option, + configuration: &Option, + type_option: &Option, cell_content_provider: &dyn GroupCellContentProvider, - ) -> HashMap; + ) -> Vec; } pub struct GroupController { - field_rev: Arc, - groups: HashMap, - type_option: Option, - configuration: Option, + pub field_rev: Arc, + pub groups: IndexMap, + pub type_option: Option, + pub configuration: Option, group_action_phantom: PhantomData, cell_parser_phantom: PhantomData, } pub struct Group { - row_ids: Vec, - content: String, + pub id: String, + pub desc: String, + pub rows: Vec, + pub content: String, +} + +impl std::convert::From for GroupPB { + fn from(group: Group) -> Self { + Self { + group_id: group.id, + desc: group.desc, + rows: group.rows, + } + } } impl GroupController where C: TryFrom, T: TypeOptionDataDeserializer, - G: GroupGenerator, + G: GroupGenerator, { pub fn new( field_rev: Arc, @@ -57,46 +75,63 @@ where None => None, Some(content) => Some(C::try_from(Bytes::from(content))?), }; - let field_type_rev = field_rev.field_type_rev.clone(); + let field_type_rev = field_rev.field_type_rev; let type_option = field_rev.get_type_option_entry::(field_type_rev); + let groups = G::gen_groups(&configuration, &type_option, cell_content_provider); Ok(Self { field_rev, - groups: G::gen_groups(&configuration, &type_option, cell_content_provider), + groups: groups.into_iter().map(|group| (group.id.clone(), group)).collect(), type_option, configuration, group_action_phantom: PhantomData, cell_parser_phantom: PhantomData, }) } + + pub fn take_groups(self) -> Vec { + self.groups.into_values().collect() + } } impl GroupController where CP: CellBytesParser, - Self: GroupAction, + Self: GroupAction, { - pub fn group_row(&mut self, row: &RowRevision) { + pub fn group_rows(&mut self, rows: &[Arc]) -> FlowyResult<()> { if self.configuration.is_none() { - return; + return Ok(()); } - if let Some(cell_rev) = row.cells.get(&self.field_rev.id) { - let mut group_row_id = None; - let cell_bytes = decode_any_cell_data(cell_rev.data.clone(), &self.field_rev); - // let cell_data = cell_bytes.with_parser(CP); - for group in self.groups.values() { - let cell_rev: CellRevision = cell_rev.clone(); - // if self.should_group(&group.content, cell_bytes) { - // group_row_id = Some(row.id.clone()); - // break; - // } - } + for row in rows { + if let Some(cell_rev) = row.cells.get(&self.field_rev.id) { + let mut records: Vec = vec![]; - if let Some(group_row_id) = group_row_id { - self.groups.get_mut(&group_row_id).map(|group| { - group.row_ids.push(group_row_id); - }); + let cell_bytes = decode_any_cell_data(cell_rev.data.clone(), &self.field_rev); + let cell_data = cell_bytes.parser::()?; + for group in self.groups.values() { + if self.should_group(&group.content, &cell_data) { + records.push(GroupRecord { + row: row.into(), + group_id: group.id.clone(), + }); + break; + } + } + + for record in records { + if let Some(group) = self.groups.get_mut(&record.group_id) { + group.rows.push(record.row); + } + } } } + + Ok(()) } } + +struct GroupRecord { + row: RowPB, + group_id: String, +} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/mod.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/mod.rs index dc6fe6eb01..2225087fb8 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/mod.rs @@ -1,15 +1,7 @@ mod checkbox_group; -mod date_group; mod generator; -mod number_group; mod select_option_group; -mod text_group; -mod url_group; pub use checkbox_group::*; -pub use date_group::*; pub use generator::*; -pub use number_group::*; pub use select_option_group::*; -pub use text_group::*; -pub use url_group::*; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/number_group.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/number_group.rs deleted file mode 100644 index 1f0af9f024..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/number_group.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::entities::NumberGroupConfigurationPB; -use crate::services::field::NumberTypeOptionPB; -use crate::services::group::GroupController; - -// pub type NumberGroupGenerator = GroupGenerator; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/select_option_group.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/select_option_group.rs index 9de4bf08e3..bc4f1c4709 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/select_option_group.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/select_option_group.rs @@ -1,12 +1,11 @@ use crate::entities::SelectOptionGroupConfigurationPB; -use crate::services::cell::CellBytes; + use crate::services::field::{ - MultiSelectTypeOptionPB, SelectOptionCellDataPB, SelectOptionCellDataParser, SelectedSelectOptions, - SingleSelectTypeOptionPB, + MultiSelectTypeOptionPB, SelectOptionCellDataPB, SelectOptionCellDataParser, SingleSelectTypeOptionPB, }; use crate::services::group::{Group, GroupAction, GroupCellContentProvider, GroupController, GroupGenerator}; -use std::collections::HashMap; +// SingleSelect pub type SingleSelectGroupController = GroupController< SelectOptionGroupConfigurationPB, SingleSelectTypeOptionPB, @@ -15,38 +14,74 @@ pub type SingleSelectGroupController = GroupController< >; pub struct SingleSelectGroupGenerator(); -impl GroupGenerator for SingleSelectGroupGenerator { +impl GroupGenerator for SingleSelectGroupGenerator { + type ConfigurationType = SelectOptionGroupConfigurationPB; + type TypeOptionType = SingleSelectTypeOptionPB; fn gen_groups( - configuration: &Option, - type_option: &Option, - cell_content_provider: &dyn GroupCellContentProvider, - ) -> HashMap { - todo!() + _configuration: &Option, + type_option: &Option, + _cell_content_provider: &dyn GroupCellContentProvider, + ) -> Vec { + match type_option { + None => vec![], + Some(type_option) => type_option + .options + .iter() + .map(|option| Group { + id: option.id.clone(), + desc: option.name.clone(), + rows: vec![], + content: option.id.clone(), + }) + .collect(), + } } } -impl GroupAction for SingleSelectGroupController { - fn should_group(&self, content: &str, cell_data: SelectOptionCellDataPB) -> bool { - todo!() +impl GroupAction for SingleSelectGroupController { + type CellDataType = SelectOptionCellDataPB; + fn should_group(&self, content: &str, cell_data: &SelectOptionCellDataPB) -> bool { + cell_data.select_options.iter().any(|option| option.id == content) } } -// pub type MultiSelectGroupController = -// GroupController; -// -// pub struct MultiSelectGroupGenerator(); -// impl GroupGenerator for MultiSelectGroupGenerator { -// fn gen_groups( -// configuration: &Option, -// type_option: &Option, -// cell_content_provider: &dyn GroupCellContentProvider, -// ) -> HashMap { -// todo!() -// } -// } -// -// impl GroupAction for MultiSelectGroupController { -// fn should_group(&self, content: &str, cell_bytes: CellBytes) -> bool { -// todo!() -// } -// } +// MultiSelect +pub type MultiSelectGroupController = GroupController< + SelectOptionGroupConfigurationPB, + MultiSelectTypeOptionPB, + MultiSelectGroupGenerator, + SelectOptionCellDataParser, +>; + +pub struct MultiSelectGroupGenerator(); +impl GroupGenerator for MultiSelectGroupGenerator { + type ConfigurationType = SelectOptionGroupConfigurationPB; + type TypeOptionType = MultiSelectTypeOptionPB; + + fn gen_groups( + _configuration: &Option, + type_option: &Option, + _cell_content_provider: &dyn GroupCellContentProvider, + ) -> Vec { + match type_option { + None => vec![], + Some(type_option) => type_option + .options + .iter() + .map(|option| Group { + id: option.id.clone(), + desc: option.name.clone(), + rows: vec![], + content: option.id.clone(), + }) + .collect(), + } + } +} + +impl GroupAction for MultiSelectGroupController { + type CellDataType = SelectOptionCellDataPB; + fn should_group(&self, content: &str, cell_data: &SelectOptionCellDataPB) -> bool { + cell_data.select_options.iter().any(|option| option.id == content) + } +} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/text_group.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/text_group.rs deleted file mode 100644 index 4a1a30f0fa..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/text_group.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::entities::TextGroupConfigurationPB; -use crate::services::field::RichTextTypeOptionPB; -use crate::services::group::GroupController; - -// pub type TextGroupGenerator = GroupGenerator; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/url_group.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/url_group.rs deleted file mode 100644 index edc10913a7..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/url_group.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::entities::UrlGroupConfigurationPB; -use crate::services::field::URLTypeOptionPB; -use crate::services::group::GroupController; - -// pub type UrlGroupGenerator = GroupGenerator; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs index c3727781fa..5be0141ca9 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs @@ -1,15 +1,16 @@ +use crate::services::block_manager::GridBlockManager; +use crate::services::grid_editor_task::GridServiceTaskScheduler; +use crate::services::group::{ + CheckboxGroupController, Group, GroupCellContentProvider, MultiSelectGroupController, SingleSelectGroupController, +}; + use crate::entities::{ CheckboxGroupConfigurationPB, DateGroupConfigurationPB, FieldType, GroupPB, NumberGroupConfigurationPB, SelectOptionGroupConfigurationPB, TextGroupConfigurationPB, UrlGroupConfigurationPB, }; -use crate::services::block_manager::GridBlockManager; -use crate::services::cell::{decode_any_cell_data, CellBytes}; -use crate::services::field::TextCellDataParser; -use crate::services::grid_editor_task::GridServiceTaskScheduler; -use crate::services::group::{GroupAction, GroupCellContentProvider, SingleSelectGroupController}; use bytes::Bytes; use flowy_error::FlowyResult; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, GroupConfigurationRevision, RowRevision}; +use flowy_grid_data_model::revision::{gen_grid_group_id, FieldRevision, GroupConfigurationRevision, RowRevision}; use flowy_sync::client_grid::GridRevisionPad; use std::sync::Arc; use tokio::sync::RwLock; @@ -39,53 +40,102 @@ impl GridGroupService { pub(crate) async fn load_groups(&self) -> Option> { let grid_pad = self.grid_pad.read().await; - let field_rev = find_group_field(grid_pad.fields())?; - let field_type: FieldType = field_rev.field_type_rev.clone().into(); - let setting = grid_pad.get_setting_rev(); - let mut configurations = setting.get_groups(&setting.layout, &field_rev.id, &field_rev.field_type_rev)?; - - if configurations.is_empty() { - return None; - } - assert_eq!(configurations.len(), 1); - let configuration = (&*configurations.pop().unwrap()).clone(); + let field_rev = find_group_field(grid_pad.fields()).unwrap(); + let field_type: FieldType = field_rev.field_type_rev.into(); + let configuration = self.get_group_configuration(field_rev).await; let blocks = self.block_manager.get_block_snapshots(None).await.unwrap(); - let row_revs = blocks .into_iter() .map(|block| block.row_revs) .flatten() .collect::>>(); - // let a = SingleSelectGroupController::new; - // let b = a(field_rev.clone(), configuration, &self.grid_pad); + match self.build_groups(&field_type, field_rev, row_revs, configuration) { + Ok(groups) => Some(groups), + Err(_) => None, + } + } - let groups = match field_type { + async fn get_group_configuration(&self, field_rev: &FieldRevision) -> GroupConfigurationRevision { + let grid_pad = self.grid_pad.read().await; + let setting = grid_pad.get_setting_rev(); + let layout = &setting.layout; + let configurations = setting.get_groups(layout, &field_rev.id, &field_rev.field_type_rev); + match configurations { + None => self.default_group_configuration(field_rev), + Some(mut configurations) => { + assert_eq!(configurations.len(), 1); + (&*configurations.pop().unwrap()).clone() + } + } + } + + fn default_group_configuration(&self, field_rev: &FieldRevision) -> GroupConfigurationRevision { + let field_type: FieldType = field_rev.field_type_rev.clone().into(); + let bytes: Bytes = match field_type { + FieldType::RichText => TextGroupConfigurationPB::default().try_into().unwrap(), + FieldType::Number => NumberGroupConfigurationPB::default().try_into().unwrap(), + FieldType::DateTime => DateGroupConfigurationPB::default().try_into().unwrap(), + FieldType::SingleSelect => SelectOptionGroupConfigurationPB::default().try_into().unwrap(), + FieldType::MultiSelect => SelectOptionGroupConfigurationPB::default().try_into().unwrap(), + FieldType::Checkbox => CheckboxGroupConfigurationPB::default().try_into().unwrap(), + FieldType::URL => UrlGroupConfigurationPB::default().try_into().unwrap(), + }; + GroupConfigurationRevision { + id: gen_grid_group_id(), + field_id: field_rev.id.clone(), + field_type_rev: field_rev.field_type_rev.clone(), + content: Some(bytes.to_vec()), + } + } + + #[tracing::instrument(level = "trace", skip_all, err)] + fn build_groups( + &self, + field_type: &FieldType, + field_rev: &Arc, + row_revs: Vec>, + configuration: GroupConfigurationRevision, + ) -> FlowyResult> { + let groups: Vec = match field_type { FieldType::RichText => { // let generator = GroupGenerator::::from_configuration(configuration); + vec![] } FieldType::Number => { // let generator = GroupGenerator::::from_configuration(configuration); + vec![] } FieldType::DateTime => { // let generator = GroupGenerator::::from_configuration(configuration); + vec![] } FieldType::SingleSelect => { - let group_controller = - SingleSelectGroupController::new(field_rev.clone(), configuration, &self.grid_pad); + let mut group_controller = + SingleSelectGroupController::new(field_rev.clone(), configuration, &self.grid_pad)?; + let _ = group_controller.group_rows(&row_revs)?; + group_controller.take_groups() } FieldType::MultiSelect => { - // let group_generator = MultiSelectGroupControllern(configuration); + let mut group_controller = + MultiSelectGroupController::new(field_rev.clone(), configuration, &self.grid_pad)?; + let _ = group_controller.group_rows(&row_revs)?; + group_controller.take_groups() } FieldType::Checkbox => { - // let generator = GroupGenerator::::from_configuration(configuration); + let mut group_controller = + CheckboxGroupController::new(field_rev.clone(), configuration, &self.grid_pad)?; + let _ = group_controller.group_rows(&row_revs)?; + group_controller.take_groups() } FieldType::URL => { // let generator = GroupGenerator::::from_configuration(configuration); + vec![] } }; - None + + Ok(groups.into_iter().map(GroupPB::from).collect()) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs index 4481e344e8..15b401f4c0 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs @@ -1,7 +1,5 @@ -mod group_configuration; mod group_generator; mod group_service; -pub(crate) use group_configuration::*; pub(crate) use group_generator::*; pub(crate) use group_service::*; diff --git a/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs index b25bb044fc..f4e32e1406 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs @@ -162,7 +162,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(TextCellDataParser()) + .parser::() .unwrap(); assert_eq!(cell_data.as_ref(), &expected); @@ -177,7 +177,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(NumberCellDataParser(number_type_option.format)) + .custom_parser(NumberCellCustomDataParser(number_type_option.format)) .unwrap(); assert_eq!(cell_data.to_string(), expected); } @@ -187,7 +187,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(DateCellDataParser()) + .parser::() .unwrap(); assert_eq!(cell_data.date, expected); @@ -198,7 +198,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(SelectOptionCellDataParser()) + .parser::() .unwrap(); let select_option = cell_data.select_options.first().unwrap(); assert_eq!(select_option.name, expected); @@ -209,7 +209,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(SelectOptionCellDataParser()) + .parser::() .unwrap(); let s = cell_data @@ -228,7 +228,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(CheckboxCellDataParser()) + .parser::() .unwrap(); assert_eq!(cell_data.to_string(), expected); } @@ -238,7 +238,7 @@ impl GridRowTest { .get_cell_bytes(&cell_id) .await .unwrap() - .with_parser(URLCellDataParser()) + .parser::() .unwrap(); assert_eq!(cell_data.content, expected); diff --git a/frontend/rust-lib/flowy-grid/tests/grid/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/script.rs index c1fa47c7a9..c9ea583a14 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/script.rs @@ -259,7 +259,7 @@ pub fn create_text_field(grid_id: &str) -> (InsertFieldParams, FieldMeta) { let cloned_field_meta = field_meta.clone(); let type_option_data = field_meta - .get_type_option_entry::(&field_meta.field_type) + .get_type_option_entry::(&field_meta.field_type) .unwrap() .protobuf_bytes() .to_vec(); diff --git a/shared-lib/flowy-sync/src/client_grid/grid_revision_pad.rs b/shared-lib/flowy-sync/src/client_grid/grid_revision_pad.rs index a762103e57..46b278a1af 100644 --- a/shared-lib/flowy-sync/src/client_grid/grid_revision_pad.rs +++ b/shared-lib/flowy-sync/src/client_grid/grid_revision_pad.rs @@ -572,7 +572,7 @@ fn make_group_revision(params: &CreateGridGroupParams) -> GroupConfigurationRevi GroupConfigurationRevision { id: gen_grid_group_id(), field_id: params.field_id.clone(), - field_type_rev: params.field_type_rev.clone(), + field_type_rev: params.field_type_rev, content: params.content.clone(), } }