Skip to content

Commit 13cb7ee

Browse files
committed
chore: add get type option data handler
1 parent cb0a868 commit 13cb7ee

File tree

19 files changed

+399
-70
lines changed

19 files changed

+399
-70
lines changed

frontend/app_flowy/lib/workspace/application/grid/cell/cell_service.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ class GridCellContextBuilder {
5959
}
6060

6161
// ignore: must_be_immutable
62-
class GridCellContext<T> extends Equatable {
62+
class GridCellContext<C> extends Equatable {
6363
final GridCell gridCell;
6464
final GridCellCache cellCache;
6565
final GridCellCacheKey _cacheKey;
66-
final GridCellDataLoader<T> cellDataLoader;
66+
final GridCellDataLoader<C> cellDataLoader;
6767
final CellService _cellService = CellService();
6868

6969
late final CellListener _cellListener;
70-
late final ValueNotifier<T?> _cellDataNotifier;
70+
late final ValueNotifier<C?> _cellDataNotifier;
7171
bool isListening = false;
7272
VoidCallback? _onFieldChangedFn;
7373
Timer? _delayOperation;
@@ -78,7 +78,7 @@ class GridCellContext<T> extends Equatable {
7878
required this.cellDataLoader,
7979
}) : _cacheKey = GridCellCacheKey(objectId: gridCell.rowId, fieldId: gridCell.field.id);
8080

81-
GridCellContext<T> clone() {
81+
GridCellContext<C> clone() {
8282
return GridCellContext(
8383
gridCell: gridCell,
8484
cellDataLoader: cellDataLoader,
@@ -100,7 +100,7 @@ class GridCellContext<T> extends Equatable {
100100

101101
GridCellCacheKey get cacheKey => _cacheKey;
102102

103-
VoidCallback? startListening({required void Function(T) onCellChanged}) {
103+
VoidCallback? startListening({required void Function(C) onCellChanged}) {
104104
if (isListening) {
105105
Log.error("Already started. It seems like you should call clone first");
106106
return null;
@@ -125,7 +125,7 @@ class GridCellContext<T> extends Equatable {
125125

126126
onCellChangedFn() {
127127
final value = _cellDataNotifier.value;
128-
if (value is T) {
128+
if (value is C) {
129129
onCellChanged(value);
130130
}
131131

@@ -142,7 +142,7 @@ class GridCellContext<T> extends Equatable {
142142
_cellDataNotifier.removeListener(fn);
143143
}
144144

145-
T? getCellData() {
145+
C? getCellData() {
146146
final data = cellCache.get(cacheKey);
147147
if (data == null) {
148148
_loadData();

frontend/app_flowy/lib/workspace/application/grid/cell/selection_editor_bloc.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import 'dart:async';
2-
32
import 'package:dartz/dartz.dart';
43
import 'package:flowy_sdk/log.dart';
54
import 'package:flowy_sdk/protobuf/flowy-grid/selection_type_option.pb.dart';
65
import 'package:flutter_bloc/flutter_bloc.dart';
76
import 'package:freezed_annotation/freezed_annotation.dart';
8-
97
import 'package:app_flowy/workspace/application/grid/cell/cell_service.dart';
10-
118
import 'select_option_service.dart';
129

1310
part 'selection_editor_bloc.freezed.dart';

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/header/field_editor_pannel.dart

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,12 @@ class _FieldEditorPannelState extends State<FieldEditorPannel> {
119119
context.read<FieldEditorPannelBloc>().add(FieldEditorPannelEvent.didUpdateTypeOptionData(data));
120120
});
121121

122-
final typeOptionContext = TypeOptionContext(
123-
gridId: state.gridId,
124-
field: state.field,
125-
data: state.typeOptionData,
126-
);
127-
128122
final builder = _makeTypeOptionBuild(
129-
typeOptionContext: typeOptionContext,
123+
typeOptionContext: TypeOptionContext(
124+
gridId: state.gridId,
125+
field: state.field,
126+
data: state.typeOptionData,
127+
),
130128
overlayDelegate: overlayDelegate,
131129
dataDelegate: dataDelegate,
132130
);

frontend/app_flowy/packages/flowy_sdk/lib/dispatch/dart_event/flowy-grid/dart_event.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,23 @@ class GridEventMoveItem {
171171
}
172172
}
173173

174+
class GridEventGetFieldTypeOption {
175+
GetEditFieldContextPayload request;
176+
GridEventGetFieldTypeOption(this.request);
177+
178+
Future<Either<FieldTypeOptionData, FlowyError>> send() {
179+
final request = FFIRequest.create()
180+
..event = GridEvent.GetFieldTypeOption.toString()
181+
..payload = requestToBytes(this.request);
182+
183+
return Dispatch.asyncRequest(request)
184+
.then((bytesResult) => bytesResult.fold(
185+
(okBytes) => left(FieldTypeOptionData.fromBuffer(okBytes)),
186+
(errBytes) => right(FlowyError.fromBuffer(errBytes)),
187+
));
188+
}
189+
}
190+
174191
class GridEventNewSelectOption {
175192
CreateSelectOptionPayload request;
176193
GridEventNewSelectOption(this.request);

frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-grid-data-model/grid.pb.dart

Lines changed: 61 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-grid-data-model/grid.pbjson.dart

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-grid/event_map.pbenum.dart

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-grid/event_map.pbjson.dart

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/rust-lib/flowy-grid/src/event_handler.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,22 @@ pub(crate) async fn get_field_context_handler(
128128
data_result(edit_context)
129129
}
130130

131+
#[tracing::instrument(level = "debug", skip(data, manager), err)]
132+
pub(crate) async fn get_field_type_option_data_handler(
133+
data: Data<GetEditFieldContextPayload>,
134+
manager: AppData<Arc<GridManager>>,
135+
) -> DataResult<FieldTypeOptionData, FlowyError> {
136+
let params = data.into_inner();
137+
let editor = manager.get_grid_editor(&params.grid_id)?;
138+
let field_meta = get_or_create_field_meta(params.field_id, &params.field_type, editor).await?;
139+
let type_option_data = get_type_option_data(&field_meta, &field_meta.field_type).await?;
140+
141+
data_result(FieldTypeOptionData {
142+
field_id: field_meta.id.clone(),
143+
type_option_data,
144+
})
145+
}
146+
131147
#[tracing::instrument(level = "debug", skip(data, manager), err)]
132148
pub(crate) async fn move_item_handler(
133149
data: Data<MoveItemPayload>,
@@ -147,12 +163,7 @@ async fn make_field_edit_context(
147163
field_meta: Option<FieldMeta>,
148164
) -> FlowyResult<EditFieldContext> {
149165
let field_meta = field_meta.unwrap_or(get_or_create_field_meta(field_id, &field_type, editor).await?);
150-
let s = field_meta
151-
.get_type_option_str(None)
152-
.unwrap_or_else(|| default_type_option_builder_from_type(&field_type).entry().json_str());
153-
154-
let builder = type_option_builder_from_json_str(&s, &field_meta.field_type);
155-
let type_option_data = builder.entry().protobuf_bytes().to_vec();
166+
let type_option_data = get_type_option_data(&field_meta, &field_type).await?;
156167
let field: Field = field_meta.into();
157168
Ok(EditFieldContext {
158169
grid_id: grid_id.to_string(),
@@ -161,6 +172,16 @@ async fn make_field_edit_context(
161172
})
162173
}
163174

175+
async fn get_type_option_data(field_meta: &FieldMeta, field_type: &FieldType) -> FlowyResult<Vec<u8>> {
176+
let s = field_meta
177+
.get_type_option_str(&field_type)
178+
.unwrap_or_else(|| default_type_option_builder_from_type(&field_type).entry().json_str());
179+
let builder = type_option_builder_from_json_str(&s, &field_meta.field_type);
180+
let type_option_data = builder.entry().protobuf_bytes().to_vec();
181+
182+
Ok(type_option_data)
183+
}
184+
164185
async fn get_or_create_field_meta(
165186
field_id: Option<String>,
166187
field_type: &FieldType,
@@ -221,7 +242,7 @@ pub(crate) async fn create_row_handler(
221242
Ok(())
222243
}
223244

224-
#[tracing::instrument(level = "debug", skip_all, err)]
245+
// #[tracing::instrument(level = "debug", skip_all, err)]
225246
pub(crate) async fn get_cell_handler(
226247
data: Data<CellIdentifierPayload>,
227248
manager: AppData<Arc<GridManager>>,

frontend/rust-lib/flowy-grid/src/event_map.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub fn create(grid_manager: Arc<GridManager>) -> Module {
1919
.event(GridEvent::DuplicateField, duplicate_field_handler)
2020
.event(GridEvent::GetEditFieldContext, get_field_context_handler)
2121
.event(GridEvent::MoveItem, move_item_handler)
22+
.event(GridEvent::GetFieldTypeOption, get_field_type_option_data_handler)
2223
// Row
2324
.event(GridEvent::CreateRow, create_row_handler)
2425
.event(GridEvent::GetRow, get_row_handler)
@@ -69,6 +70,9 @@ pub enum GridEvent {
6970
#[event(input = "MoveItemPayload")]
7071
MoveItem = 17,
7172

73+
#[event(input = "GetEditFieldContextPayload", output = "FieldTypeOptionData")]
74+
GetFieldTypeOption = 18,
75+
7276
#[event(input = "CreateSelectOptionPayload", output = "SelectOption")]
7377
NewSelectOption = 30,
7478

0 commit comments

Comments
 (0)