Преглед на файлове

chore: save group configuration

appflowy преди 2 години
родител
ревизия
3c022d4de5

+ 27 - 2
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<FlowyResult<()>> {
         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<FlowyResult<()>> {
+    //     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<FieldRevision>]) -> GridSettingPB {

+ 15 - 5
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<FieldRevision>) -> AFFuture<Arc<GroupConfigurationRevision>>;
 }
 
-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<FlowyResult<()>>;
 }
 
@@ -44,7 +45,7 @@ where
         writer: Arc<dyn GroupConfigurationWriter>,
     ) -> FlowyResult<Self> {
         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<FlowyResult<()>> {
-        (**self).save_group_configuration(field_id, field_type, configuration)
+        todo!()
     }
+    // fn save_group_configuration(
+    //     &self,
+    //     field_id: &str,
+    //     field_type: FieldTypeRevision,
+    //     configuration: GroupConfigurationRevision,
+    // ) -> AFFuture<FlowyResult<()>> {
+    //     (**self).save_group_configuration(field_id, field_type, configuration)
+    // }
 }

+ 1 - 1
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<CheckboxGroupConfigurationRevision>;
 impl GroupConfigurationAction for CheckboxGroupConfiguration {
     fn group_records(&self) -> &[GroupRecordRevision] {
-        vec![].as_slice()
+        &[]
     }
 
     fn merge_groups(&self, groups: Vec<Group>) -> FlowyResult<()> {

+ 2 - 1
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<SelectOptionGroupConfigurationRevision>;
 impl GroupConfigurationAction for SelectOptionGroupConfiguration {
     fn group_records(&self) -> &[GroupRecordRevision] {
-        self.configuration.as_slice()
+        // self.configuration.as_slice()
+        todo!()
     }
 
     fn merge_groups(&self, groups: Vec<Group>) -> FlowyResult<()> {

+ 21 - 0
shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs

@@ -66,6 +66,27 @@ impl GridViewRevisionPad {
         })
     }
 
+    pub fn get_mut_group<F: FnOnce(&mut GroupConfigurationRevision)>(
+        &mut self,
+        field_id: &str,
+        field_type: &FieldTypeRevision,
+        group_id: &str,
+        mut_group_fn: F,
+    ) -> CollaborateResult<Option<GridViewRevisionChangeset>> {
+        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,