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 3a04a9946f..9ab6f4801a 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,9 +287,11 @@ impl GroupConfigurationWriter for GroupConfigurationWriterImpl { &self, field_id: &str, field_type: FieldTypeRevision, - configuration: GroupConfigurationRevision, + group_id: &str, + mut_fn: impl FnOnce(&mut GroupConfigurationRevision), ) -> AFFuture> { let user_id = self.user_id.clone(); + let group_id = group_id.to_owned(); let rev_manager = self.rev_manager.clone(); let view_pad = self.view_pad.clone(); let field_id = field_id.to_owned(); @@ -298,13 +300,36 @@ impl GroupConfigurationWriter for GroupConfigurationWriterImpl { match view_pad .write() .await - .insert_group_configuration(&field_id, &field_type, configuration)? + .get_mut_group(&field_id, &field_type, &group_id, mut_fn)? { None => Ok(()), Some(changeset) => apply_change(&user_id, rev_manager, changeset).await, } }) } + // fn save_group_configuration( + // &self, + // field_id: &str, + // field_type: FieldTypeRevision, + // + // configuration: GroupConfigurationRevision, + // ) -> AFFuture> { + // let user_id = self.user_id.clone(); + // let rev_manager = self.rev_manager.clone(); + // let view_pad = self.view_pad.clone(); + // let field_id = field_id.to_owned(); + // + // wrap_future(async move { + // match view_pad + // .write() + // .await + // .insert_group_configuration(&field_id, &field_type, configuration)? + // { + // None => Ok(()), + // Some(changeset) => apply_change(&user_id, rev_manager, changeset).await, + // } + // }) + // } } pub fn make_grid_setting(view_pad: &GridViewRevisionPad, field_revs: &[Arc]) -> GridSettingPB { 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 0c120d477f..4fe59fbaca 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs @@ -10,12 +10,13 @@ pub trait GroupConfigurationReader: Send + Sync + 'static { fn get_group_configuration(&self, field_rev: Arc) -> AFFuture>; } -pub trait GroupConfigurationWriter: Send + Sync + 'static { +pub trait GroupConfigurationWriter: Send + Sync + 'static + ?Sized { fn save_group_configuration( &self, field_id: &str, field_type: FieldTypeRevision, - configuration: GroupConfigurationRevision, + group_id: &str, + mut_fn: fn(&mut GroupConfigurationRevision), ) -> AFFuture>; } @@ -44,7 +45,7 @@ where writer: Arc, ) -> FlowyResult { let configuration_rev = reader.get_group_configuration(field_rev.clone()).await; - let configuration = C::from_configuration_content(&configuration.content)?; + let configuration = C::from_configuration_content(&configuration_rev.content)?; Ok(Self { field_rev, configuration_rev, @@ -74,8 +75,17 @@ where &self, field_id: &str, field_type: FieldTypeRevision, - configuration: GroupConfigurationRevision, + group_id: &str, + mut_fn: impl FnOnce(&mut GroupConfigurationRevision), ) -> AFFuture> { - (**self).save_group_configuration(field_id, field_type, configuration) + todo!() } + // fn save_group_configuration( + // &self, + // field_id: &str, + // field_type: FieldTypeRevision, + // 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 d78c055ab6..dc278af7f5 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,7 +19,7 @@ pub type CheckboxGroupController = GenericGroupController< pub type CheckboxGroupConfiguration = GenericGroupConfiguration; impl GroupConfigurationAction for CheckboxGroupConfiguration { fn group_records(&self) -> &[GroupRecordRevision] { - vec![].as_slice() + &[] } fn merge_groups(&self, groups: Vec) -> FlowyResult<()> { 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 a0a4c2f13e..b6439f1f12 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,7 +11,8 @@ use flowy_grid_data_model::revision::{ pub type SelectOptionGroupConfiguration = GenericGroupConfiguration; impl GroupConfigurationAction for SelectOptionGroupConfiguration { fn group_records(&self) -> &[GroupRecordRevision] { - self.configuration.as_slice() + // self.configuration.as_slice() + todo!() } fn merge_groups(&self, groups: Vec) -> FlowyResult<()> { 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 5ec4a87ef9..3f5f799369 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 @@ -66,6 +66,27 @@ impl GridViewRevisionPad { }) } + pub fn get_mut_group( + &mut self, + field_id: &str, + field_type: &FieldTypeRevision, + group_id: &str, + mut_group_fn: F, + ) -> CollaborateResult> { + self.modify(|view| match view.groups.get_mut_objects(field_id, field_type) { + None => Ok(None), + Some(groups) => { + for mut group in groups { + if group.id == group_id { + mut_group_fn(Arc::make_mut(&mut group)); + return Ok(Some(())); + } + } + Ok(None) + } + }) + } + pub fn delete_group( &mut self, field_id: &str,