diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/board_card.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/board_card.rs deleted file mode 100644 index 1ba3991f96..0000000000 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/board_card.rs +++ /dev/null @@ -1,28 +0,0 @@ -use crate::entities::{CreateRowParams, GridLayout}; -use flowy_derive::ProtoBuf; -use flowy_error::ErrorCode; -use flowy_grid_data_model::parser::NotEmptyStr; - -#[derive(ProtoBuf, Debug, Default, Clone)] -pub struct CreateBoardCardPayloadPB { - #[pb(index = 1)] - pub grid_id: String, - - #[pb(index = 2)] - pub group_id: String, -} - -impl TryInto for CreateBoardCardPayloadPB { - type Error = ErrorCode; - - fn try_into(self) -> Result { - let grid_id = NotEmptyStr::parse(self.grid_id).map_err(|_| ErrorCode::GridIdIsEmpty)?; - let group_id = NotEmptyStr::parse(self.group_id).map_err(|_| ErrorCode::GroupIdIsEmpty)?; - Ok(CreateRowParams { - grid_id: grid_id.0, - start_row_id: None, - group_id: Some(group_id.0), - layout: GridLayout::Board, - }) - } -} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs index 0024040078..b769b18154 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs @@ -1,4 +1,4 @@ -use crate::entities::{FieldType, RowPB}; +use crate::entities::{CreateRowParams, FieldType, GridLayout, RowPB}; use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; use flowy_grid_data_model::parser::NotEmptyStr; @@ -6,6 +6,30 @@ use flowy_grid_data_model::revision::{FieldTypeRevision, GroupConfigurationRevis use std::convert::TryInto; use std::sync::Arc; +#[derive(ProtoBuf, Debug, Default, Clone)] +pub struct CreateBoardCardPayloadPB { + #[pb(index = 1)] + pub grid_id: String, + + #[pb(index = 2)] + pub group_id: String, +} + +impl TryInto for CreateBoardCardPayloadPB { + type Error = ErrorCode; + + fn try_into(self) -> Result { + let grid_id = NotEmptyStr::parse(self.grid_id).map_err(|_| ErrorCode::GridIdIsEmpty)?; + let group_id = NotEmptyStr::parse(self.group_id).map_err(|_| ErrorCode::GroupIdIsEmpty)?; + Ok(CreateRowParams { + grid_id: grid_id.0, + start_row_id: None, + group_id: Some(group_id.0), + layout: GridLayout::Board, + }) + } +} + #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct GridGroupConfigurationPB { #[pb(index = 1)] 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 f5daa803bc..778eff4cc9 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,9 +1,7 @@ -mod board_card; mod configuration; mod group; mod group_changeset; -pub use board_card::*; pub use configuration::*; pub use group::*; pub use group_changeset::*; 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 581f735994..055501e117 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -96,23 +96,19 @@ impl GridRevisionEditor { } = params; let field_id = field.id.clone(); if self.contain_field(&field_id).await { - let _ = self - .modify(|grid| { - let deserializer = TypeOptionJsonDeserializer(field.field_type.clone()); - let changeset = FieldChangesetParams { - field_id: field.id, - grid_id, - name: Some(field.name), - desc: Some(field.desc), - field_type: Some(field.field_type.into()), - frozen: Some(field.frozen), - visibility: Some(field.visibility), - width: Some(field.width), - type_option_data: Some(type_option_data), - }; - Ok(grid.update_field_rev(changeset, deserializer)?) - }) - .await?; + let changeset = FieldChangesetParams { + field_id: field.id, + grid_id, + name: Some(field.name), + desc: Some(field.desc), + field_type: Some(field.field_type.into()), + frozen: Some(field.frozen), + visibility: Some(field.visibility), + width: Some(field.width), + type_option_data: Some(type_option_data), + }; + + let _ = self.update_field_rev(changeset, field.field_type.clone()).await?; let _ = self.notify_did_update_grid_field(&field_id).await?; } else { let _ = self @@ -140,19 +136,13 @@ impl GridRevisionEditor { return Ok(()); } let field_rev = result.unwrap(); - let _ = self - .modify(|grid| { - let field_type = field_rev.ty.into(); - let deserializer = TypeOptionJsonDeserializer(field_type); - let changeset = FieldChangesetParams { - field_id: field_id.to_owned(), - grid_id: grid_id.to_owned(), - type_option_data: Some(type_option_data), - ..Default::default() - }; - Ok(grid.update_field_rev(changeset, deserializer)?) - }) - .await?; + let changeset = FieldChangesetParams { + field_id: field_id.to_owned(), + grid_id: grid_id.to_owned(), + type_option_data: Some(type_option_data), + ..Default::default() + }; + let _ = self.update_field_rev(changeset, field_rev.ty.into()).await?; let _ = self.notify_did_update_grid_field(field_id).await?; Ok(()) } @@ -179,17 +169,19 @@ impl GridRevisionEditor { pub async fn update_field(&self, params: FieldChangesetParams) -> FlowyResult<()> { let field_id = params.field_id.clone(); - let json_deserializer = match self.grid_pad.read().await.get_field_rev(params.field_id.as_str()) { - None => return Err(ErrorCode::FieldDoesNotExist.into()), - Some((_, field_rev)) => TypeOptionJsonDeserializer(field_rev.ty.into()), + let field_type: Option = match self.grid_pad.read().await.get_field_rev(params.field_id.as_str()) { + None => None, + Some((_, field_rev)) => Some(field_rev.ty.into()), }; - let _ = self - .modify(|grid| Ok(grid.update_field_rev(params, json_deserializer)?)) - .await?; - - let _ = self.notify_did_update_grid_field(&field_id).await?; - Ok(()) + match field_type { + None => Err(ErrorCode::FieldDoesNotExist.into()), + Some(field_type) => { + let _ = self.update_field_rev(params, field_type).await?; + let _ = self.notify_did_update_grid_field(&field_id).await?; + Ok(()) + } + } } pub async fn replace_field(&self, field_rev: Arc) -> FlowyResult<()> { @@ -269,6 +261,63 @@ impl GridRevisionEditor { Ok(field_revs) } + async fn update_field_rev(&self, params: FieldChangesetParams, field_type: FieldType) -> FlowyResult<()> { + let _ = self + .modify(|grid| { + let deserializer = TypeOptionJsonDeserializer(field_type); + + let changeset = grid.modify_field(¶ms.field_id, |field| { + let mut is_changed = None; + if let Some(name) = changeset.name { + field.name = name; + is_changed = Some(()) + } + + if let Some(desc) = changeset.desc { + field.desc = desc; + is_changed = Some(()) + } + + if let Some(field_type) = changeset.field_type { + field.ty = field_type; + is_changed = Some(()) + } + + if let Some(frozen) = changeset.frozen { + field.frozen = frozen; + is_changed = Some(()) + } + + if let Some(visibility) = changeset.visibility { + field.visibility = visibility; + is_changed = Some(()) + } + + if let Some(width) = changeset.width { + field.width = width; + is_changed = Some(()) + } + + if let Some(type_option_data) = changeset.type_option_data { + match deserializer.deserialize(type_option_data) { + Ok(json_str) => { + let field_type = field.ty; + field.insert_type_option_str(&field_type, json_str); + is_changed = Some(()) + } + Err(err) => { + tracing::error!("Deserialize data to type option json failed: {}", err); + } + } + } + + Ok(is_changed) + })?; + Ok(changeset) + }) + .await?; + } + pub async fn create_block(&self, block_meta_rev: GridBlockMetaRevision) -> FlowyResult<()> { let _ = self .modify(|grid_pad| Ok(grid_pad.create_block_meta_rev(block_meta_rev)?)) 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/controllers/checkbox_controller.rs similarity index 100% rename from frontend/rust-lib/flowy-grid/src/services/group/group_generator/checkbox_group.rs rename to frontend/rust-lib/flowy-grid/src/services/group/controllers/checkbox_controller.rs diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/group_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controllers/group_controller.rs similarity index 100% rename from frontend/rust-lib/flowy-grid/src/services/group/group_generator/group_controller.rs rename to frontend/rust-lib/flowy-grid/src/services/group/controllers/group_controller.rs diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controllers/mod.rs b/frontend/rust-lib/flowy-grid/src/services/group/controllers/mod.rs new file mode 100644 index 0000000000..29ce5d091e --- /dev/null +++ b/frontend/rust-lib/flowy-grid/src/services/group/controllers/mod.rs @@ -0,0 +1,7 @@ +mod checkbox_controller; +mod group_controller; +mod select_option_controller; + +pub use checkbox_controller::*; +pub use group_controller::*; +pub use select_option_controller::*; 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/controllers/select_option_controller.rs similarity index 100% rename from frontend/rust-lib/flowy-grid/src/services/group/group_generator/select_option_group.rs rename to frontend/rust-lib/flowy-grid/src/services/group/controllers/select_option_controller.rs 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 deleted file mode 100644 index 08e691a75e..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod checkbox_group; -mod group_controller; -mod select_option_group; - -pub use checkbox_group::*; -pub use group_controller::*; -pub use select_option_group::*; 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 15b401f4c0..f8b96c8bab 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs @@ -1,5 +1,5 @@ -mod group_generator; +mod controllers; mod group_service; -pub(crate) use group_generator::*; +pub(crate) use controllers::*; pub(crate) use group_service::*; diff --git a/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs b/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs index f91ec4c88b..ff15170932 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs @@ -240,7 +240,9 @@ where } } -pub trait GroupConfigurationSerde {} +pub trait GroupConfigurationSerde { + fn from_configuration(s: &str) -> Result; +} #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] pub struct GroupConfigurationRevision { 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 aad9c8b5f3..e079929aee 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 @@ -1,4 +1,3 @@ -use crate::entities::grid::FieldChangesetParams; use crate::entities::revision::{md5, RepeatedRevision, Revision}; use crate::errors::{internal_error, CollaborateError, CollaborateResult}; use crate::util::{cal_diff, make_text_delta_from_revisions}; @@ -162,61 +161,6 @@ impl GridRevisionPad { }) } - pub fn update_field_rev( - &mut self, - changeset: FieldChangesetParams, - deserializer: T, - ) -> CollaborateResult> { - let field_id = changeset.field_id.clone(); - self.modify_field(&field_id, |field| { - let mut is_changed = None; - if let Some(name) = changeset.name { - field.name = name; - is_changed = Some(()) - } - - if let Some(desc) = changeset.desc { - field.desc = desc; - is_changed = Some(()) - } - - if let Some(field_type) = changeset.field_type { - field.ty = field_type; - is_changed = Some(()) - } - - if let Some(frozen) = changeset.frozen { - field.frozen = frozen; - is_changed = Some(()) - } - - if let Some(visibility) = changeset.visibility { - field.visibility = visibility; - is_changed = Some(()) - } - - if let Some(width) = changeset.width { - field.width = width; - is_changed = Some(()) - } - - if let Some(type_option_data) = changeset.type_option_data { - match deserializer.deserialize(type_option_data) { - Ok(json_str) => { - let field_type = field.ty; - field.insert_type_option_str(&field_type, json_str); - is_changed = Some(()) - } - Err(err) => { - tracing::error!("Deserialize data to type option json failed: {}", err); - } - } - } - - Ok(is_changed) - }) - } - pub fn get_field_rev(&self, field_id: &str) -> Option<(usize, &Arc)> { self.grid_rev .fields @@ -399,7 +343,7 @@ impl GridRevisionPad { ) } - fn modify_field(&mut self, field_id: &str, f: F) -> CollaborateResult> + pub fn modify_field(&mut self, field_id: &str, f: F) -> CollaborateResult> where F: FnOnce(&mut FieldRevision) -> CollaborateResult>, { diff --git a/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs b/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs index 4220a4367b..db52d0b38b 100644 --- a/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs +++ b/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs @@ -1,11 +1,9 @@ -use crate::entities::grid::{CreatGroupParams, CreateFilterParams, GridSettingChangesetParams}; use crate::entities::revision::{md5, Revision}; use crate::errors::{internal_error, CollaborateError, CollaborateResult}; use crate::util::{cal_diff, make_text_delta_from_revisions}; use flowy_grid_data_model::revision::{ - gen_grid_filter_id, gen_grid_group_id, FieldRevision, FieldTypeRevision, FilterConfigurationRevision, - FilterConfigurationsByFieldId, GridViewRevision, GroupConfigurationRevision, GroupConfigurationsByFieldId, - SettingRevision, SortConfigurationsByFieldId, + FieldRevision, FieldTypeRevision, FilterConfigurationRevision, FilterConfigurationsByFieldId, GridViewRevision, + GroupConfigurationRevision, GroupConfigurationsByFieldId, SettingRevision, SortConfigurationsByFieldId, }; use lib_ot::core::{OperationTransform, PhantomAttributes, TextDelta, TextDeltaBuilder}; use std::sync::Arc; @@ -167,24 +165,6 @@ impl GridViewRevisionPad { } } -fn make_filter_revision(params: &CreateFilterParams) -> FilterConfigurationRevision { - FilterConfigurationRevision { - id: gen_grid_filter_id(), - field_id: params.field_id.clone(), - condition: params.condition, - content: params.content.clone(), - } -} - -fn make_group_revision(params: &CreatGroupParams) -> GroupConfigurationRevision { - GroupConfigurationRevision { - id: gen_grid_group_id(), - field_id: params.field_id.clone(), - field_type_rev: params.field_type_rev, - content: params.content.clone(), - } -} - pub struct GridViewRevisionChangeset { pub delta: TextDelta, pub md5: String,