Skip to content

Commit dfb7ed1

Browse files
committed
fix: switch field type in board
1 parent 6fa79b6 commit dfb7ed1

File tree

6 files changed

+31
-22
lines changed

6 files changed

+31
-22
lines changed

frontend/rust-lib/flowy-grid/src/event_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub(crate) async fn update_grid_setting_handler(
4444

4545
let editor = manager.get_grid_editor(&params.grid_id)?;
4646
if let Some(insert_params) = params.insert_group {
47-
let _ = editor.create_group(insert_params).await?;
47+
let _ = editor.insert_group(insert_params).await?;
4848
}
4949

5050
if let Some(delete_params) = params.delete_group {

frontend/rust-lib/flowy-grid/src/macros.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,12 @@ macro_rules! impl_type_option {
7373
match serde_json::from_str(s) {
7474
Ok(obj) => obj,
7575
Err(err) => {
76-
tracing::error!("{} convert from any data failed, {:?}", stringify!($target), err);
76+
tracing::error!(
77+
"{} type option deserialize from {} failed, {:?}",
78+
stringify!($target),
79+
s,
80+
err
81+
);
7782
$target::default()
7883
}
7984
}

frontend/rust-lib/flowy-grid/src/services/cell/cell_operation.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,10 @@ pub fn decode_any_cell_data<T: TryInto<AnyCellData, Error = FlowyError> + Debug>
9090
}
9191
}
9292
}
93-
Err(err) => {
94-
tracing::error!(
95-
"Decode type option data to type: {} failed: {:?}",
96-
std::any::type_name::<T>(),
97-
err,
98-
);
93+
Err(_err) => {
94+
// It's okay to ignore this error, because it's okay that the current cell can't
95+
// display the existing cell data. For example, the UI of the text cell will be blank if
96+
// the type of the data of cell is Number.
9997
CellBytes::default()
10098
}
10199
}

frontend/rust-lib/flowy-grid/src/services/grid_editor.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,23 +179,20 @@ impl GridRevisionEditor {
179179
None => Err(ErrorCode::FieldDoesNotExist.into()),
180180
Some(field_type) => {
181181
let _ = self.update_field_rev(params, field_type).await?;
182-
match self.view_manager.did_update_field(&field_id).await {
183-
Ok(_) => {}
184-
Err(e) => tracing::error!("View manager update field failed: {:?}", e),
185-
}
186182
let _ = self.notify_did_update_grid_field(&field_id).await?;
187183
Ok(())
188184
}
189185
}
190186
}
191187

188+
// Replaces the field revision with new field revision.
192189
pub async fn replace_field(&self, field_rev: Arc<FieldRevision>) -> FlowyResult<()> {
193190
let field_id = field_rev.id.clone();
194191
let _ = self
195192
.modify(|grid_pad| Ok(grid_pad.replace_field_rev(field_rev.clone())?))
196193
.await?;
197194

198-
match self.view_manager.did_update_field(&field_rev.id).await {
195+
match self.view_manager.did_update_field(&field_rev.id, false).await {
199196
Ok(_) => {}
200197
Err(e) => tracing::error!("View manager update field failed: {:?}", e),
201198
}
@@ -279,6 +276,7 @@ impl GridRevisionEditor {
279276
}
280277

281278
async fn update_field_rev(&self, params: FieldChangesetParams, field_type: FieldType) -> FlowyResult<()> {
279+
let mut is_type_option_changed = false;
282280
let _ = self
283281
.modify(|grid| {
284282
let deserializer = TypeOptionJsonDeserializer(field_type);
@@ -319,6 +317,7 @@ impl GridRevisionEditor {
319317
Ok(json_str) => {
320318
let field_type = field.ty;
321319
field.insert_type_option_str(&field_type, json_str);
320+
is_type_option_changed = true;
322321
is_changed = Some(())
323322
}
324323
Err(err) => {
@@ -333,7 +332,11 @@ impl GridRevisionEditor {
333332
})
334333
.await?;
335334

336-
match self.view_manager.did_update_field(&params.field_id).await {
335+
match self
336+
.view_manager
337+
.did_update_field(&params.field_id, is_type_option_changed)
338+
.await
339+
{
337340
Ok(_) => {}
338341
Err(e) => tracing::error!("View manager update field failed: {:?}", e),
339342
}
@@ -537,7 +540,7 @@ impl GridRevisionEditor {
537540
self.view_manager.get_filters().await
538541
}
539542

540-
pub async fn create_group(&self, params: InsertGroupParams) -> FlowyResult<()> {
543+
pub async fn insert_group(&self, params: InsertGroupParams) -> FlowyResult<()> {
541544
self.view_manager.insert_or_update_group(params).await
542545
}
543546

frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,15 @@ impl GridViewManager {
175175
Ok(())
176176
}
177177

178-
pub(crate) async fn did_update_field(&self, field_id: &str) -> FlowyResult<()> {
178+
#[tracing::instrument(level = "trace", skip(self), err)]
179+
pub(crate) async fn did_update_field(&self, field_id: &str, is_type_option_changed: bool) -> FlowyResult<()> {
179180
let view_editor = self.get_default_view_editor().await?;
180-
let _ = view_editor.did_update_field(field_id).await?;
181+
if is_type_option_changed {
182+
let _ = view_editor.group_by_field(field_id).await?;
183+
} else {
184+
let _ = view_editor.did_update_field(field_id).await?;
185+
}
186+
181187
Ok(())
182188
}
183189

frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,8 @@ async fn group_insert_single_select_option_test() {
382382
AssertGroupCount(5),
383383
];
384384
test.run_scripts(scripts).await;
385-
386-
// the group at index 4 is the default_group, so the new insert group will be the
387-
// index 3.
388-
let group_3 = test.group_at_index(3).await;
389-
assert_eq!(group_3.desc, new_option_name);
385+
let new_group = test.group_at_index(0).await;
386+
assert_eq!(new_group.desc, new_option_name);
390387
}
391388

392389
#[tokio::test]

0 commit comments

Comments
 (0)