diff --git a/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/cell_data_loader.dart b/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/cell_data_loader.dart index b779d227b1..c4b3430199 100644 --- a/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/cell_data_loader.dart +++ b/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/cell_data_loader.dart @@ -5,14 +5,14 @@ abstract class IGridCellDataConfig { bool get reloadOnFieldChanged; } -abstract class ICellDataParser { +abstract class IGridCellDataParser { T? parserData(List data); } class GridCellDataLoader { final CellService service = CellService(); final GridCellIdentifier cellId; - final ICellDataParser parser; + final IGridCellDataParser parser; final bool reloadOnFieldChanged; GridCellDataLoader({ @@ -40,7 +40,7 @@ class GridCellDataLoader { } } -class StringCellDataParser implements ICellDataParser { +class StringCellDataParser implements IGridCellDataParser { @override String? parserData(List data) { final s = utf8.decode(data); @@ -48,7 +48,7 @@ class StringCellDataParser implements ICellDataParser { } } -class DateCellDataParser implements ICellDataParser { +class DateCellDataParser implements IGridCellDataParser { @override DateCellDataPB? parserData(List data) { if (data.isEmpty) { @@ -58,7 +58,7 @@ class DateCellDataParser implements ICellDataParser { } } -class SelectOptionCellDataParser implements ICellDataParser { +class SelectOptionCellDataParser implements IGridCellDataParser { @override SelectOptionCellDataPB? parserData(List data) { if (data.isEmpty) { @@ -68,7 +68,7 @@ class SelectOptionCellDataParser implements ICellDataParser { +class URLCellDataParser implements IGridCellDataParser { @override URLCellDataPB? parserData(List data) { if (data.isEmpty) { diff --git a/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/context_builder.dart b/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/context_builder.dart index 8e51e33f29..48e88e56ac 100644 --- a/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/context_builder.dart +++ b/frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/context_builder.dart @@ -52,6 +52,7 @@ class GridCellControllerBuilder { final cellDataLoader = GridCellDataLoader( cellId: _cellId, parser: StringCellDataParser(), + reloadOnFieldChanged: true, ); return GridCellController( cellId: _cellId, @@ -170,16 +171,13 @@ class IGridCellController extends Equatable { } isListening = true; - /// The cell data will be changed by two reasons: - /// 1. User edit the cell - /// 2. User edit the field - /// For example: The number cell reload the cell data that carries the format - /// user input: 12 - /// cell display: $12 _cellDataNotifier = ValueNotifier(_cellsCache.get(_cacheKey)); _cellListener = CellListener(rowId: cellId.rowId, fieldId: cellId.field.id); /// 1.Listen on user edit event and load the new cell data if needed. + /// For example: + /// user input: 12 + /// cell display: $12 _cellListener.start(onCellChanged: (result) { result.fold( (_) => _loadData(), @@ -193,6 +191,9 @@ class IGridCellController extends Equatable { onCellFieldChanged(); } + /// reloadOnFieldChanged should be true if you need to load the data when the corresponding field is changed + /// For example: + /// ¥12 -> $12 if (_cellDataLoader.reloadOnFieldChanged) { _loadData(); } diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/cell_builder.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/cell_builder.dart index 10efcbb0de..f785672f71 100755 --- a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/cell_builder.dart +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/cell_builder.dart @@ -30,15 +30,15 @@ class GridCellBuilder { final key = cell.key(); switch (cell.fieldType) { case FieldType.Checkbox: - return CheckboxCell(cellControllerBuilder: cellControllerBuilder, key: key); + return GridCheckboxCell(cellControllerBuilder: cellControllerBuilder, key: key); case FieldType.DateTime: - return DateCell(cellControllerBuilder: cellControllerBuilder, key: key, style: style); + return GridDateCell(cellControllerBuilder: cellControllerBuilder, key: key, style: style); case FieldType.SingleSelect: - return SingleSelectCell(cellContorllerBuilder: cellControllerBuilder, style: style, key: key); + return GridSingleSelectCell(cellContorllerBuilder: cellControllerBuilder, style: style, key: key); case FieldType.MultiSelect: - return MultiSelectCell(cellContorllerBuilder: cellControllerBuilder, style: style, key: key); + return GridMultiSelectCell(cellContorllerBuilder: cellControllerBuilder, style: style, key: key); case FieldType.Number: - return NumberCell(cellContorllerBuilder: cellControllerBuilder, key: key); + return GridNumberCell(cellContorllerBuilder: cellControllerBuilder, key: key); case FieldType.RichText: return GridTextCell(cellContorllerBuilder: cellControllerBuilder, style: style, key: key); case FieldType.URL: diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/checkbox_cell.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/checkbox_cell.dart index ac2a2fb979..9fcbaf751f 100644 --- a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/checkbox_cell.dart +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/checkbox_cell.dart @@ -6,18 +6,18 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'cell_builder.dart'; -class CheckboxCell extends GridCellWidget { +class GridCheckboxCell extends GridCellWidget { final GridCellControllerBuilder cellControllerBuilder; - CheckboxCell({ + GridCheckboxCell({ required this.cellControllerBuilder, Key? key, }) : super(key: key); @override - GridCellState createState() => _CheckboxCellState(); + GridCellState createState() => _CheckboxCellState(); } -class _CheckboxCellState extends GridCellState { +class _CheckboxCellState extends GridCellState { late CheckboxCellBloc _cellBloc; @override diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/date_cell/date_cell.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/date_cell/date_cell.dart index 7436d0ac7f..78d18a50e8 100644 --- a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/date_cell/date_cell.dart +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/date_cell/date_cell.dart @@ -18,11 +18,11 @@ abstract class GridCellDelegate { GridCellDelegate get delegate; } -class DateCell extends GridCellWidget { +class GridDateCell extends GridCellWidget { final GridCellControllerBuilder cellControllerBuilder; late final DateCellStyle? cellStyle; - DateCell({ + GridDateCell({ GridCellStyle? style, required this.cellControllerBuilder, Key? key, @@ -35,10 +35,10 @@ class DateCell extends GridCellWidget { } @override - GridCellState createState() => _DateCellState(); + GridCellState createState() => _DateCellState(); } -class _DateCellState extends GridCellState { +class _DateCellState extends GridCellState { late DateCellBloc _cellBloc; @override diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/number_cell.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/number_cell.dart index 6b1cf4ceae..573a4168c9 100644 --- a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/number_cell.dart +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/number_cell.dart @@ -6,19 +6,19 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'cell_builder.dart'; -class NumberCell extends GridCellWidget { +class GridNumberCell extends GridCellWidget { final GridCellControllerBuilder cellContorllerBuilder; - NumberCell({ + GridNumberCell({ required this.cellContorllerBuilder, Key? key, }) : super(key: key); @override - GridFocusNodeCellState createState() => _NumberCellState(); + GridFocusNodeCellState createState() => _NumberCellState(); } -class _NumberCellState extends GridFocusNodeCellState { +class _NumberCellState extends GridFocusNodeCellState { late NumberCellBloc _cellBloc; late TextEditingController _controller; Timer? _delayOperation; diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/select_option_cell/select_option_cell.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/select_option_cell/select_option_cell.dart index 6669e84576..f822e503d2 100644 --- a/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/select_option_cell/select_option_cell.dart +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/select_option_cell/select_option_cell.dart @@ -20,11 +20,11 @@ class SelectOptionCellStyle extends GridCellStyle { }); } -class SingleSelectCell extends GridCellWidget { +class GridSingleSelectCell extends GridCellWidget { final GridCellControllerBuilder cellContorllerBuilder; late final SelectOptionCellStyle? cellStyle; - SingleSelectCell({ + GridSingleSelectCell({ required this.cellContorllerBuilder, GridCellStyle? style, Key? key, @@ -37,10 +37,10 @@ class SingleSelectCell extends GridCellWidget { } @override - State createState() => _SingleSelectCellState(); + State createState() => _SingleSelectCellState(); } -class _SingleSelectCellState extends State { +class _SingleSelectCellState extends State { late SelectOptionCellBloc _cellBloc; @override @@ -74,11 +74,11 @@ class _SingleSelectCellState extends State { } //---------------------------------------------------------------- -class MultiSelectCell extends GridCellWidget { +class GridMultiSelectCell extends GridCellWidget { final GridCellControllerBuilder cellContorllerBuilder; late final SelectOptionCellStyle? cellStyle; - MultiSelectCell({ + GridMultiSelectCell({ required this.cellContorllerBuilder, GridCellStyle? style, Key? key, @@ -91,10 +91,10 @@ class MultiSelectCell extends GridCellWidget { } @override - State createState() => _MultiSelectCellState(); + State createState() => _MultiSelectCellState(); } -class _MultiSelectCellState extends State { +class _MultiSelectCellState extends State { late SelectOptionCellBloc _cellBloc; @override