|
@@ -1,5 +1,7 @@
|
|
|
|
+import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
|
|
import 'package:app_flowy/workspace/application/grid/row/row_service.dart';
|
|
import 'package:app_flowy/workspace/application/grid/row/row_service.dart';
|
|
-import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart';
|
|
|
|
|
|
+import 'package:flowy_sdk/log.dart';
|
|
|
|
+import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart' show Cell;
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
import 'dart:async';
|
|
import 'dart:async';
|
|
@@ -8,17 +10,32 @@ import 'cell_service.dart';
|
|
part 'checkbox_cell_bloc.freezed.dart';
|
|
part 'checkbox_cell_bloc.freezed.dart';
|
|
|
|
|
|
class CheckboxCellBloc extends Bloc<CheckboxCellEvent, CheckboxCellState> {
|
|
class CheckboxCellBloc extends Bloc<CheckboxCellEvent, CheckboxCellState> {
|
|
- final CellService service;
|
|
|
|
- // final CellData cellData;
|
|
|
|
|
|
+ final CellService _service;
|
|
|
|
+ final CellListener _listener;
|
|
|
|
|
|
CheckboxCellBloc({
|
|
CheckboxCellBloc({
|
|
- required this.service,
|
|
|
|
|
|
+ required CellService service,
|
|
required CellData cellData,
|
|
required CellData cellData,
|
|
- }) : super(CheckboxCellState.initial()) {
|
|
|
|
|
|
+ }) : _service = service,
|
|
|
|
+ _listener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
|
|
|
+ super(CheckboxCellState.initial(cellData)) {
|
|
on<CheckboxCellEvent>(
|
|
on<CheckboxCellEvent>(
|
|
(event, emit) async {
|
|
(event, emit) async {
|
|
await event.map(
|
|
await event.map(
|
|
- initial: (_InitialCell value) async {},
|
|
|
|
|
|
+ initial: (_Initial value) {
|
|
|
|
+ _startListening();
|
|
|
|
+ },
|
|
|
|
+ select: (_Selected value) async {
|
|
|
|
+ service.updateCell(
|
|
|
|
+ gridId: state.cellData.gridId,
|
|
|
|
+ fieldId: state.cellData.field.id,
|
|
|
|
+ rowId: state.cellData.rowId,
|
|
|
|
+ data: !state.isSelected ? "Yes" : "No",
|
|
|
|
+ );
|
|
|
|
+ },
|
|
|
|
+ didReceiveCellUpdate: (_DidReceiveCellUpdate value) {
|
|
|
|
+ emit(state.copyWith(isSelected: isSelected(value.cell)));
|
|
|
|
+ },
|
|
);
|
|
);
|
|
},
|
|
},
|
|
);
|
|
);
|
|
@@ -28,18 +45,48 @@ class CheckboxCellBloc extends Bloc<CheckboxCellEvent, CheckboxCellState> {
|
|
Future<void> close() async {
|
|
Future<void> close() async {
|
|
return super.close();
|
|
return super.close();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ void _startListening() {
|
|
|
|
+ _listener.updateCellNotifier.addPublishListener((result) {
|
|
|
|
+ result.fold(
|
|
|
|
+ (notificationData) async {
|
|
|
|
+ final result = await _service.getCell(
|
|
|
|
+ gridId: state.cellData.gridId,
|
|
|
|
+ fieldId: state.cellData.field.id,
|
|
|
|
+ rowId: state.cellData.rowId,
|
|
|
|
+ );
|
|
|
|
+ result.fold(
|
|
|
|
+ (cell) => add(CheckboxCellEvent.didReceiveCellUpdate(cell)),
|
|
|
|
+ (err) => Log.error(err),
|
|
|
|
+ );
|
|
|
|
+ },
|
|
|
|
+ (err) => Log.error(err),
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+ _listener.start();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@freezed
|
|
@freezed
|
|
class CheckboxCellEvent with _$CheckboxCellEvent {
|
|
class CheckboxCellEvent with _$CheckboxCellEvent {
|
|
- const factory CheckboxCellEvent.initial() = _InitialCell;
|
|
|
|
|
|
+ const factory CheckboxCellEvent.initial() = _Initial;
|
|
|
|
+ const factory CheckboxCellEvent.select() = _Selected;
|
|
|
|
+ const factory CheckboxCellEvent.didReceiveCellUpdate(Cell cell) = _DidReceiveCellUpdate;
|
|
}
|
|
}
|
|
|
|
|
|
@freezed
|
|
@freezed
|
|
class CheckboxCellState with _$CheckboxCellState {
|
|
class CheckboxCellState with _$CheckboxCellState {
|
|
const factory CheckboxCellState({
|
|
const factory CheckboxCellState({
|
|
- required Cell? cell,
|
|
|
|
|
|
+ required CellData cellData,
|
|
|
|
+ required bool isSelected,
|
|
}) = _CheckboxCellState;
|
|
}) = _CheckboxCellState;
|
|
|
|
|
|
- factory CheckboxCellState.initial() => const CheckboxCellState(cell: null);
|
|
|
|
|
|
+ factory CheckboxCellState.initial(CellData cellData) {
|
|
|
|
+ return CheckboxCellState(cellData: cellData, isSelected: isSelected(cellData.cell));
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool isSelected(Cell? cell) {
|
|
|
|
+ final content = cell?.content ?? "";
|
|
|
|
+ return content == "Yes";
|
|
}
|
|
}
|