diff --git a/frontend/app_flowy/lib/workspace/application/grid/row/row_bloc.dart b/frontend/app_flowy/lib/workspace/application/grid/row/row_bloc.dart index ac99eac67b..6fc7221a76 100644 --- a/frontend/app_flowy/lib/workspace/application/grid/row/row_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/grid/row/row_bloc.dart @@ -41,12 +41,6 @@ class RowBloc extends Bloc { createRow: (_CreateRow value) { rowService.createRow(); }, - activeRow: (_ActiveRow value) { - emit(state.copyWith(active: true)); - }, - disactiveRow: (_DisactiveRow value) { - emit(state.copyWith(active: false)); - }, didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) { emit(state.copyWith(fields: value.fields)); add(const RowEvent.didUpdateCell()); @@ -133,8 +127,6 @@ class RowBloc extends Bloc { class RowEvent with _$RowEvent { const factory RowEvent.initial() = _InitialRow; const factory RowEvent.createRow() = _CreateRow; - const factory RowEvent.activeRow() = _ActiveRow; - const factory RowEvent.disactiveRow() = _DisactiveRow; const factory RowEvent.didReceiveFieldUpdate(List fields) = _DidReceiveFieldUpdate; const factory RowEvent.didUpdateCell() = _DidUpdateCell; } @@ -143,7 +135,6 @@ class RowEvent with _$RowEvent { class RowState with _$RowState { const factory RowState({ required String rowId, - required bool active, required double rowHeight, required List fields, required Future> row, @@ -152,7 +143,6 @@ class RowState with _$RowState { factory RowState.initial(GridRowData data) => RowState( rowId: data.rowId, - active: false, rowHeight: data.height, fields: data.fields, row: Future(() => none()), diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/content/grid_row.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/content/grid_row.dart index b8834cd213..23918401c4 100755 --- a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/content/grid_row.dart +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/content/grid_row.dart @@ -6,6 +6,7 @@ import 'package:flowy_infra/theme.dart'; import 'package:flowy_infra_ui/style_widget/icon_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:provider/provider.dart'; import 'cell_builder.dart'; import 'cell_container.dart'; @@ -19,10 +20,12 @@ class GridRowWidget extends StatefulWidget { class _GridRowWidgetState extends State { late RowBloc _rowBloc; + late RowRegionStateNotifier _rowStateNotifier; @override void initState() { _rowBloc = getIt(param1: widget.data)..add(const RowEvent.initial()); + _rowStateNotifier = RowRegionStateNotifier(); super.initState(); } @@ -30,25 +33,28 @@ class _GridRowWidgetState extends State { Widget build(BuildContext context) { return BlocProvider.value( value: _rowBloc, - child: MouseRegion( - cursor: SystemMouseCursors.click, - onEnter: (p) => _rowBloc.add(const RowEvent.activeRow()), - onExit: (p) => _rowBloc.add(const RowEvent.disactiveRow()), - child: BlocBuilder( - buildWhen: (p, c) => p.rowHeight != c.rowHeight, - builder: (context, state) { - return SizedBox( - height: _rowBloc.state.rowHeight, - child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: const [ - _RowLeading(), - _RowCells(), - _RowTrailing(), - ], - ), - ); - }, + child: ChangeNotifierProvider.value( + value: _rowStateNotifier, + child: MouseRegion( + cursor: SystemMouseCursors.click, + onEnter: (p) => _rowStateNotifier.onEnter = true, + onExit: (p) => _rowStateNotifier.onEnter = false, + child: BlocBuilder( + buildWhen: (p, c) => p.rowHeight != c.rowHeight, + builder: (context, state) { + return SizedBox( + height: _rowBloc.state.rowHeight, + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: const [ + _RowLeading(), + _RowCells(), + _RowTrailing(), + ], + ), + ); + }, + ), ), ), ); @@ -57,6 +63,7 @@ class _GridRowWidgetState extends State { @override Future dispose() async { _rowBloc.close(); + _rowStateNotifier.dispose(); super.dispose(); } } @@ -66,10 +73,9 @@ class _RowLeading extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocSelector( - selector: (state) => state.active, - builder: (context, isActive) { - return SizedBox(width: GridSize.leadingHeaderPadding, child: isActive ? _activeWidget() : null); + return Consumer( + builder: (context, state, _) { + return SizedBox(width: GridSize.leadingHeaderPadding, child: state.onEnter ? _activeWidget() : null); }, ); } @@ -133,3 +139,16 @@ class _RowCells extends StatelessWidget { ); } } + +class RowRegionStateNotifier extends ChangeNotifier { + bool _onEnter = false; + + set onEnter(bool value) { + if (_onEnter != value) { + _onEnter = value; + notifyListeners(); + } + } + + bool get onEnter => _onEnter; +} 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 e7d57634b8..3925f80b24 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -233,7 +233,7 @@ impl ClientGridEditor { } } - pub async fn update_cell(&self, changeset: CellMetaChangeset) -> FlowyResult<()> { + pub async fn update_cell(&self, mut changeset: CellMetaChangeset) -> FlowyResult<()> { if let Some(cell_data) = changeset.data.as_ref() { match self.pad.read().await.get_field(&changeset.field_id) { None => { @@ -241,7 +241,8 @@ impl ClientGridEditor { .context(format!("Can not find the field with id: {}", &changeset.field_id))); } Some(field_meta) => { - let _ = serialize_cell_data(cell_data, field_meta)?; + let cell_data = serialize_cell_data(cell_data, field_meta)?; + changeset.data = Some(cell_data); } } } @@ -300,7 +301,8 @@ impl ClientGridEditor { pub async fn grid_block_snapshots(&self, block_ids: Option>) -> FlowyResult> { let block_ids = match block_ids { - None => self.pad + None => self + .pad .read() .await .get_block_metas() diff --git a/shared-lib/flowy-sync/src/client_grid/grid_block_meta_pad.rs b/shared-lib/flowy-sync/src/client_grid/grid_block_meta_pad.rs index c0b86ac4af..688b32cccc 100644 --- a/shared-lib/flowy-sync/src/client_grid/grid_block_meta_pad.rs +++ b/shared-lib/flowy-sync/src/client_grid/grid_block_meta_pad.rs @@ -24,8 +24,7 @@ pub struct GridBlockMetaPad { impl GridBlockMetaPad { pub fn from_delta(delta: GridBlockMetaDelta) -> CollaborateResult { let s = delta.to_str()?; - tracing::info!("delta: {}", delta); - tracing::info!("{}", s); + tracing::trace!("{}", s); let meta_data: GridBlockMetaData = serde_json::from_str(&s).map_err(|e| { let msg = format!("Deserialize delta to block meta failed: {}", e); CollaborateError::internal().context(msg)