diff --git a/frontend/rust-lib/flowy-grid/src/entities/field_entities.rs b/frontend/rust-lib/flowy-grid/src/entities/field_entities.rs index 8875b3fc26..0993853b8e 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/field_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/field_entities.rs @@ -491,6 +491,27 @@ impl TryInto for FieldChangesetPayloadPB { } } +#[derive(Debug, Clone, Default)] +pub struct FieldChangesetParams { + pub field_id: String, + + pub grid_id: String, + + pub name: Option, + + pub desc: Option, + + pub field_type: Option, + + pub frozen: Option, + + pub visibility: Option, + + pub width: Option, + + pub type_option_data: Option>, +} + #[derive( Debug, Clone, diff --git a/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs b/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs index 079b6fd6dc..7dff00bf56 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs @@ -5,8 +5,7 @@ use crate::entities::{ use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; use flowy_grid_data_model::parser::NotEmptyStr; -use flowy_grid_data_model::revision::{FieldRevision, FilterConfigurationRevision}; -use flowy_sync::entities::grid::{CreateGridFilterParams, DeleteFilterParams}; +use flowy_grid_data_model::revision::{FieldRevision, FieldTypeRevision, FilterConfigurationRevision}; use std::convert::TryInto; use std::sync::Arc; @@ -72,6 +71,12 @@ impl TryInto for DeleteFilterPayloadPB { } } +pub struct DeleteFilterParams { + pub field_id: String, + pub filter_id: String, + pub field_type_rev: FieldTypeRevision, +} + #[derive(ProtoBuf, Debug, Default, Clone)] pub struct CreateGridFilterPayloadPB { #[pb(index = 1)] @@ -99,10 +104,10 @@ impl CreateGridFilterPayloadPB { } } -impl TryInto for CreateGridFilterPayloadPB { +impl TryInto for CreateGridFilterPayloadPB { type Error = ErrorCode; - fn try_into(self) -> Result { + fn try_into(self) -> Result { let field_id = NotEmptyStr::parse(self.field_id) .map_err(|_| ErrorCode::FieldIdIsEmpty)? .0; @@ -125,7 +130,7 @@ impl TryInto for CreateGridFilterPayloadPB { } } - Ok(CreateGridFilterParams { + Ok(CreateFilterParams { field_id, field_type_rev: self.field_type.into(), condition, @@ -133,3 +138,10 @@ impl TryInto for CreateGridFilterPayloadPB { }) } } + +pub struct CreateFilterParams { + pub field_id: String, + pub field_type_rev: FieldTypeRevision, + pub condition: u8, + pub content: Option, +} 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 index baa39d91a2..5797da3517 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs @@ -1,4 +1,5 @@ use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; +use flowy_grid_data_model::revision::{GroupRecordRevision, SelectOptionGroupConfigurationRevision}; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct UrlGroupConfigurationPB { @@ -16,6 +17,36 @@ pub struct TextGroupConfigurationPB { pub struct SelectOptionGroupConfigurationPB { #[pb(index = 1)] hide_empty: bool, + + #[pb(index = 2)] + groups: Vec, +} + +impl std::convert::From for SelectOptionGroupConfigurationPB { + fn from(rev: SelectOptionGroupConfigurationRevision) -> Self { + Self { + hide_empty: rev.hide_empty, + groups: rev.groups.into_iter().map(GroupRecordPB::from).collect(), + } + } +} + +#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] +pub struct GroupRecordPB { + #[pb(index = 1)] + group_id: String, + + #[pb(index = 2)] + visible: bool, +} + +impl std::convert::From for GroupRecordPB { + fn from(rev: GroupRecordRevision) -> Self { + Self { + group_id: rev.group_id, + visible: rev.visible, + } + } } #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] 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 32f7c4543a..0024040078 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 @@ -2,8 +2,7 @@ use crate::entities::{FieldType, RowPB}; use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; use flowy_grid_data_model::parser::NotEmptyStr; -use flowy_grid_data_model::revision::GroupConfigurationRevision; -use flowy_sync::entities::grid::{CreateGridGroupParams, DeleteGroupParams}; +use flowy_grid_data_model::revision::{FieldTypeRevision, GroupConfigurationRevision}; use std::convert::TryInto; use std::sync::Arc; @@ -86,27 +85,28 @@ pub struct CreateGridGroupPayloadPB { #[pb(index = 2)] pub field_type: FieldType, - - #[pb(index = 3, one_of)] - pub content: Option>, } -impl TryInto for CreateGridGroupPayloadPB { +impl TryInto for CreateGridGroupPayloadPB { type Error = ErrorCode; - fn try_into(self) -> Result { + fn try_into(self) -> Result { let field_id = NotEmptyStr::parse(self.field_id) .map_err(|_| ErrorCode::FieldIdIsEmpty)? .0; - Ok(CreateGridGroupParams { + Ok(CreatGroupParams { field_id, field_type_rev: self.field_type.into(), - content: self.content, }) } } +pub struct CreatGroupParams { + pub field_id: String, + pub field_type_rev: FieldTypeRevision, +} + #[derive(ProtoBuf, Debug, Default, Clone)] pub struct DeleteGroupPayloadPB { #[pb(index = 1)] @@ -137,3 +137,9 @@ impl TryInto for DeleteGroupPayloadPB { }) } } + +pub struct DeleteGroupParams { + pub field_id: String, + pub group_id: String, + pub field_type_rev: FieldTypeRevision, +} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs index 743da70444..41d46e3cc7 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs @@ -1,5 +1,7 @@ -use crate::entities::{InsertedRowPB, RowPB}; +use crate::entities::{GroupPB, InsertedRowPB, RowPB}; use flowy_derive::ProtoBuf; +use flowy_error::ErrorCode; +use flowy_grid_data_model::parser::NotEmptyStr; use std::fmt::Formatter; #[derive(Debug, Default, ProtoBuf)] @@ -62,3 +64,55 @@ impl GroupRowsChangesetPB { } } } +#[derive(Debug, Default, ProtoBuf)] +pub struct MoveGroupPayloadPB { + #[pb(index = 1)] + pub view_id: String, + + #[pb(index = 2)] + pub from_group_id: String, + + #[pb(index = 3)] + pub to_group_id: String, +} + +pub struct MoveGroupParams { + pub view_id: String, + pub from_group_id: String, + pub to_group_id: String, +} + +impl TryInto for MoveGroupPayloadPB { + type Error = ErrorCode; + + fn try_into(self) -> Result { + let view_id = NotEmptyStr::parse(self.view_id) + .map_err(|_| ErrorCode::GridViewIdIsEmpty)? + .0; + let from_group_id = NotEmptyStr::parse(self.from_group_id) + .map_err(|_| ErrorCode::GroupIdIsEmpty)? + .0; + let to_group_id = NotEmptyStr::parse(self.to_group_id) + .map_err(|_| ErrorCode::GroupIdIsEmpty)? + .0; + Ok(MoveGroupParams { + view_id, + from_group_id, + to_group_id, + }) + } +} + +#[derive(Debug, Default, ProtoBuf)] +pub struct GroupsChangesetPB { + #[pb(index = 1)] + pub view_id: String, + + #[pb(index = 2)] + pub inserted_groups: Vec, + + #[pb(index = 3)] + pub deleted_groups: Vec, +} + +impl GroupsChangesetPB {} diff --git a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs index 89f66dd433..67fcc884e9 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs @@ -1,6 +1,7 @@ use crate::entities::{ - CreateGridFilterPayloadPB, CreateGridGroupPayloadPB, CreateGridSortPayloadPB, DeleteFilterPayloadPB, - DeleteGroupPayloadPB, RepeatedGridConfigurationFilterPB, RepeatedGridGroupConfigurationPB, RepeatedGridSortPB, + CreatGroupParams, CreateFilterParams, CreateGridFilterPayloadPB, CreateGridGroupPayloadPB, CreateGridSortPayloadPB, + CreateSortParams, DeleteFilterParams, DeleteFilterPayloadPB, DeleteGroupParams, DeleteGroupPayloadPB, + RepeatedGridConfigurationFilterPB, RepeatedGridGroupConfigurationPB, RepeatedGridSortPB, }; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; @@ -156,3 +157,20 @@ impl TryInto for GridSettingChangesetPayloadPB { }) } } + +pub struct GridSettingChangesetParams { + pub grid_id: String, + pub layout_type: LayoutRevision, + pub insert_filter: Option, + pub delete_filter: Option, + pub insert_group: Option, + pub delete_group: Option, + pub insert_sort: Option, + pub delete_sort: Option, +} + +impl GridSettingChangesetParams { + pub fn is_filter_changed(&self) -> bool { + self.insert_filter.is_some() || self.delete_filter.is_some() + } +} diff --git a/frontend/rust-lib/flowy-grid/src/entities/sort_entities.rs b/frontend/rust-lib/flowy-grid/src/entities/sort_entities.rs index f844b75066..28486a1ee6 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/sort_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/sort_entities.rs @@ -2,7 +2,6 @@ use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; use flowy_grid_data_model::parser::NotEmptyStr; use flowy_grid_data_model::revision::SortConfigurationRevision; -use flowy_sync::entities::grid::CreateGridSortParams; use std::convert::TryInto; use std::sync::Arc; @@ -51,15 +50,19 @@ pub struct CreateGridSortPayloadPB { pub field_id: Option, } -impl TryInto for CreateGridSortPayloadPB { +impl TryInto for CreateGridSortPayloadPB { type Error = ErrorCode; - fn try_into(self) -> Result { + fn try_into(self) -> Result { let field_id = match self.field_id { None => None, Some(field_id) => Some(NotEmptyStr::parse(field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?.0), }; - Ok(CreateGridSortParams { field_id }) + Ok(CreateSortParams { field_id }) } } + +pub struct CreateSortParams { + pub field_id: Option, +} diff --git a/frontend/rust-lib/flowy-grid/src/event_handler.rs b/frontend/rust-lib/flowy-grid/src/event_handler.rs index 3108acd977..f9f5e39399 100644 --- a/frontend/rust-lib/flowy-grid/src/event_handler.rs +++ b/frontend/rust-lib/flowy-grid/src/event_handler.rs @@ -437,3 +437,14 @@ pub(crate) async fn create_board_card_handler( let row = editor.create_row(params).await?; data_result(row) } + +#[tracing::instrument(level = "debug", skip(data, manager), err)] +pub(crate) async fn move_group_handler( + data: Data, + manager: AppData>, +) -> DataResult { + let params: MoveGroupParams = data.into_inner().try_into()?; + let editor = manager.get_grid_editor(params.view_id.as_ref())?; + let changeset = editor.move_group(params).await?; + data_result(changeset) +} diff --git a/frontend/rust-lib/flowy-grid/src/event_map.rs b/frontend/rust-lib/flowy-grid/src/event_map.rs index 55ef3ff4db..76087fe64b 100644 --- a/frontend/rust-lib/flowy-grid/src/event_map.rs +++ b/frontend/rust-lib/flowy-grid/src/event_map.rs @@ -41,6 +41,7 @@ pub fn create(grid_manager: Arc) -> Module { .event(GridEvent::UpdateDateCell, update_date_cell_handler) // Group .event(GridEvent::CreateBoardCard, create_board_card_handler) + .event(GridEvent::MoveGroup, move_group_handler) .event(GridEvent::GetGroup, get_groups_handler); module @@ -217,4 +218,7 @@ pub enum GridEvent { #[event(input = "CreateBoardCardPayloadPB", output = "RowPB")] CreateBoardCard = 110, + + #[event(input = "MoveGroupPayloadPB", output = "GroupsChangesetPB")] + MoveGroup = 111, } 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 92cf9da550..581f735994 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -294,6 +294,11 @@ impl GridRevisionEditor { Ok(row_pb) } + pub async fn move_group(&self, params: MoveGroupParams) -> FlowyResult { + // + todo!() + } + pub async fn insert_rows(&self, row_revs: Vec) -> FlowyResult> { let block_id = self.block_id().await?; let mut rows_by_block_id: HashMap> = HashMap::new(); diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index da3ea1be2d..ac1e905d8a 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -172,10 +172,15 @@ impl GridViewRevisionEditor { } pub(crate) async fn update_setting(&self, changeset: GridSettingChangesetParams) -> FlowyResult<()> { - let _ = self.modify(|pad| Ok(pad.update_setting(changeset)?)).await; - Ok(()) + // let _ = self.modify(|pad| Ok(pad.update_setting(changeset)?)).await; + // Ok(()) + todo!() } + // pub(crate) async fn insert_group(&self, params: CreateGroupParams) -> FlowyResult<()> { + // + // } + pub(crate) async fn get_filters(&self) -> Vec { let field_revs = self.field_delegate.get_field_revs().await; match self.pad.read().await.get_setting_rev().get_all_filters(&field_revs) { diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs index 5a8faad6a0..178befc10a 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs @@ -130,6 +130,8 @@ impl GridViewManager { } } + pub(crate) async fn move_group(&self) {} + pub(crate) async fn get_view_editor(&self, view_id: &str) -> FlowyResult> { debug_assert!(!view_id.is_empty()); match self.view_editors.get(view_id) { 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/group_generator/group_controller.rs index a1d5df2154..07dcff3f77 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_generator/group_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_generator/group_controller.rs @@ -163,10 +163,12 @@ where G: GroupGenerator, { pub fn new(field_rev: &Arc, configuration: GroupConfigurationRevision) -> FlowyResult { - let configuration = match configuration.content { - None => None, - Some(content) => Some(C::try_from(Bytes::from(content))?), - }; + // let configuration = match configuration.content { + // None => None, + // Some(content) => Some(C::try_from(Bytes::from(content))?), + // }; + + let configuration = None; let field_type_rev = field_rev.ty; let type_option = field_rev.get_type_option_entry::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &configuration, &type_option); 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 6e569a7b54..29dc95891f 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 @@ -4,7 +4,6 @@ use crate::services::field::{ MultiSelectTypeOptionPB, SelectOptionCellDataPB, SelectOptionCellDataParser, SingleSelectTypeOptionPB, }; use crate::services::group::{GenericGroupController, Group, GroupController, GroupGenerator, Groupable}; - use flowy_grid_data_model::revision::{FieldRevision, RowChangeset, RowRevision}; // SingleSelect 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 0e152bf27c..c07b3acec4 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 @@ -8,7 +8,9 @@ use crate::services::group::{ use bytes::Bytes; use flowy_error::FlowyResult; use flowy_grid_data_model::revision::{ - gen_grid_group_id, FieldRevision, GroupConfigurationRevision, RowChangeset, RowRevision, + gen_grid_group_id, CheckboxGroupConfigurationRevision, DateGroupConfigurationRevision, FieldRevision, + GroupConfigurationRevision, NumberGroupConfigurationRevision, RowChangeset, RowRevision, + SelectOptionGroupConfigurationRevision, TextGroupConfigurationRevision, UrlGroupConfigurationRevision, }; use lib_infra::future::AFFuture; use std::future::Future; @@ -208,20 +210,41 @@ fn find_group_field(field_revs: &[Arc]) -> Option GroupConfigurationRevision { + let field_id = field_rev.id.clone(); + let field_type_rev = field_rev.ty.clone(); let field_type: FieldType = field_rev.ty.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.ty, - content: Some(bytes.to_vec()), + match field_type { + FieldType::RichText => { + GroupConfigurationRevision::new(field_id, field_type_rev, TextGroupConfigurationRevision::default()) + .unwrap() + } + FieldType::Number => { + GroupConfigurationRevision::new(field_id, field_type_rev, NumberGroupConfigurationRevision::default()) + .unwrap() + } + FieldType::DateTime => { + GroupConfigurationRevision::new(field_id, field_type_rev, DateGroupConfigurationRevision::default()) + .unwrap() + } + + FieldType::SingleSelect => GroupConfigurationRevision::new( + field_id, + field_type_rev, + SelectOptionGroupConfigurationRevision::default(), + ) + .unwrap(), + FieldType::MultiSelect => GroupConfigurationRevision::new( + field_id, + field_type_rev, + SelectOptionGroupConfigurationRevision::default(), + ) + .unwrap(), + FieldType::Checkbox => { + GroupConfigurationRevision::new(field_id, field_type_rev, CheckboxGroupConfigurationRevision::default()) + .unwrap() + } + FieldType::URL => { + GroupConfigurationRevision::new(field_id, field_type_rev, UrlGroupConfigurationRevision::default()).unwrap() + } } } diff --git a/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs b/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs index 7d285fbe2b..1cc16f7da7 100644 --- a/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs +++ b/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs @@ -3,7 +3,7 @@ use crate::entities::{ RepeatedGridSortPB, }; use flowy_grid_data_model::revision::{FieldRevision, SettingRevision}; -use flowy_sync::entities::grid::{CreateGridFilterParams, DeleteFilterParams, GridSettingChangesetParams}; +use flowy_sync::entities::grid::{CreateFilterParams, DeleteFilterParams, GridSettingChangesetParams}; use std::collections::HashMap; use std::sync::Arc; @@ -26,7 +26,7 @@ impl GridSettingChangesetBuilder { Self { params } } - pub fn insert_filter(mut self, params: CreateGridFilterParams) -> Self { + pub fn insert_filter(mut self, params: CreateFilterParams) -> Self { self.params.insert_filter = Some(params); self } diff --git a/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs index 650564d8d5..459cf5f82d 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs @@ -6,7 +6,7 @@ use flowy_grid::entities::{CreateGridFilterPayloadPB, GridLayout, GridSettingPB}; use flowy_grid::services::setting::GridSettingChangesetBuilder; use flowy_grid_data_model::revision::{FieldRevision, FieldTypeRevision}; -use flowy_sync::entities::grid::{CreateGridFilterParams, DeleteFilterParams, GridSettingChangesetParams}; +use flowy_sync::entities::grid::{CreateFilterParams, DeleteFilterParams, GridSettingChangesetParams}; use crate::grid::grid_editor::GridEditorTest; pub enum FilterScript { @@ -54,7 +54,7 @@ impl GridFilterTest { let _ = self.editor.update_grid_setting(params).await.unwrap(); } FilterScript::InsertGridTableFilter { payload } => { - let params: CreateGridFilterParams = payload.try_into().unwrap(); + let params: CreateFilterParams = payload.try_into().unwrap(); let layout_type = GridLayout::Table; let params = GridSettingChangesetBuilder::new(&self.grid_id, &layout_type) .insert_filter(params) diff --git a/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs b/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs index dbd5df1484..ea8de69056 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs @@ -13,7 +13,7 @@ use flowy_grid_data_model::revision::*; use flowy_revision::REVISION_WRITE_INTERVAL_IN_MILLIS; use flowy_sync::client_grid::GridBuilder; use flowy_sync::entities::grid::{ - CreateGridFilterParams, DeleteFilterParams, FieldChangesetParams, GridSettingChangesetParams, + CreateFilterParams, DeleteFilterParams, FieldChangesetParams, GridSettingChangesetParams, }; use flowy_test::helper::ViewTest; use flowy_test::FlowySDKTest; 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 da366f39ab..f91ec4c88b 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,12 +240,29 @@ where } } +pub trait GroupConfigurationSerde {} + #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] pub struct GroupConfigurationRevision { pub id: String, pub field_id: String, pub field_type_rev: FieldTypeRevision, - pub content: Option>, + pub content: String, +} + +impl GroupConfigurationRevision { + pub fn new(field_id: String, field_type: FieldTypeRevision, content: T) -> Result + where + T: serde::Serialize, + { + let content = serde_json::to_string(&content)?; + Ok(Self { + id: gen_grid_group_id(), + field_id, + field_type_rev: field_type, + content, + }) + } } #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq, Hash)] diff --git a/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs new file mode 100644 index 0000000000..932cc60033 --- /dev/null +++ b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs @@ -0,0 +1,59 @@ +use serde::{Deserialize, Serialize}; +use serde_repr::*; + +#[derive(Default, Serialize, Deserialize)] +pub struct TextGroupConfigurationRevision { + pub hide_empty: bool, +} + +#[derive(Default, Serialize, Deserialize)] +pub struct NumberGroupConfigurationRevision { + pub hide_empty: bool, +} + +#[derive(Default, Serialize, Deserialize)] +pub struct UrlGroupConfigurationRevision { + pub hide_empty: bool, +} + +#[derive(Default, Serialize, Deserialize)] +pub struct CheckboxGroupConfigurationRevision { + pub hide_empty: bool, +} + +#[derive(Default, Serialize, Deserialize)] +pub struct SelectOptionGroupConfigurationRevision { + pub hide_empty: bool, + pub groups: Vec, +} + +#[derive(Default, Serialize, Deserialize)] +pub struct GroupRecordRevision { + pub group_id: String, + + #[serde(default = "DEFAULT_GROUP_RECORD_VISIBILITY")] + pub visible: bool, +} +const DEFAULT_GROUP_RECORD_VISIBILITY: fn() -> bool = || true; + +#[derive(Default, Serialize, Deserialize)] +pub struct DateGroupConfigurationRevision { + pub hide_empty: bool, + pub condition: DateCondition, +} + +#[derive(Serialize_repr, Deserialize_repr)] +#[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/shared-lib/flowy-grid-data-model/src/revision/mod.rs b/shared-lib/flowy-grid-data-model/src/revision/mod.rs index 7ea98d78e3..d9df0910bd 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/mod.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/mod.rs @@ -2,8 +2,10 @@ mod grid_block; mod grid_rev; mod grid_setting_rev; mod grid_view; +mod group_rev; pub use grid_block::*; pub use grid_rev::*; pub use grid_setting_rev::*; pub use grid_view::*; +pub use group_rev::*; 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 dd6cc6f977..4220a4367b 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,4 +1,4 @@ -use crate::entities::grid::{CreateGridFilterParams, CreateGridGroupParams, GridSettingChangesetParams}; +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}; @@ -54,55 +54,6 @@ impl GridViewRevisionPad { &self.view.setting } - pub fn update_setting( - &mut self, - changeset: GridSettingChangesetParams, - ) -> CollaborateResult> { - self.modify(|view| { - let mut is_changed = None; - if let Some(params) = changeset.insert_filter { - view.setting.filters.insert_object( - ¶ms.field_id, - ¶ms.field_type_rev, - make_filter_revision(¶ms), - ); - is_changed = Some(()) - } - if let Some(params) = changeset.delete_filter { - if let Some(filters) = view - .setting - .filters - .get_mut_objects(¶ms.field_id, ¶ms.field_type_rev) - { - filters.retain(|filter| filter.id != params.filter_id); - is_changed = Some(()) - } - } - if let Some(params) = changeset.insert_group { - view.setting.groups.remove_all(); - view.setting.groups.insert_object( - ¶ms.field_id, - ¶ms.field_type_rev, - make_group_revision(¶ms), - ); - - is_changed = Some(()); - } - if let Some(params) = changeset.delete_group { - if let Some(groups) = view - .setting - .groups - .get_mut_objects(¶ms.field_id, ¶ms.field_type_rev) - { - groups.retain(|group| group.id != params.group_id); - is_changed = Some(()); - } - } - - Ok(is_changed) - }) - } - pub fn get_all_groups(&self, field_revs: &[Arc]) -> Option { self.setting.groups.get_all_objects(field_revs) } @@ -216,7 +167,7 @@ impl GridViewRevisionPad { } } -fn make_filter_revision(params: &CreateGridFilterParams) -> FilterConfigurationRevision { +fn make_filter_revision(params: &CreateFilterParams) -> FilterConfigurationRevision { FilterConfigurationRevision { id: gen_grid_filter_id(), field_id: params.field_id.clone(), @@ -225,7 +176,7 @@ fn make_filter_revision(params: &CreateGridFilterParams) -> FilterConfigurationR } } -fn make_group_revision(params: &CreateGridGroupParams) -> GroupConfigurationRevision { +fn make_group_revision(params: &CreatGroupParams) -> GroupConfigurationRevision { GroupConfigurationRevision { id: gen_grid_group_id(), field_id: params.field_id.clone(), diff --git a/shared-lib/flowy-sync/src/entities/grid.rs b/shared-lib/flowy-sync/src/entities/grid.rs deleted file mode 100644 index 3be3d98267..0000000000 --- a/shared-lib/flowy-sync/src/entities/grid.rs +++ /dev/null @@ -1,67 +0,0 @@ -use flowy_grid_data_model::revision::{FieldTypeRevision, LayoutRevision}; - -pub struct GridSettingChangesetParams { - pub grid_id: String, - pub layout_type: LayoutRevision, - pub insert_filter: Option, - pub delete_filter: Option, - pub insert_group: Option, - pub delete_group: Option, - pub insert_sort: Option, - pub delete_sort: Option, -} - -impl GridSettingChangesetParams { - pub fn is_filter_changed(&self) -> bool { - self.insert_filter.is_some() || self.delete_filter.is_some() - } -} -pub struct CreateGridFilterParams { - pub field_id: String, - pub field_type_rev: FieldTypeRevision, - pub condition: u8, - pub content: Option, -} - -pub struct DeleteFilterParams { - pub field_id: String, - pub filter_id: String, - pub field_type_rev: FieldTypeRevision, -} - -pub struct CreateGridGroupParams { - pub field_id: String, - pub field_type_rev: FieldTypeRevision, - pub content: Option>, -} - -pub struct DeleteGroupParams { - pub field_id: String, - pub group_id: String, - pub field_type_rev: FieldTypeRevision, -} - -pub struct CreateGridSortParams { - pub field_id: Option, -} - -#[derive(Debug, Clone, Default)] -pub struct FieldChangesetParams { - pub field_id: String, - - pub grid_id: String, - - pub name: Option, - - pub desc: Option, - - pub field_type: Option, - - pub frozen: Option, - - pub visibility: Option, - - pub width: Option, - - pub type_option_data: Option>, -} diff --git a/shared-lib/flowy-sync/src/entities/mod.rs b/shared-lib/flowy-sync/src/entities/mod.rs index 768640454b..1c357df94c 100644 --- a/shared-lib/flowy-sync/src/entities/mod.rs +++ b/shared-lib/flowy-sync/src/entities/mod.rs @@ -1,5 +1,4 @@ pub mod folder; -pub mod grid; pub mod parser; pub mod revision; pub mod text_block;