Skip to content

Commit 23900b4

Browse files
committed
chore: fix bugs
1 parent f3b87d4 commit 23900b4

File tree

20 files changed

+322
-260
lines changed

20 files changed

+322
-260
lines changed

frontend/app_flowy/lib/workspace/application/grid/field/field_editor_bloc.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class FieldEditorBloc extends Bloc<FieldEditorEvent, FieldEditorState> {
99
FieldEditorBloc({
1010
required String gridId,
1111
required String fieldName,
12-
required FieldContextLoader fieldContextLoader,
12+
required IFieldContextLoader fieldContextLoader,
1313
}) : super(FieldEditorState.initial(gridId, fieldName, fieldContextLoader)) {
1414
on<FieldEditorEvent>(
1515
(event, emit) async {
@@ -18,7 +18,7 @@ class FieldEditorBloc extends Bloc<FieldEditorEvent, FieldEditorState> {
1818
final fieldContext = GridFieldContext(gridId: gridId, loader: fieldContextLoader);
1919
await fieldContext.loadData().then((result) {
2020
result.fold(
21-
(l) => emit(state.copyWith(fieldContext: Some(fieldContext))),
21+
(l) => emit(state.copyWith(fieldContext: Some(fieldContext), name: fieldContext.field.name)),
2222
(r) => null,
2323
);
2424
});
@@ -53,7 +53,7 @@ class FieldEditorState with _$FieldEditorState {
5353
required Option<GridFieldContext> fieldContext,
5454
}) = _FieldEditorState;
5555

56-
factory FieldEditorState.initial(String gridId, String fieldName, FieldContextLoader loader) => FieldEditorState(
56+
factory FieldEditorState.initial(String gridId, String fieldName, IFieldContextLoader loader) => FieldEditorState(
5757
gridId: gridId,
5858
fieldContext: none(),
5959
errorText: '',

frontend/app_flowy/lib/workspace/application/grid/field/field_service.dart

Lines changed: 26 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,6 @@ class FieldService {
1515

1616
FieldService({required this.gridId, required this.fieldId});
1717

18-
Future<Either<FieldTypeOptionData, FlowyError>> switchToField(FieldType fieldType) {
19-
final payload = EditFieldPayload.create()
20-
..gridId = gridId
21-
..fieldId = fieldId
22-
..fieldType = fieldType;
23-
24-
return GridEventSwitchToField(payload).send();
25-
}
26-
2718
Future<Either<Unit, FlowyError>> moveField(int fromIndex, int toIndex) {
2819
final payload = MoveItemPayload.create()
2920
..gridId = gridId
@@ -146,13 +137,22 @@ class GridFieldCellContext with _$GridFieldCellContext {
146137
}) = _GridFieldCellContext;
147138
}
148139

149-
abstract class FieldContextLoader {
140+
abstract class IFieldContextLoader {
141+
String get gridId;
150142
Future<Either<FieldTypeOptionData, FlowyError>> load();
151143

152-
Future<Either<FieldTypeOptionData, FlowyError>> switchToField(String fieldId, FieldType fieldType);
144+
Future<Either<FieldTypeOptionData, FlowyError>> switchToField(String fieldId, FieldType fieldType) {
145+
final payload = EditFieldPayload.create()
146+
..gridId = gridId
147+
..fieldId = fieldId
148+
..fieldType = fieldType;
149+
150+
return GridEventSwitchToField(payload).send();
151+
}
153152
}
154153

155-
class NewFieldContextLoader extends FieldContextLoader {
154+
class NewFieldContextLoader extends IFieldContextLoader {
155+
@override
156156
final String gridId;
157157
NewFieldContextLoader({
158158
required this.gridId,
@@ -164,24 +164,16 @@ class NewFieldContextLoader extends FieldContextLoader {
164164
..gridId = gridId
165165
..fieldType = FieldType.RichText;
166166

167-
return GridEventGetFieldTypeOption(payload).send();
168-
}
169-
170-
@override
171-
Future<Either<FieldTypeOptionData, FlowyError>> switchToField(String fieldId, FieldType fieldType) {
172-
final payload = EditFieldPayload.create()
173-
..gridId = gridId
174-
..fieldType = fieldType;
175-
176-
return GridEventGetFieldTypeOption(payload).send();
167+
return GridEventCreateFieldTypeOption(payload).send();
177168
}
178169
}
179170

180-
class DefaultFieldContextLoader extends FieldContextLoader {
171+
class FieldContextLoader extends IFieldContextLoader {
172+
@override
181173
final String gridId;
182174
final Field field;
183175

184-
DefaultFieldContextLoader({
176+
FieldContextLoader({
185177
required this.gridId,
186178
required this.field,
187179
});
@@ -195,24 +187,18 @@ class DefaultFieldContextLoader extends FieldContextLoader {
195187

196188
return GridEventGetFieldTypeOption(payload).send();
197189
}
198-
199-
@override
200-
Future<Either<FieldTypeOptionData, FlowyError>> switchToField(String fieldId, FieldType fieldType) async {
201-
final fieldService = FieldService(gridId: gridId, fieldId: fieldId);
202-
return fieldService.switchToField(fieldType);
203-
}
204190
}
205191

206192
class GridFieldContext {
207193
final String gridId;
208-
final FieldContextLoader _loader;
194+
final IFieldContextLoader _loader;
209195

210196
late FieldTypeOptionData _data;
211197
ValueNotifier<Field>? _fieldNotifier;
212198

213199
GridFieldContext({
214200
required this.gridId,
215-
required FieldContextLoader loader,
201+
required IFieldContextLoader loader,
216202
}) : _loader = loader;
217203

218204
Future<Either<Unit, FlowyError>> loadData() async {
@@ -246,27 +232,27 @@ class GridFieldContext {
246232
List<int> get typeOptionData => _data.typeOptionData;
247233

248234
set fieldName(String name) {
249-
_updateData(name: name);
235+
_updateData(newName: name);
250236
}
251237

252238
set typeOptionData(List<int> typeOptionData) {
253-
_updateData(typeOptionData: typeOptionData);
239+
_updateData(newTypeOptionData: typeOptionData);
254240
}
255241

256-
void _updateData({String? name, Field? newField, List<int>? typeOptionData}) {
242+
void _updateData({String? newName, Field? newField, List<int>? newTypeOptionData}) {
257243
_data = _data.rebuild((rebuildData) {
258-
if (name != null) {
244+
if (newName != null) {
259245
rebuildData.field_2 = rebuildData.field_2.rebuild((rebuildField) {
260-
rebuildField.name = name;
246+
rebuildField.name = newName;
261247
});
262248
}
263249

264250
if (newField != null) {
265251
rebuildData.field_2 = newField;
266252
}
267253

268-
if (typeOptionData != null) {
269-
rebuildData.typeOptionData = typeOptionData;
254+
if (newTypeOptionData != null) {
255+
rebuildData.typeOptionData = newTypeOptionData;
270256
}
271257
});
272258

@@ -287,7 +273,7 @@ class GridFieldContext {
287273
(fieldTypeOptionData) {
288274
_updateData(
289275
newField: fieldTypeOptionData.field_2,
290-
typeOptionData: fieldTypeOptionData.typeOptionData,
276+
newTypeOptionData: fieldTypeOptionData.typeOptionData,
291277
);
292278
},
293279
(err) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class GridFieldCell extends StatelessWidget {
6464
FieldEditor(
6565
gridId: state.gridId,
6666
fieldName: state.field.name,
67-
contextLoader: DefaultFieldContextLoader(
67+
contextLoader: FieldContextLoader(
6868
gridId: state.gridId,
6969
field: state.field,
7070
),

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class FieldEditor extends StatelessWidget with FlowyOverlayDelegate {
1414
final String gridId;
1515
final String fieldName;
1616

17-
final FieldContextLoader contextLoader;
17+
final IFieldContextLoader contextLoader;
1818
const FieldEditor({
1919
required this.gridId,
2020
required this.fieldName,
@@ -97,7 +97,6 @@ class _FieldNameTextField extends StatelessWidget {
9797
@override
9898
Widget build(BuildContext context) {
9999
return BlocBuilder<FieldEditorBloc, FieldEditorState>(
100-
buildWhen: (p, c) => p.name != c.name,
101100
builder: (context, state) {
102101
return FieldNameTextField(
103102
name: state.name,

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

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'package:flowy_infra_ui/widget/rounded_input_field.dart';
33
import 'package:flutter/material.dart';
44
import 'package:flutter_bloc/flutter_bloc.dart';
55

6-
class FieldNameTextField extends StatelessWidget {
6+
class FieldNameTextField extends StatefulWidget {
77
final void Function(String) onNameChanged;
88
final String name;
99
final String errorText;
@@ -14,19 +14,41 @@ class FieldNameTextField extends StatelessWidget {
1414
Key? key,
1515
}) : super(key: key);
1616

17+
@override
18+
State<FieldNameTextField> createState() => _FieldNameTextFieldState();
19+
}
20+
21+
class _FieldNameTextFieldState extends State<FieldNameTextField> {
22+
late String name;
23+
TextEditingController controller = TextEditingController();
24+
25+
@override
26+
void initState() {
27+
controller.text = widget.name;
28+
super.initState();
29+
}
30+
1731
@override
1832
Widget build(BuildContext context) {
1933
final theme = context.watch<AppTheme>();
2034
return RoundedInputField(
2135
height: 36,
2236
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w500),
23-
initialValue: name,
37+
controller: controller,
2438
normalBorderColor: theme.shader4,
2539
errorBorderColor: theme.red,
2640
focusBorderColor: theme.main1,
2741
cursorColor: theme.main1,
28-
errorText: errorText,
29-
onChanged: onNameChanged,
42+
errorText: widget.errorText,
43+
onChanged: widget.onNameChanged,
3044
);
3145
}
46+
47+
@override
48+
void didUpdateWidget(covariant FieldNameTextField oldWidget) {
49+
controller.text = widget.name;
50+
controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
51+
52+
super.didUpdateWidget(oldWidget);
53+
}
3254
}

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/row/row_detail.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ class _RowDetailCell extends StatelessWidget {
179179
FieldEditor(
180180
gridId: gridCell.gridId,
181181
fieldName: gridCell.field.name,
182-
contextLoader: DefaultFieldContextLoader(
182+
contextLoader: FieldContextLoader(
183183
gridId: gridCell.gridId,
184184
field: gridCell.field,
185185
),

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/toolbar/grid_property.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class _GridPropertyCell extends StatelessWidget {
116116
FieldEditor(
117117
gridId: gridId,
118118
fieldName: field.name,
119-
contextLoader: DefaultFieldContextLoader(gridId: gridId, field: field),
119+
contextLoader: FieldContextLoader(gridId: gridId, field: field),
120120
).show(context, anchorDirection: AnchorDirection.bottomRight);
121121
},
122122
);

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
@@ -188,6 +188,23 @@ class GridEventGetFieldTypeOption {
188188
}
189189
}
190190

191+
class GridEventCreateFieldTypeOption {
192+
EditFieldPayload request;
193+
GridEventCreateFieldTypeOption(this.request);
194+
195+
Future<Either<FieldTypeOptionData, FlowyError>> send() {
196+
final request = FFIRequest.create()
197+
..event = GridEvent.CreateFieldTypeOption.toString()
198+
..payload = requestToBytes(this.request);
199+
200+
return Dispatch.asyncRequest(request)
201+
.then((bytesResult) => bytesResult.fold(
202+
(okBytes) => left(FieldTypeOptionData.fromBuffer(okBytes)),
203+
(errBytes) => right(FlowyError.fromBuffer(errBytes)),
204+
));
205+
}
206+
}
207+
191208
class GridEventNewSelectOption {
192209
CreateSelectOptionPayload request;
193210
GridEventNewSelectOption(this.request);

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

Lines changed: 14 additions & 13 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: 3 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)