chore: close grid handler

This commit is contained in:
appflowy 2022-04-10 16:29:45 +08:00
parent 5db5fd118e
commit 43095cb0dd
10 changed files with 38 additions and 23 deletions

View File

@ -65,7 +65,7 @@ class DocumentBloc extends Bloc<DocumentEvent, DocumentState> {
await _subscription?.cancel(); await _subscription?.cancel();
} }
service.closeDocument(docId: view.id); await service.closeDocument(docId: view.id);
return super.close(); return super.close();
} }

View File

@ -13,16 +13,15 @@ import 'grid_service.dart';
part 'grid_bloc.freezed.dart'; part 'grid_bloc.freezed.dart';
class GridBloc extends Bloc<GridEvent, GridState> { class GridBloc extends Bloc<GridEvent, GridState> {
final View view;
final GridService _gridService; final GridService _gridService;
final GridListener _gridListener; final GridListener _gridListener;
final GridFieldsListener _fieldListener; final GridFieldsListener _fieldListener;
GridBloc({required this.view}) GridBloc({required View view})
: _fieldListener = GridFieldsListener(gridId: view.id), : _fieldListener = GridFieldsListener(gridId: view.id),
_gridService = GridService(), _gridService = GridService(gridId: view.id),
_gridListener = GridListener(gridId: view.id), _gridListener = GridListener(gridId: view.id),
super(GridState.initial()) { super(GridState.initial(view.id)) {
on<GridEvent>( on<GridEvent>(
(event, emit) async { (event, emit) async {
await event.map( await event.map(
@ -31,7 +30,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
_startListening(); _startListening();
}, },
createRow: (_CreateRow value) { createRow: (_CreateRow value) {
_gridService.createRow(gridId: view.id); _gridService.createRow();
}, },
updateDesc: (_Desc value) {}, updateDesc: (_Desc value) {},
didReceiveRowUpdate: (_DidReceiveRowUpdate value) { didReceiveRowUpdate: (_DidReceiveRowUpdate value) {
@ -47,6 +46,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
@override @override
Future<void> close() async { Future<void> close() async {
await _gridService.closeGrid();
await _fieldListener.stop(); await _fieldListener.stop();
await _gridListener.stop(); await _gridListener.stop();
return super.close(); return super.close();
@ -86,7 +86,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
} }
Future<void> _loadGrid(Emitter<GridState> emit) async { Future<void> _loadGrid(Emitter<GridState> emit) async {
final result = await _gridService.loadGrid(gridId: view.id); final result = await _gridService.loadGrid();
return Future( return Future(
() => result.fold( () => result.fold(
(grid) async => await _loadFields(grid, emit), (grid) async => await _loadFields(grid, emit),
@ -96,7 +96,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
} }
Future<void> _loadFields(Grid grid, Emitter<GridState> emit) async { Future<void> _loadFields(Grid grid, Emitter<GridState> emit) async {
final result = await _gridService.getFields(gridId: grid.id, fieldOrders: grid.fieldOrders); final result = await _gridService.getFields(fieldOrders: grid.fieldOrders);
return Future( return Future(
() => result.fold( () => result.fold(
(fields) { (fields) {
@ -162,17 +162,19 @@ class GridEvent with _$GridEvent {
@freezed @freezed
class GridState with _$GridState { class GridState with _$GridState {
const factory GridState({ const factory GridState({
required String gridId,
required GridLoadingState loadingState, required GridLoadingState loadingState,
required List<Field> fields, required List<Field> fields,
required List<RowOrder> rows, required List<RowOrder> rows,
required Option<Grid> grid, required Option<Grid> grid,
}) = _GridState; }) = _GridState;
factory GridState.initial() => GridState( factory GridState.initial(String gridId) => GridState(
loadingState: const _Loading(), loadingState: const _Loading(),
fields: [], fields: [],
rows: [], rows: [],
grid: none(), grid: none(),
gridId: gridId,
); );
} }

View File

@ -1,27 +1,37 @@
import 'package:dartz/dartz.dart';
import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart';
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart';
import 'package:dartz/dartz.dart';
class GridService { class GridService {
Future<Either<Grid, FlowyError>> loadGrid({required String gridId}) async { final String gridId;
GridService({
required this.gridId,
});
Future<Either<Grid, FlowyError>> loadGrid() async {
await FolderEventSetLatestView(ViewId(value: gridId)).send(); await FolderEventSetLatestView(ViewId(value: gridId)).send();
final payload = GridId(value: gridId); final payload = GridId(value: gridId);
return GridEventGetGridData(payload).send(); return GridEventGetGridData(payload).send();
} }
Future<Either<Row, FlowyError>> createRow({required String gridId, Option<String>? startRowId}) { Future<Either<Row, FlowyError>> createRow({Option<String>? startRowId}) {
CreateRowPayload payload = CreateRowPayload.create()..gridId = gridId; CreateRowPayload payload = CreateRowPayload.create()..gridId = gridId;
startRowId?.fold(() => null, (id) => payload.startRowId = id); startRowId?.fold(() => null, (id) => payload.startRowId = id);
return GridEventCreateRow(payload).send(); return GridEventCreateRow(payload).send();
} }
Future<Either<RepeatedField, FlowyError>> getFields({required String gridId, required List<FieldOrder> fieldOrders}) { Future<Either<RepeatedField, FlowyError>> getFields({required List<FieldOrder> fieldOrders}) {
final payload = QueryFieldPayload.create() final payload = QueryFieldPayload.create()
..gridId = gridId ..gridId = gridId
..fieldOrders = RepeatedFieldOrder(items: fieldOrders); ..fieldOrders = RepeatedFieldOrder(items: fieldOrders);
return GridEventGetFields(payload).send(); return GridEventGetFields(payload).send();
} }
Future<Either<Unit, FlowyError>> closeGrid() {
final request = ViewId(value: gridId);
return FolderEventCloseView(request).send();
}
} }

View File

@ -83,8 +83,6 @@ class _FlowyGridState extends State<FlowyGrid> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final gridId = context.read<GridBloc>().view.id;
return BlocBuilder<GridBloc, GridState>( return BlocBuilder<GridBloc, GridState>(
buildWhen: (previous, current) => previous.fields != current.fields, buildWhen: (previous, current) => previous.fields != current.fields,
builder: (context, state) { builder: (context, state) {
@ -103,9 +101,9 @@ class _FlowyGridState extends State<FlowyGrid> {
physics: StyledScrollPhysics(), physics: StyledScrollPhysics(),
controller: _scrollController.verticalController, controller: _scrollController.verticalController,
slivers: [ slivers: [
_renderToolbar(gridId), _renderToolbar(state.gridId),
GridHeader(gridId: gridId, fields: List.from(state.fields)), GridHeader(gridId: state.gridId, fields: List.from(state.fields)),
_renderRows(gridId: gridId, context: context), _renderRows(gridId: state.gridId, context: context),
const GridFooter(), const GridFooter(),
], ],
), ),

View File

@ -151,7 +151,7 @@ impl ViewController {
} }
} }
let processor = self.get_data_processor_from_view_id(&params.value).await?; let processor = self.get_data_processor_from_view_id(&params.value).await?;
let _ = processor.close_container(&params.value).await?; let _ = processor.delete_container(&params.value).await?;
Ok(()) Ok(())
} }

View File

@ -73,7 +73,7 @@ impl GridManager {
self.get_or_create_grid_editor(grid_id).await self.get_or_create_grid_editor(grid_id).await
} }
#[tracing::instrument(level = "trace", skip_all, fields(grid_id), err)] #[tracing::instrument(level = "debug", skip_all, fields(grid_id), err)]
pub fn close_grid<T: AsRef<str>>(&self, grid_id: T) -> FlowyResult<()> { pub fn close_grid<T: AsRef<str>>(&self, grid_id: T) -> FlowyResult<()> {
let grid_id = grid_id.as_ref(); let grid_id = grid_id.as_ref();
tracing::Span::current().record("grid_id", &grid_id); tracing::Span::current().record("grid_id", &grid_id);

View File

@ -67,7 +67,7 @@ fn crate_log_filter(level: String) -> String {
filters.push(format!("flowy_sdk={}", level)); filters.push(format!("flowy_sdk={}", level));
filters.push(format!("flowy_folder={}", level)); filters.push(format!("flowy_folder={}", level));
filters.push(format!("flowy_user={}", level)); filters.push(format!("flowy_user={}", level));
filters.push(format!("flowy_block={}", level)); filters.push(format!("flowy_text_block={}", level));
filters.push(format!("flowy_grid={}", level)); filters.push(format!("flowy_grid={}", level));
filters.push(format!("flowy_collaboration={}", "debug")); filters.push(format!("flowy_collaboration={}", "debug"));
filters.push(format!("dart_notify={}", level)); filters.push(format!("dart_notify={}", level));

View File

@ -118,6 +118,7 @@ impl TextBlockManager {
} }
} }
#[tracing::instrument(level = "trace", skip(self, pool), err)]
async fn make_text_block_editor( async fn make_text_block_editor(
&self, &self,
block_id: &str, block_id: &str,

View File

@ -163,7 +163,11 @@ impl GridBlockMetaPad {
match cal_diff::<PlainTextAttributes>(old, new) { match cal_diff::<PlainTextAttributes>(old, new) {
None => Ok(None), None => Ok(None),
Some(delta) => { Some(delta) => {
tracing::debug!("[GridBlockMeta] Composing change {}", delta.to_delta_str()); tracing::debug!("[GridBlockMeta] Composing delta {}", delta.to_delta_str());
tracing::debug!(
"[GridBlockMeta] Composing str {}",
delta.to_str().unwrap_or("".to_string())
);
self.delta = self.delta.compose(&delta)?; self.delta = self.delta.compose(&delta)?;
Ok(Some(GridBlockMetaChange { delta, md5: self.md5() })) Ok(Some(GridBlockMetaChange { delta, md5: self.md5() }))
} }

View File

@ -163,7 +163,6 @@ impl ServerDocumentManager {
} }
} }
#[tracing::instrument(level = "debug", skip(self, repeated_revision), err)]
async fn create_document( async fn create_document(
&self, &self,
doc_id: &str, doc_id: &str,
@ -182,6 +181,7 @@ impl ServerDocumentManager {
} }
} }
#[tracing::instrument(level = "debug", skip(self, doc), err)]
async fn create_document_handler(&self, doc: TextBlockInfo) -> Result<Arc<OpenDocumentHandler>, CollaborateError> { async fn create_document_handler(&self, doc: TextBlockInfo) -> Result<Arc<OpenDocumentHandler>, CollaborateError> {
let persistence = self.persistence.clone(); let persistence = self.persistence.clone();
let handle = spawn_blocking(|| OpenDocumentHandler::new(doc, persistence)) let handle = spawn_blocking(|| OpenDocumentHandler::new(doc, persistence))