From a896637eab991a9f6c176e78890f5b4cd5bb6016 Mon Sep 17 00:00:00 2001 From: appflowy <annie@appflowy.io> Date: Wed, 24 Aug 2022 21:06:10 +0800 Subject: [PATCH] fix: reload card content --- .../plugins/board/application/board_bloc.dart | 5 +++- .../app_flowy/lib/plugins/board/board.dart | 2 +- .../card/board_select_option_cell.dart | 16 +++++------ .../plugins/board/presentation/card/card.dart | 8 +++++- .../cell/cell_service/cell_data_loader.dart | 28 +++++++++++-------- .../cell/cell_service/context_builder.dart | 3 +- .../board_column/board_column_data.dart | 2 -- .../flowy-grid/src/services/grid_editor.rs | 22 +++++++++++---- 8 files changed, 54 insertions(+), 32 deletions(-) diff --git a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart index 7c04dec814..422f1dff2b 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart @@ -317,6 +317,9 @@ class GroupControllerDelegateImpl extends GroupControllerDelegate { @override void updateRow(String groupId, RowPB row) { - controller.updateColumnItem(groupId, BoardColumnItem(row: row)); + // workaround: fix the board card reload timing issue. + Future.delayed(const Duration(milliseconds: 300), () { + controller.updateColumnItem(groupId, BoardColumnItem(row: row)); + }); } } diff --git a/frontend/app_flowy/lib/plugins/board/board.dart b/frontend/app_flowy/lib/plugins/board/board.dart index 213cc8bc3c..c55d7f2e17 100644 --- a/frontend/app_flowy/lib/plugins/board/board.dart +++ b/frontend/app_flowy/lib/plugins/board/board.dart @@ -31,7 +31,7 @@ class BoardPluginBuilder implements PluginBuilder { class BoardPluginConfig implements PluginConfig { @override - bool get creatable => true; + bool get creatable => false; } class BoardPlugin extends Plugin { diff --git a/frontend/app_flowy/lib/plugins/board/presentation/card/board_select_option_cell.dart b/frontend/app_flowy/lib/plugins/board/presentation/card/board_select_option_cell.dart index 373bb3c850..a51a36f99f 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/card/board_select_option_cell.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/card/board_select_option_cell.dart @@ -35,19 +35,17 @@ class _BoardSelectOptionCellState extends State<BoardSelectOptionCell> { child: BlocBuilder<BoardSelectOptionCellBloc, BoardSelectOptionCellState>( builder: (context, state) { final children = state.selectedOptions - .map((option) => SelectOptionTag.fromOption( - context: context, - option: option, - )) + .map( + (option) => SelectOptionTag.fromOption( + context: context, + option: option, + ), + ) .toList(); return Align( alignment: Alignment.centerLeft, child: AbsorbPointer( - child: Wrap( - children: children, - spacing: 4, - runSpacing: 2, - ), + child: Wrap(children: children, spacing: 4, runSpacing: 2), ), ); }, diff --git a/frontend/app_flowy/lib/plugins/board/presentation/card/card.dart b/frontend/app_flowy/lib/plugins/board/presentation/card/card.dart index a5c7b7ba2c..226a9e8241 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/card/card.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/card/card.dart @@ -42,7 +42,7 @@ class _BoardCardState extends State<BoardCard> { _cardBloc = BoardCardBloc( gridId: widget.gridId, dataController: widget.dataController, - ); + )..add(const BoardCardEvent.initial()); super.initState(); } @@ -79,6 +79,12 @@ class _BoardCardState extends State<BoardCard> { }, ).toList(); } + + @override + Future<void> dispose() async { + _cardBloc.close(); + super.dispose(); + } } class _CardMoreOption extends StatelessWidget with CardAccessory { diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_data_loader.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_data_loader.dart index c4b3430199..a6a1ba43a9 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_data_loader.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_data_loader.dart @@ -24,18 +24,21 @@ class GridCellDataLoader<T> { Future<T?> loadData() { final fut = service.getCell(cellId: cellId); return fut.then( - (result) => result.fold((GridCellPB cell) { - try { - return parser.parserData(cell.data); - } catch (e, s) { - Log.error('$parser parser cellData failed, $e'); - Log.error('Stack trace \n $s'); + (result) => result.fold( + (GridCellPB cell) { + try { + return parser.parserData(cell.data); + } catch (e, s) { + Log.error('$parser parser cellData failed, $e'); + Log.error('Stack trace \n $s'); + return null; + } + }, + (err) { + Log.error(err); return null; - } - }, (err) { - Log.error(err); - return null; - }), + }, + ), ); } } @@ -58,7 +61,8 @@ class DateCellDataParser implements IGridCellDataParser<DateCellDataPB> { } } -class SelectOptionCellDataParser implements IGridCellDataParser<SelectOptionCellDataPB> { +class SelectOptionCellDataParser + implements IGridCellDataParser<SelectOptionCellDataPB> { @override SelectOptionCellDataPB? parserData(List<int> data) { if (data.isEmpty) { diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/context_builder.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/context_builder.dart index 1068cbf36b..f3ed73b449 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/context_builder.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/context_builder.dart @@ -279,8 +279,9 @@ class IGridCellController<T, D> extends Equatable { _loadDataOperation?.cancel(); _loadDataOperation = Timer(const Duration(milliseconds: 10), () { _cellDataLoader.loadData().then((data) { - _cellDataNotifier?.value = data; + Log.debug('$fieldId CellData: Did Get cell data'); _cellsCache.insert(_cacheKey, GridCell(object: data)); + _cellDataNotifier?.value = data; }); }); } diff --git a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart index 8cf03d96c1..0015ebd479 100644 --- a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart +++ b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart @@ -133,8 +133,6 @@ class AFBoardColumnDataController extends ChangeNotifier with EquatableMixin { void replaceOrInsertItem(AFColumnItem newItem) { final index = columnData._items.indexWhere((item) => item.id == newItem.id); if (index != -1) { - removeAt(index); - columnData._items.removeAt(index); columnData._items.insert(index, newItem); notifyListeners(); diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index 8974cf0539..cdc6cf6e6b 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -582,7 +582,7 @@ impl GridRevisionEditor { pub async fn move_group_row(&self, params: MoveGroupRowParams) -> FlowyResult<()> { let MoveGroupRowParams { - view_id: _, + view_id, from_row_id, to_group_id, to_row_id, @@ -597,10 +597,22 @@ impl GridRevisionEditor { .await { tracing::trace!("Move group row cause row data changed: {:?}", row_changeset); - match self.block_manager.update_row(row_changeset).await { - Ok(_) => {} - Err(e) => { - tracing::error!("Apply row changeset error:{:?}", e); + + let cell_changesets = row_changeset + .cell_by_field_id + .into_iter() + .map(|(field_id, cell_rev)| CellChangesetPB { + grid_id: view_id.clone(), + row_id: row_changeset.row_id.clone(), + field_id, + content: cell_rev.data, + }) + .collect::<Vec<CellChangesetPB>>(); + + for cell_changeset in cell_changesets { + match self.block_manager.update_cell(cell_changeset).await { + Ok(_) => {} + Err(e) => tracing::error!("Apply cell changeset error:{:?}", e), } } }