chore: save group configuration

This commit is contained in:
appflowy 2022-08-20 17:10:34 +08:00
parent 49601b66ef
commit 3c022d4de5
5 changed files with 66 additions and 9 deletions

View File

@ -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 {

View File

@ -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)
// }
}

View File

@ -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<()> {

View File

@ -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<()> {

View File

@ -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,