fix: FieldEditor not refresh its type-option data after switching to a new field (#1285)

Co-authored-by: nathan <nathan@appflowy.io>
This commit is contained in:
Nathan.fooo 2022-10-15 19:06:34 +08:00 committed by GitHub
parent 63111927cc
commit eb970a6b7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 18 deletions

View File

@ -80,7 +80,12 @@ class TypeOptionDataController {
Future<void> switchToField(FieldType newFieldType) {
return loader.switchToField(field.id, newFieldType).then((result) {
return result.fold(
(_) {},
(_) {
// Should load the type-option data after switching to a new field.
// After loading the type-option data, the editor widget that uses
// the type-option data will be rebuild.
loadTypeOptionData();
},
(err) => Log.error(err),
);
});

View File

@ -1,5 +1,6 @@
import 'package:app_flowy/plugins/grid/application/field/field_editor_bloc.dart';
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:dartz/dartz.dart' show none;
import 'package:easy_localization/easy_localization.dart';
@ -58,6 +59,8 @@ class _FieldEditorState extends State<FieldEditor> {
isGroupField: widget.isGroupField,
loader: widget.typeOptionLoader,
)..add(const FieldEditorEvent.initial()),
child: Padding(
padding: GridSize.typeOptionContentInsets,
child: ListView(
shrinkWrap: true,
children: [
@ -72,6 +75,7 @@ class _FieldEditorState extends State<FieldEditor> {
_FieldTypeOptionCell(popoverMutex: popoverMutex),
],
),
),
);
}

View File

@ -31,11 +31,13 @@ impl TypeOptionBuilder for RichTextTypeOptionBuilder {
}
}
/// For the moment, the `RichTextTypeOptionPB` is empty. The `data` property is not
/// used yet.
#[derive(Debug, Clone, Default, Serialize, Deserialize, ProtoBuf)]
pub struct RichTextTypeOptionPB {
#[pb(index = 1)]
#[serde(default)]
data: String, //It's not used yet
data: String,
}
impl_type_option!(RichTextTypeOptionPB, FieldType::RichText);

View File

@ -100,7 +100,8 @@ impl GridRevisionEditor {
///
/// * `grid_id`: the id of the grid
/// * `field_id`: the id of the field
/// * `type_option_data`: the updated type-option data.
/// * `type_option_data`: the updated type-option data. The `type-option` data might be empty
/// if there is no type-option config for that field. For example, the `RichTextTypeOptionPB`.
///
pub async fn update_field_type_option(
&self,
@ -108,7 +109,6 @@ impl GridRevisionEditor {
field_id: &str,
type_option_data: Vec<u8>,
) -> FlowyResult<()> {
debug_assert!(!type_option_data.is_empty());
if type_option_data.is_empty() {
return Ok(());
}