chore: update cell when field changed

This commit is contained in:
appflowy 2022-04-09 16:15:26 +08:00
parent 8a94644add
commit a53ffdfade
3 changed files with 43 additions and 13 deletions

View File

@ -1,4 +1,5 @@
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart'; import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
import 'package:app_flowy/workspace/application/grid/field/field_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/log.dart'; import 'package:flowy_sdk/log.dart';
import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart' show Cell; import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart' show Cell;
@ -11,11 +12,13 @@ part 'date_cell_bloc.freezed.dart';
class DateCellBloc extends Bloc<DateCellEvent, DateCellState> { class DateCellBloc extends Bloc<DateCellEvent, DateCellState> {
final CellService _service; final CellService _service;
final CellListener _listener; final CellListener _cellListener;
final FieldListener _fieldListener;
DateCellBloc({required CellData cellData}) DateCellBloc({required CellData cellData})
: _service = CellService(), : _service = CellService(),
_listener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id), _cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
_fieldListener = FieldListener(fieldId: cellData.field.id),
super(DateCellState.initial(cellData)) { super(DateCellState.initial(cellData)) {
on<DateCellEvent>( on<DateCellEvent>(
(event, emit) async { (event, emit) async {
@ -39,18 +42,27 @@ class DateCellBloc extends Bloc<DateCellEvent, DateCellState> {
@override @override
Future<void> close() async { Future<void> close() async {
await _listener.stop(); await _cellListener.stop();
await _fieldListener.stop();
return super.close(); return super.close();
} }
void _startListening() { void _startListening() {
_listener.updateCellNotifier.addPublishListener((result) { _cellListener.updateCellNotifier.addPublishListener((result) {
result.fold( result.fold(
(notificationData) => _loadCellData(), (notificationData) => _loadCellData(),
(err) => Log.error(err), (err) => Log.error(err),
); );
}); });
_listener.start(); _cellListener.start();
_fieldListener.updateFieldNotifier.addPublishListener((result) {
result.fold(
(field) => _loadCellData(),
(err) => Log.error(err),
);
});
_fieldListener.start();
} }
Future<void> _loadCellData() async { Future<void> _loadCellData() async {

View File

@ -1,5 +1,6 @@
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart'; import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
import 'package:app_flowy/workspace/application/grid/cell_bloc/select_option_service.dart'; import 'package:app_flowy/workspace/application/grid/cell_bloc/select_option_service.dart';
import 'package:app_flowy/workspace/application/grid/field/field_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/log.dart'; import 'package:flowy_sdk/log.dart';
import 'package:flowy_sdk/protobuf/flowy-grid/selection_type_option.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/selection_type_option.pb.dart';
@ -11,12 +12,14 @@ part 'selection_cell_bloc.freezed.dart';
class SelectionCellBloc extends Bloc<SelectionCellEvent, SelectionCellState> { class SelectionCellBloc extends Bloc<SelectionCellEvent, SelectionCellState> {
final SelectOptionService _service; final SelectOptionService _service;
final CellListener _listener; final CellListener _cellListener;
final FieldListener _fieldListener;
SelectionCellBloc({ SelectionCellBloc({
required CellData cellData, required CellData cellData,
}) : _service = SelectOptionService(), }) : _service = SelectOptionService(),
_listener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id), _cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
_fieldListener = FieldListener(fieldId: cellData.field.id),
super(SelectionCellState.initial(cellData)) { super(SelectionCellState.initial(cellData)) {
on<SelectionCellEvent>( on<SelectionCellEvent>(
(event, emit) async { (event, emit) async {
@ -35,7 +38,8 @@ class SelectionCellBloc extends Bloc<SelectionCellEvent, SelectionCellState> {
@override @override
Future<void> close() async { Future<void> close() async {
await _listener.stop(); await _cellListener.stop();
await _fieldListener.stop();
return super.close(); return super.close();
} }
@ -56,13 +60,21 @@ class SelectionCellBloc extends Bloc<SelectionCellEvent, SelectionCellState> {
} }
void _startListening() { void _startListening() {
_listener.updateCellNotifier.addPublishListener((result) { _cellListener.updateCellNotifier.addPublishListener((result) {
result.fold( result.fold(
(notificationData) => _loadOptions(), (notificationData) => _loadOptions(),
(err) => Log.error(err), (err) => Log.error(err),
); );
}); });
_listener.start(); _cellListener.start();
_fieldListener.updateFieldNotifier.addPublishListener((result) {
result.fold(
(field) => _loadOptions(),
(err) => Log.error(err),
);
});
_fieldListener.start();
} }
} }

View File

@ -44,7 +44,7 @@ class _DateCellState extends State<DateCell> {
child: MouseRegion( child: MouseRegion(
opaque: false, opaque: false,
cursor: SystemMouseCursors.click, cursor: SystemMouseCursors.click,
child: FlowyText.medium(state.content, fontSize: 12), child: Center(child: FlowyText.medium(state.content, fontSize: 12)),
), ),
), ),
); );
@ -99,6 +99,7 @@ class _CellCalendar extends StatefulWidget {
} }
class _CellCalendarState extends State<_CellCalendar> { class _CellCalendarState extends State<_CellCalendar> {
CalendarFormat _calendarFormat = CalendarFormat.month;
DateTime _focusedDay = DateTime.now(); DateTime _focusedDay = DateTime.now();
DateTime? _selectedDay; DateTime? _selectedDay;
@ -108,7 +109,8 @@ class _CellCalendarState extends State<_CellCalendar> {
firstDay: kFirstDay, firstDay: kFirstDay,
lastDay: kLastDay, lastDay: kLastDay,
focusedDay: _focusedDay, focusedDay: _focusedDay,
calendarFormat: CalendarFormat.month, calendarFormat: _calendarFormat,
headerStyle: const HeaderStyle(formatButtonVisible: false),
selectedDayPredicate: (day) { selectedDayPredicate: (day) {
return isSameDay(_selectedDay, day); return isSameDay(_selectedDay, day);
}, },
@ -122,7 +124,11 @@ class _CellCalendarState extends State<_CellCalendar> {
}); });
} }
}, },
onFormatChanged: (format) {}, onFormatChanged: (format) {
setState(() {
_calendarFormat = format;
});
},
onPageChanged: (focusedDay) { onPageChanged: (focusedDay) {
_focusedDay = focusedDay; _focusedDay = focusedDay;
}, },