mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: add cell cache
This commit is contained in:
parent
c82754f284
commit
e647fd0a57
@ -171,32 +171,32 @@ void _resolveGridDeps(GetIt getIt) {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
getIt.registerFactoryParam<TextCellBloc, CellData, void>(
|
getIt.registerFactoryParam<TextCellBloc, GridCellIdentifier, void>(
|
||||||
(cellData, _) => TextCellBloc(
|
(cellData, _) => TextCellBloc(
|
||||||
service: CellService(),
|
service: CellService(),
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
getIt.registerFactoryParam<SelectionCellBloc, CellData, void>(
|
getIt.registerFactoryParam<SelectionCellBloc, GridCellIdentifier, void>(
|
||||||
(cellData, _) => SelectionCellBloc(
|
(cellData, _) => SelectionCellBloc(
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
getIt.registerFactoryParam<NumberCellBloc, CellData, void>(
|
getIt.registerFactoryParam<NumberCellBloc, GridCellIdentifier, void>(
|
||||||
(cellData, _) => NumberCellBloc(
|
(cellData, _) => NumberCellBloc(
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
getIt.registerFactoryParam<DateCellBloc, CellData, void>(
|
getIt.registerFactoryParam<DateCellBloc, GridCellIdentifier, void>(
|
||||||
(cellData, _) => DateCellBloc(
|
(cellData, _) => DateCellBloc(
|
||||||
cellData: cellData,
|
cellIdentifier: cellData,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
getIt.registerFactoryParam<CheckboxCellBloc, CellData, void>(
|
getIt.registerFactoryParam<CheckboxCellBloc, GridCellIdentifier, void>(
|
||||||
(cellData, _) => CheckboxCellBloc(
|
(cellData, _) => CheckboxCellBloc(
|
||||||
service: CellService(),
|
service: CellService(),
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
|
@ -0,0 +1,75 @@
|
|||||||
|
import 'dart:collection';
|
||||||
|
|
||||||
|
import 'package:app_flowy/workspace/application/grid/row/row_service.dart';
|
||||||
|
import 'package:flowy_sdk/log.dart';
|
||||||
|
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||||
|
import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart';
|
||||||
|
import 'package:flowy_sdk/protobuf/flowy-grid/cell_entities.pb.dart';
|
||||||
|
|
||||||
|
class CellService {
|
||||||
|
CellService();
|
||||||
|
|
||||||
|
Future<Either<void, FlowyError>> updateCell({
|
||||||
|
required String gridId,
|
||||||
|
required String fieldId,
|
||||||
|
required String rowId,
|
||||||
|
required String data,
|
||||||
|
}) {
|
||||||
|
final payload = CellChangeset.create()
|
||||||
|
..gridId = gridId
|
||||||
|
..fieldId = fieldId
|
||||||
|
..rowId = rowId
|
||||||
|
..data = data;
|
||||||
|
return GridEventUpdateCell(payload).send();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Either<Cell, FlowyError>> getCell({
|
||||||
|
required String gridId,
|
||||||
|
required String fieldId,
|
||||||
|
required String rowId,
|
||||||
|
}) {
|
||||||
|
final payload = CellIdentifierPayload.create()
|
||||||
|
..gridId = gridId
|
||||||
|
..fieldId = fieldId
|
||||||
|
..rowId = rowId;
|
||||||
|
return GridEventGetCell(payload).send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CellCache {
|
||||||
|
final CellService _cellService;
|
||||||
|
final HashMap<String, Cell> _cellDataMap = HashMap();
|
||||||
|
|
||||||
|
CellCache() : _cellService = CellService();
|
||||||
|
|
||||||
|
Future<Option<Cell>> getCellData(GridCellIdentifier identifier) async {
|
||||||
|
final cellId = _cellId(identifier);
|
||||||
|
final Cell? data = _cellDataMap[cellId];
|
||||||
|
if (data != null) {
|
||||||
|
return Future(() => Some(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
final result = await _cellService.getCell(
|
||||||
|
gridId: identifier.gridId,
|
||||||
|
fieldId: identifier.field.id,
|
||||||
|
rowId: identifier.rowId,
|
||||||
|
);
|
||||||
|
|
||||||
|
return result.fold(
|
||||||
|
(cell) {
|
||||||
|
_cellDataMap[_cellId(identifier)] = cell;
|
||||||
|
return Some(cell);
|
||||||
|
},
|
||||||
|
(err) {
|
||||||
|
Log.error(err);
|
||||||
|
return none();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String _cellId(GridCellIdentifier identifier) {
|
||||||
|
return "${identifier.rowId}/${identifier.field.id}";
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/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/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;
|
||||||
@ -15,7 +15,7 @@ class CheckboxCellBloc extends Bloc<CheckboxCellEvent, CheckboxCellState> {
|
|||||||
|
|
||||||
CheckboxCellBloc({
|
CheckboxCellBloc({
|
||||||
required CellService service,
|
required CellService service,
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
}) : _service = service,
|
}) : _service = service,
|
||||||
_listener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
_listener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
||||||
super(CheckboxCellState.initial(cellData)) {
|
super(CheckboxCellState.initial(cellData)) {
|
||||||
@ -87,11 +87,11 @@ class CheckboxCellEvent with _$CheckboxCellEvent {
|
|||||||
@freezed
|
@freezed
|
||||||
class CheckboxCellState with _$CheckboxCellState {
|
class CheckboxCellState with _$CheckboxCellState {
|
||||||
const factory CheckboxCellState({
|
const factory CheckboxCellState({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
required bool isSelected,
|
required bool isSelected,
|
||||||
}) = _CheckboxCellState;
|
}) = _CheckboxCellState;
|
||||||
|
|
||||||
factory CheckboxCellState.initial(CellData cellData) {
|
factory CheckboxCellState.initial(GridCellIdentifier cellData) {
|
||||||
return CheckboxCellState(cellData: cellData, isSelected: _isSelected(cellData.cell));
|
return CheckboxCellState(cellData: cellData, isSelected: _isSelected(cellData.cell));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/cell_listener.dart';
|
||||||
import 'package:app_flowy/workspace/application/grid/field/field_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';
|
||||||
@ -15,11 +15,11 @@ class DateCellBloc extends Bloc<DateCellEvent, DateCellState> {
|
|||||||
final CellListener _cellListener;
|
final CellListener _cellListener;
|
||||||
final SingleFieldListener _fieldListener;
|
final SingleFieldListener _fieldListener;
|
||||||
|
|
||||||
DateCellBloc({required CellData cellData})
|
DateCellBloc({required GridCellIdentifier cellIdentifier})
|
||||||
: _service = CellService(),
|
: _service = CellService(),
|
||||||
_cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
_cellListener = CellListener(rowId: cellIdentifier.rowId, fieldId: cellIdentifier.field.id),
|
||||||
_fieldListener = SingleFieldListener(fieldId: cellData.field.id),
|
_fieldListener = SingleFieldListener(fieldId: cellIdentifier.field.id),
|
||||||
super(DateCellState.initial(cellData)) {
|
super(DateCellState.initial(cellIdentifier)) {
|
||||||
on<DateCellEvent>(
|
on<DateCellEvent>(
|
||||||
(event, emit) async {
|
(event, emit) async {
|
||||||
event.map(
|
event.map(
|
||||||
@ -106,13 +106,13 @@ class DateCellEvent with _$DateCellEvent {
|
|||||||
@freezed
|
@freezed
|
||||||
class DateCellState with _$DateCellState {
|
class DateCellState with _$DateCellState {
|
||||||
const factory DateCellState({
|
const factory DateCellState({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
required String content,
|
required String content,
|
||||||
required Field field,
|
required Field field,
|
||||||
DateTime? selectedDay,
|
DateTime? selectedDay,
|
||||||
}) = _DateCellState;
|
}) = _DateCellState;
|
||||||
|
|
||||||
factory DateCellState.initial(CellData cellData) => DateCellState(
|
factory DateCellState.initial(GridCellIdentifier cellData) => DateCellState(
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
field: cellData.field,
|
field: cellData.field,
|
||||||
content: cellData.cell?.content ?? "",
|
content: cellData.cell?.content ?? "",
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/cell_listener.dart';
|
||||||
import 'package:app_flowy/workspace/application/grid/field/field_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';
|
||||||
@ -16,7 +16,7 @@ class NumberCellBloc extends Bloc<NumberCellEvent, NumberCellState> {
|
|||||||
final SingleFieldListener _fieldListener;
|
final SingleFieldListener _fieldListener;
|
||||||
|
|
||||||
NumberCellBloc({
|
NumberCellBloc({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
}) : _service = CellService(),
|
}) : _service = CellService(),
|
||||||
_cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
_cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
||||||
_fieldListener = SingleFieldListener(fieldId: cellData.field.id),
|
_fieldListener = SingleFieldListener(fieldId: cellData.field.id),
|
||||||
@ -105,11 +105,11 @@ class NumberCellEvent with _$NumberCellEvent {
|
|||||||
@freezed
|
@freezed
|
||||||
class NumberCellState with _$NumberCellState {
|
class NumberCellState with _$NumberCellState {
|
||||||
const factory NumberCellState({
|
const factory NumberCellState({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
required String content,
|
required String content,
|
||||||
}) = _NumberCellState;
|
}) = _NumberCellState;
|
||||||
|
|
||||||
factory NumberCellState.initial(CellData cellData) {
|
factory NumberCellState.initial(GridCellIdentifier cellData) {
|
||||||
return NumberCellState(cellData: cellData, content: cellData.cell?.content ?? "");
|
return NumberCellState(cellData: cellData, content: cellData.cell?.content ?? "");
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/cell_listener.dart';
|
||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/select_option_service.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/select_option_service.dart';
|
||||||
import 'package:app_flowy/workspace/application/grid/field/field_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';
|
||||||
@ -16,7 +16,7 @@ class SelectionCellBloc extends Bloc<SelectionCellEvent, SelectionCellState> {
|
|||||||
final SingleFieldListener _fieldListener;
|
final SingleFieldListener _fieldListener;
|
||||||
|
|
||||||
SelectionCellBloc({
|
SelectionCellBloc({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
}) : _service = SelectOptionService(),
|
}) : _service = SelectOptionService(),
|
||||||
_cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
_cellListener = CellListener(rowId: cellData.rowId, fieldId: cellData.field.id),
|
||||||
_fieldListener = SingleFieldListener(fieldId: cellData.field.id),
|
_fieldListener = SingleFieldListener(fieldId: cellData.field.id),
|
||||||
@ -93,12 +93,12 @@ class SelectionCellEvent with _$SelectionCellEvent {
|
|||||||
@freezed
|
@freezed
|
||||||
class SelectionCellState with _$SelectionCellState {
|
class SelectionCellState with _$SelectionCellState {
|
||||||
const factory SelectionCellState({
|
const factory SelectionCellState({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
required List<SelectOption> options,
|
required List<SelectOption> options,
|
||||||
required List<SelectOption> selectedOptions,
|
required List<SelectOption> selectedOptions,
|
||||||
}) = _SelectionCellState;
|
}) = _SelectionCellState;
|
||||||
|
|
||||||
factory SelectionCellState.initial(CellData cellData) => SelectionCellState(
|
factory SelectionCellState.initial(GridCellIdentifier cellData) => SelectionCellState(
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
options: [],
|
options: [],
|
||||||
selectedOptions: [],
|
selectedOptions: [],
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/cell_listener.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/cell_listener.dart';
|
||||||
import 'package:app_flowy/workspace/application/grid/field/field_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';
|
||||||
@ -18,7 +18,7 @@ class SelectOptionEditorBloc extends Bloc<SelectOptionEditorEvent, SelectOptionE
|
|||||||
Timer? _delayOperation;
|
Timer? _delayOperation;
|
||||||
|
|
||||||
SelectOptionEditorBloc({
|
SelectOptionEditorBloc({
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
required List<SelectOption> options,
|
required List<SelectOption> options,
|
||||||
required List<SelectOption> selectedOptions,
|
required List<SelectOption> selectedOptions,
|
||||||
}) : _selectOptionService = SelectOptionService(),
|
}) : _selectOptionService = SelectOptionService(),
|
||||||
@ -174,7 +174,7 @@ class SelectOptionEditorState with _$SelectOptionEditorState {
|
|||||||
}) = _SelectOptionEditorState;
|
}) = _SelectOptionEditorState;
|
||||||
|
|
||||||
factory SelectOptionEditorState.initial(
|
factory SelectOptionEditorState.initial(
|
||||||
CellData cellData,
|
GridCellIdentifier cellData,
|
||||||
List<SelectOption> options,
|
List<SelectOption> options,
|
||||||
List<SelectOption> selectedOptions,
|
List<SelectOption> selectedOptions,
|
||||||
) {
|
) {
|
@ -11,7 +11,7 @@ class TextCellBloc extends Bloc<TextCellEvent, TextCellState> {
|
|||||||
|
|
||||||
TextCellBloc({
|
TextCellBloc({
|
||||||
required this.service,
|
required this.service,
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
}) : super(TextCellState.initial(cellData)) {
|
}) : super(TextCellState.initial(cellData)) {
|
||||||
on<TextCellEvent>(
|
on<TextCellEvent>(
|
||||||
(event, emit) async {
|
(event, emit) async {
|
||||||
@ -53,7 +53,7 @@ class TextCellBloc extends Bloc<TextCellEvent, TextCellState> {
|
|||||||
@freezed
|
@freezed
|
||||||
class TextCellEvent with _$TextCellEvent {
|
class TextCellEvent with _$TextCellEvent {
|
||||||
const factory TextCellEvent.initial() = _InitialCell;
|
const factory TextCellEvent.initial() = _InitialCell;
|
||||||
const factory TextCellEvent.didReceiveCellData(CellData cellData) = _DidReceiveCellData;
|
const factory TextCellEvent.didReceiveCellData(GridCellIdentifier cellData) = _DidReceiveCellData;
|
||||||
const factory TextCellEvent.updateText(String text) = _UpdateText;
|
const factory TextCellEvent.updateText(String text) = _UpdateText;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,10 +61,10 @@ class TextCellEvent with _$TextCellEvent {
|
|||||||
class TextCellState with _$TextCellState {
|
class TextCellState with _$TextCellState {
|
||||||
const factory TextCellState({
|
const factory TextCellState({
|
||||||
required String content,
|
required String content,
|
||||||
required CellData cellData,
|
required GridCellIdentifier cellData,
|
||||||
}) = _TextCellState;
|
}) = _TextCellState;
|
||||||
|
|
||||||
factory TextCellState.initial(CellData cellData) => TextCellState(
|
factory TextCellState.initial(GridCellIdentifier cellData) => TextCellState(
|
||||||
content: cellData.cell?.content ?? "",
|
content: cellData.cell?.content ?? "",
|
||||||
cellData: cellData,
|
cellData: cellData,
|
||||||
);
|
);
|
@ -1,35 +0,0 @@
|
|||||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
|
||||||
import 'package:dartz/dartz.dart';
|
|
||||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid-data-model/grid.pb.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/cell_entities.pb.dart';
|
|
||||||
|
|
||||||
class CellService {
|
|
||||||
CellService();
|
|
||||||
|
|
||||||
Future<Either<void, FlowyError>> updateCell({
|
|
||||||
required String gridId,
|
|
||||||
required String fieldId,
|
|
||||||
required String rowId,
|
|
||||||
required String data,
|
|
||||||
}) {
|
|
||||||
final payload = CellChangeset.create()
|
|
||||||
..gridId = gridId
|
|
||||||
..fieldId = fieldId
|
|
||||||
..rowId = rowId
|
|
||||||
..data = data;
|
|
||||||
return GridEventUpdateCell(payload).send();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<Either<Cell, FlowyError>> getCell({
|
|
||||||
required String gridId,
|
|
||||||
required String fieldId,
|
|
||||||
required String rowId,
|
|
||||||
}) {
|
|
||||||
final payload = CellIdentifierPayload.create()
|
|
||||||
..gridId = gridId
|
|
||||||
..fieldId = fieldId
|
|
||||||
..rowId = rowId;
|
|
||||||
return GridEventGetCell(payload).send();
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,12 +16,12 @@ export 'field/type_option/number_bloc.dart';
|
|||||||
export 'field/type_option/single_select_bloc.dart';
|
export 'field/type_option/single_select_bloc.dart';
|
||||||
|
|
||||||
// Cell
|
// Cell
|
||||||
export 'cell_bloc/text_cell_bloc.dart';
|
export 'cell/text_cell_bloc.dart';
|
||||||
export 'cell_bloc/number_cell_bloc.dart';
|
export 'cell/number_cell_bloc.dart';
|
||||||
export 'cell_bloc/selection_cell_bloc.dart';
|
export 'cell/selection_cell_bloc.dart';
|
||||||
export 'cell_bloc/date_cell_bloc.dart';
|
export 'cell/date_cell_bloc.dart';
|
||||||
export 'cell_bloc/checkbox_cell_bloc.dart';
|
export 'cell/checkbox_cell_bloc.dart';
|
||||||
export 'cell_bloc/cell_service.dart';
|
export 'cell/cell_service.dart';
|
||||||
|
|
||||||
// Setting
|
// Setting
|
||||||
export 'setting/setting_bloc.dart';
|
export 'setting/setting_bloc.dart';
|
||||||
|
@ -12,7 +12,7 @@ import 'package:dartz/dartz.dart';
|
|||||||
|
|
||||||
part 'row_bloc.freezed.dart';
|
part 'row_bloc.freezed.dart';
|
||||||
|
|
||||||
typedef CellDataMap = LinkedHashMap<String, CellData>;
|
typedef CellDataMap = LinkedHashMap<String, GridCellIdentifier>;
|
||||||
|
|
||||||
class RowBloc extends Bloc<RowEvent, RowState> {
|
class RowBloc extends Bloc<RowEvent, RowState> {
|
||||||
final RowService _rowService;
|
final RowService _rowService;
|
||||||
@ -111,7 +111,7 @@ class RowBloc extends Bloc<RowEvent, RowState> {
|
|||||||
var map = CellDataMap.new();
|
var map = CellDataMap.new();
|
||||||
for (final field in fields) {
|
for (final field in fields) {
|
||||||
if (field.visibility) {
|
if (field.visibility) {
|
||||||
map[field.id] = CellData(
|
map[field.id] = GridCellIdentifier(
|
||||||
rowId: row.id,
|
rowId: row.id,
|
||||||
gridId: _rowService.gridId,
|
gridId: _rowService.gridId,
|
||||||
cell: row.cellByFieldId[field.id],
|
cell: row.cellByFieldId[field.id],
|
||||||
|
@ -84,10 +84,10 @@ class RowsNotifier extends ChangeNotifier {
|
|||||||
class GridRowCache {
|
class GridRowCache {
|
||||||
final String gridId;
|
final String gridId;
|
||||||
late GridRowListener _rowsListener;
|
late GridRowListener _rowsListener;
|
||||||
|
final RowsNotifier _rowNotifier = RowsNotifier();
|
||||||
final HashMap<String, Row> _rowDataMap = HashMap();
|
final HashMap<String, Row> _rowDataMap = HashMap();
|
||||||
|
|
||||||
UnmodifiableListView<Field> _fields = UnmodifiableListView([]);
|
UnmodifiableListView<Field> _fields = UnmodifiableListView([]);
|
||||||
final RowsNotifier _rowNotifier = RowsNotifier();
|
|
||||||
|
|
||||||
GridRowCache({required this.gridId}) {
|
GridRowCache({required this.gridId}) {
|
||||||
_rowsListener = GridRowListener(gridId: gridId);
|
_rowsListener = GridRowListener(gridId: gridId);
|
||||||
@ -216,8 +216,8 @@ class GridRowCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@freezed
|
@freezed
|
||||||
class CellData with _$CellData {
|
class GridCellIdentifier with _$GridCellIdentifier {
|
||||||
const factory CellData({
|
const factory GridCellIdentifier({
|
||||||
required String gridId,
|
required String gridId,
|
||||||
required String rowId,
|
required String rowId,
|
||||||
required Field field,
|
required Field field,
|
||||||
|
@ -7,7 +7,7 @@ import 'number_cell.dart';
|
|||||||
import 'selection_cell/selection_cell.dart';
|
import 'selection_cell/selection_cell.dart';
|
||||||
import 'text_cell.dart';
|
import 'text_cell.dart';
|
||||||
|
|
||||||
Widget buildGridCell(CellData cellData) {
|
Widget buildGridCell(GridCellIdentifier cellData) {
|
||||||
final key = ValueKey(cellData.field.id + cellData.rowId);
|
final key = ValueKey(cellData.field.id + cellData.rowId);
|
||||||
switch (cellData.field.fieldType) {
|
switch (cellData.field.fieldType) {
|
||||||
case FieldType.Checkbox:
|
case FieldType.Checkbox:
|
||||||
|
@ -6,7 +6,7 @@ import 'package:flutter/widgets.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
class CheckboxCell extends StatefulWidget {
|
class CheckboxCell extends StatefulWidget {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const CheckboxCell({
|
const CheckboxCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
|
@ -9,7 +9,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'package:table_calendar/table_calendar.dart';
|
import 'package:table_calendar/table_calendar.dart';
|
||||||
|
|
||||||
class DateCell extends GridCell {
|
class DateCell extends GridCell {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const DateCell({
|
const DateCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
|
@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
class NumberCell extends GridCell {
|
class NumberCell extends GridCell {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const NumberCell({
|
const NumberCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
|
@ -8,7 +8,7 @@ import 'extension.dart';
|
|||||||
import 'selection_editor.dart';
|
import 'selection_editor.dart';
|
||||||
|
|
||||||
class SingleSelectCell extends GridCell {
|
class SingleSelectCell extends GridCell {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const SingleSelectCell({
|
const SingleSelectCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
@ -64,7 +64,7 @@ class _SingleSelectCellState extends State<SingleSelectCell> {
|
|||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
class MultiSelectCell extends GridCell {
|
class MultiSelectCell extends GridCell {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const MultiSelectCell({
|
const MultiSelectCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
import 'package:app_flowy/workspace/application/grid/cell_bloc/selection_editor_bloc.dart';
|
import 'package:app_flowy/workspace/application/grid/cell/selection_editor_bloc.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:app_flowy/workspace/presentation/plugins/grid/src/layout/sizes.dart';
|
import 'package:app_flowy/workspace/presentation/plugins/grid/src/layout/sizes.dart';
|
||||||
import 'package:app_flowy/workspace/presentation/plugins/grid/src/widgets/header/type_option/edit_option_pannel.dart';
|
import 'package:app_flowy/workspace/presentation/plugins/grid/src/widgets/header/type_option/edit_option_pannel.dart';
|
||||||
@ -25,7 +25,7 @@ import 'text_field.dart';
|
|||||||
const double _editorPannelWidth = 300;
|
const double _editorPannelWidth = 300;
|
||||||
|
|
||||||
class SelectOptionCellEditor extends StatelessWidget with FlowyOverlayDelegate {
|
class SelectOptionCellEditor extends StatelessWidget with FlowyOverlayDelegate {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
final List<SelectOption> options;
|
final List<SelectOption> options;
|
||||||
final List<SelectOption> selectedOptions;
|
final List<SelectOption> selectedOptions;
|
||||||
final VoidCallback onDismissed;
|
final VoidCallback onDismissed;
|
||||||
@ -66,7 +66,7 @@ class SelectOptionCellEditor extends StatelessWidget with FlowyOverlayDelegate {
|
|||||||
|
|
||||||
static void show(
|
static void show(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
CellData cellData,
|
GridCellIdentifier cellData,
|
||||||
List<SelectOption> options,
|
List<SelectOption> options,
|
||||||
List<SelectOption> selectedOptions,
|
List<SelectOption> selectedOptions,
|
||||||
VoidCallback onDismissed,
|
VoidCallback onDismissed,
|
||||||
|
@ -6,7 +6,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'cell_container.dart';
|
import 'cell_container.dart';
|
||||||
|
|
||||||
class GridTextCell extends GridCell {
|
class GridTextCell extends GridCell {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
const GridTextCell({
|
const GridTextCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
Key? key,
|
Key? key,
|
||||||
|
@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
class NumberCell extends StatefulWidget {
|
class NumberCell extends StatefulWidget {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const NumberCell({
|
const NumberCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
|
@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
class NumberCell extends StatefulWidget {
|
class NumberCell extends StatefulWidget {
|
||||||
final CellData cellData;
|
final GridCellIdentifier cellData;
|
||||||
|
|
||||||
const NumberCell({
|
const NumberCell({
|
||||||
required this.cellData,
|
required this.cellData,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user