From 49601b66efb30e7bfbf3585f930091f5e7b71beb Mon Sep 17 00:00:00 2001 From: appflowy Date: Sat, 20 Aug 2022 16:44:44 +0800 Subject: [PATCH] chore: save group configuration --- .../src/services/grid_view_editor.rs | 3 +- .../src/services/group/configuration.rs | 17 +++++---- .../controller_impls/checkbox_controller.rs | 10 +++--- .../select_option_controller/util.rs | 5 +-- .../src/services/group/group_controller.rs | 8 ++--- .../src/services/group/group_service.rs | 5 +-- .../src/revision/group_rev.rs | 35 +++++++++++++++---- 7 files changed, 53 insertions(+), 30 deletions(-) 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 9a7173035a..3a04a9946f 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 @@ -287,7 +287,7 @@ impl GroupConfigurationWriter for GroupConfigurationWriterImpl { &self, field_id: &str, field_type: FieldTypeRevision, - configuration: Arc, + configuration: GroupConfigurationRevision, ) -> AFFuture> { let user_id = self.user_id.clone(); let rev_manager = self.rev_manager.clone(); @@ -295,7 +295,6 @@ impl GroupConfigurationWriter for GroupConfigurationWriterImpl { let field_id = field_id.to_owned(); wrap_future(async move { - let configuration = (&*configuration).clone(); match view_pad .write() .await diff --git a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs index 3d737c307f..0c120d477f 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs @@ -1,3 +1,4 @@ +use crate::services::group::Group; use flowy_error::FlowyResult; use flowy_grid_data_model::revision::{ FieldRevision, FieldTypeRevision, GroupConfigurationContentSerde, GroupConfigurationRevision, GroupRecordRevision, @@ -14,13 +15,13 @@ pub trait GroupConfigurationWriter: Send + Sync + 'static { &self, field_id: &str, field_type: FieldTypeRevision, - configuration: Arc, + configuration: GroupConfigurationRevision, ) -> AFFuture>; } pub trait GroupConfigurationAction: Send + Sync { fn group_records(&self) -> &[GroupRecordRevision]; - fn save_groups(&self) -> FlowyResult<()>; + fn merge_groups(&self, groups: Vec) -> FlowyResult<()>; fn hide_group(&self, group_id: &str) -> FlowyResult<()>; fn show_group(&self, group_id: &str) -> FlowyResult<()>; } @@ -28,8 +29,9 @@ pub trait GroupConfigurationAction: Send + Sync { pub struct GenericGroupConfiguration { field_rev: Arc, reader: Arc, + configuration_rev: Arc, writer: Arc, - configuration: C, + pub(crate) configuration: C, } impl GenericGroupConfiguration @@ -41,15 +43,18 @@ where reader: Arc, writer: Arc, ) -> FlowyResult { - let configuration = reader.get_group_configuration(field_rev.clone()).await; - let configuration = C::from_configuration(&configuration.content)?; + let configuration_rev = reader.get_group_configuration(field_rev.clone()).await; + let configuration = C::from_configuration_content(&configuration.content)?; Ok(Self { field_rev, + configuration_rev, reader, writer, configuration, }) } + + pub async fn save_configuration(&self) {} } impl GroupConfigurationReader for Arc @@ -69,7 +74,7 @@ where &self, field_id: &str, field_type: FieldTypeRevision, - configuration: Arc, + configuration: GroupConfigurationRevision, ) -> AFFuture> { (**self).save_group_configuration(field_id, field_type, configuration) } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs index fca49513c8..d78c055ab6 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs @@ -19,19 +19,19 @@ pub type CheckboxGroupController = GenericGroupController< pub type CheckboxGroupConfiguration = GenericGroupConfiguration; impl GroupConfigurationAction for CheckboxGroupConfiguration { fn group_records(&self) -> &[GroupRecordRevision] { - todo!() + vec![].as_slice() } - fn save_groups(&self) -> FlowyResult<()> { - todo!() + fn merge_groups(&self, groups: Vec) -> FlowyResult<()> { + Ok(()) } fn hide_group(&self, group_id: &str) -> FlowyResult<()> { - todo!() + Ok(()) } fn show_group(&self, group_id: &str) -> FlowyResult<()> { - todo!() + Ok(()) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs index d95a39f60c..a0a4c2f13e 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs @@ -11,10 +11,11 @@ use flowy_grid_data_model::revision::{ pub type SelectOptionGroupConfiguration = GenericGroupConfiguration; impl GroupConfigurationAction for SelectOptionGroupConfiguration { fn group_records(&self) -> &[GroupRecordRevision] { - todo!() + self.configuration.as_slice() } - fn save_groups(&self) -> FlowyResult<()> { + fn merge_groups(&self, groups: Vec) -> FlowyResult<()> { + // self.writer.save_group_configuration() todo!() } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_controller.rs index fb2c0aaa6e..97755fd0ee 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_controller.rs @@ -5,11 +5,11 @@ use crate::services::group::configuration::{GenericGroupConfiguration, GroupConf use crate::services::group::entities::Group; use flowy_error::FlowyResult; use flowy_grid_data_model::revision::{ - FieldRevision, GroupConfigurationContentSerde, GroupConfigurationRevision, RowChangeset, RowRevision, - TypeOptionDataDeserializer, + FieldRevision, GroupConfigurationContentSerde, RowChangeset, RowRevision, TypeOptionDataDeserializer, }; use indexmap::IndexMap; -use lib_infra::future::AFFuture; + +use crate::services::group::GroupConfigurationWriter; use std::marker::PhantomData; use std::sync::Arc; @@ -84,7 +84,7 @@ where pub async fn new( field_rev: &Arc, configuration_reader: Arc, - configuration_writer: Arc, + configuration_writer: Arc, ) -> FlowyResult { let configuration = GenericGroupConfiguration::::new(field_rev.clone(), configuration_reader, configuration_writer).await?; 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 42e687445d..0b60b54535 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,7 +1,3 @@ -use crate::entities::{ - CheckboxGroupConfigurationPB, DateGroupConfigurationPB, FieldType, GroupRowsChangesetPB, - NumberGroupConfigurationPB, SelectOptionGroupConfigurationPB, TextGroupConfigurationPB, UrlGroupConfigurationPB, -}; use crate::services::group::configuration::GroupConfigurationReader; use crate::services::group::group_controller::GroupController; use crate::services::group::{ @@ -14,6 +10,7 @@ use flowy_grid_data_model::revision::{ TextGroupConfigurationRevision, UrlGroupConfigurationRevision, }; +use crate::entities::{FieldType, GroupRowsChangesetPB}; use std::future::Future; use std::sync::Arc; use tokio::sync::RwLock; 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 index 83deeb2735..c4d2287c0c 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs @@ -4,7 +4,8 @@ use serde_json::Error; use serde_repr::*; pub trait GroupConfigurationContentSerde: Sized { - fn from_configuration(s: &str) -> Result; + fn from_configuration_content(s: &str) -> Result; + fn to_configuration_content(&self) -> Result; } #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] @@ -36,9 +37,12 @@ pub struct TextGroupConfigurationRevision { } impl GroupConfigurationContentSerde for TextGroupConfigurationRevision { - fn from_configuration(s: &str) -> Result { + fn from_configuration_content(s: &str) -> Result { serde_json::from_str(s) } + fn to_configuration_content(&self) -> Result { + serde_json::to_string(self) + } } #[derive(Default, Serialize, Deserialize)] @@ -47,9 +51,12 @@ pub struct NumberGroupConfigurationRevision { } impl GroupConfigurationContentSerde for NumberGroupConfigurationRevision { - fn from_configuration(s: &str) -> Result { + fn from_configuration_content(s: &str) -> Result { serde_json::from_str(s) } + fn to_configuration_content(&self) -> Result { + serde_json::to_string(self) + } } #[derive(Default, Serialize, Deserialize)] @@ -58,9 +65,12 @@ pub struct UrlGroupConfigurationRevision { } impl GroupConfigurationContentSerde for UrlGroupConfigurationRevision { - fn from_configuration(s: &str) -> Result { + fn from_configuration_content(s: &str) -> Result { serde_json::from_str(s) } + fn to_configuration_content(&self) -> Result { + serde_json::to_string(self) + } } #[derive(Default, Serialize, Deserialize)] @@ -69,9 +79,13 @@ pub struct CheckboxGroupConfigurationRevision { } impl GroupConfigurationContentSerde for CheckboxGroupConfigurationRevision { - fn from_configuration(s: &str) -> Result { + fn from_configuration_content(s: &str) -> Result { serde_json::from_str(s) } + + fn to_configuration_content(&self) -> Result { + serde_json::to_string(self) + } } #[derive(Default, Serialize, Deserialize)] @@ -81,9 +95,13 @@ pub struct SelectOptionGroupConfigurationRevision { } impl GroupConfigurationContentSerde for SelectOptionGroupConfigurationRevision { - fn from_configuration(s: &str) -> Result { + fn from_configuration_content(s: &str) -> Result { serde_json::from_str(s) } + + fn to_configuration_content(&self) -> Result { + serde_json::to_string(self) + } } #[derive(Default, Serialize, Deserialize)] @@ -102,9 +120,12 @@ pub struct DateGroupConfigurationRevision { } impl GroupConfigurationContentSerde for DateGroupConfigurationRevision { - fn from_configuration(s: &str) -> Result { + fn from_configuration_content(s: &str) -> Result { serde_json::from_str(s) } + fn to_configuration_content(&self) -> Result { + serde_json::to_string(self) + } } #[derive(Serialize_repr, Deserialize_repr)]