diff --git a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/edit_select_option_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/edit_select_option_bloc.dart index 3e4ba6e2c9..59abf7d136 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/edit_select_option_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/edit_select_option_bloc.dart @@ -1,8 +1,8 @@ import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart'; -import 'package:dartz/dartz.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:protobuf/protobuf.dart'; + part 'edit_select_option_bloc.freezed.dart'; class EditSelectOptionBloc @@ -11,15 +11,15 @@ class EditSelectOptionBloc : super(EditSelectOptionState.initial(option)) { on( (event, emit) async { - event.map( - updateName: (_UpdateName value) { - emit(state.copyWith(option: _updateName(value.name))); + event.when( + updateName: (name) { + emit(state.copyWith(option: _updateName(name))); }, - updateColor: (_UpdateColor value) { - emit(state.copyWith(option: _updateColor(value.color))); + updateColor: (color) { + emit(state.copyWith(option: _updateColor(color))); }, - delete: (_Delete value) { - emit(state.copyWith(deleted: const Some(true))); + delete: () { + emit(state.copyWith(deleted: true)); }, ); }, @@ -53,12 +53,12 @@ class EditSelectOptionEvent with _$EditSelectOptionEvent { class EditSelectOptionState with _$EditSelectOptionState { const factory EditSelectOptionState({ required SelectOptionPB option, - required Option deleted, + required bool deleted, }) = _EditSelectOptionState; factory EditSelectOptionState.initial(SelectOptionPB option) => EditSelectOptionState( option: option, - deleted: none(), + deleted: false, ); } diff --git a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_option_type_option_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_option_type_option_bloc.dart index c8b7dce7d4..d62cd8b8c5 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_option_type_option_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_option_type_option_bloc.dart @@ -1,28 +1,12 @@ -import 'dart:async'; - import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; + +import 'select_type_option_actions.dart'; + part 'select_option_type_option_bloc.freezed.dart'; -abstract class ISelectOptionAction { - Future> insertOption( - List options, - String newOptionName, - ); - - List deleteOption( - List options, - SelectOptionPB deletedOption, - ); - - List updateOption( - List options, - SelectOptionPB updatedOption, - ); -} - class SelectOptionTypeOptionBloc extends Bloc { SelectOptionTypeOptionBloc({ diff --git a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/multi_select_type_option.dart b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_type_option_actions.dart similarity index 68% rename from frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/multi_select_type_option.dart rename to frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_type_option_actions.dart index 4d3cbbe837..19d23963af 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/multi_select_type_option.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/select_type_option_actions.dart @@ -4,11 +4,10 @@ import 'package:appflowy/plugins/database/grid/presentation/widgets/header/type_ import 'package:appflowy_backend/log.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart'; -import 'select_option_type_option_bloc.dart'; import 'type_option_service.dart'; -class MultiSelectAction implements ISelectOptionAction { - MultiSelectAction({ +abstract class ISelectOptionAction { + ISelectOptionAction({ required this.onTypeOptionUpdated, required String viewId, required String fieldId, @@ -17,7 +16,11 @@ class MultiSelectAction implements ISelectOptionAction { final TypeOptionBackendService service; final TypeOptionDataCallback onTypeOptionUpdated; - @override + void updateTypeOption(List options) { + final newTypeOption = MultiSelectTypeOptionPB()..options.addAll(options); + onTypeOptionUpdated(newTypeOption.writeToBuffer()); + } + Future> insertOption( List options, String optionName, @@ -32,7 +35,7 @@ class MultiSelectAction implements ISelectOptionAction { newOptions.insert(0, option); } - _updateTypeOption(newOptions); + updateTypeOption(newOptions); return newOptions; }, (err) { @@ -43,7 +46,6 @@ class MultiSelectAction implements ISelectOptionAction { }); } - @override List deleteOption( List options, SelectOptionPB deletedOption, @@ -55,11 +57,10 @@ class MultiSelectAction implements ISelectOptionAction { newOptions.removeAt(index); } - _updateTypeOption(newOptions); + updateTypeOption(newOptions); return newOptions; } - @override List updateOption( List options, SelectOptionPB option, @@ -70,12 +71,35 @@ class MultiSelectAction implements ISelectOptionAction { newOptions[index] = option; } - _updateTypeOption(newOptions); + updateTypeOption(newOptions); return newOptions; } +} - void _updateTypeOption(List options) { +class MultiSelectAction extends ISelectOptionAction { + MultiSelectAction({ + required super.viewId, + required super.fieldId, + required super.onTypeOptionUpdated, + }); + + @override + void updateTypeOption(List options) { final newTypeOption = MultiSelectTypeOptionPB()..options.addAll(options); onTypeOptionUpdated(newTypeOption.writeToBuffer()); } } + +class SingleSelectAction extends ISelectOptionAction { + SingleSelectAction({ + required super.viewId, + required super.fieldId, + required super.onTypeOptionUpdated, + }); + + @override + void updateTypeOption(List options) { + final newTypeOption = SingleSelectTypeOptionPB()..options.addAll(options); + onTypeOptionUpdated(newTypeOption.writeToBuffer()); + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/single_select_type_option.dart b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/single_select_type_option.dart deleted file mode 100644 index 313ced2d1c..0000000000 --- a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/single_select_type_option.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'dart:async'; - -import 'package:appflowy/plugins/database/grid/presentation/widgets/header/type_option/builder.dart'; -import 'package:appflowy_backend/log.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart'; - -import 'select_option_type_option_bloc.dart'; -import 'type_option_service.dart'; - -class SingleSelectAction implements ISelectOptionAction { - SingleSelectAction({ - required this.onTypeOptionUpdated, - required String viewId, - required String fieldId, - }) : service = TypeOptionBackendService(viewId: viewId, fieldId: fieldId); - - final TypeOptionBackendService service; - final TypeOptionDataCallback onTypeOptionUpdated; - - @override - Future> insertOption( - List options, - String optionName, - ) { - final newOptions = List.from(options); - return service.newOption(name: optionName).then((result) { - return result.fold( - (option) { - final exists = - newOptions.any((element) => element.name == option.name); - if (!exists) { - newOptions.insert(0, option); - } - - _updateTypeOption(newOptions); - return newOptions; - }, - (err) { - Log.error(err); - return newOptions; - }, - ); - }); - } - - @override - List deleteOption( - List options, - SelectOptionPB deletedOption, - ) { - final newOptions = List.from(options); - final index = - newOptions.indexWhere((option) => option.id == deletedOption.id); - if (index != -1) { - newOptions.removeAt(index); - } - - final newTypeOption = MultiSelectTypeOptionPB()..options.addAll(newOptions); - onTypeOptionUpdated(newTypeOption.writeToBuffer()); - return newOptions; - } - - @override - List updateOption( - List options, - SelectOptionPB updatedOption, - ) { - final newOptions = List.from(options); - final index = - newOptions.indexWhere((option) => option.id == updatedOption.id); - if (index != -1) { - newOptions[index] = updatedOption; - } - - _updateTypeOption(newOptions); - return newOptions; - } - - void _updateTypeOption(List options) { - final newTypeOption = SingleSelectTypeOptionPB()..options.addAll(options); - onTypeOptionUpdated(newTypeOption.writeToBuffer()); - } -} diff --git a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/type_option_data_parser.dart b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/type_option_data_parser.dart index 5083850277..8e91d9e15c 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/type_option_data_parser.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/application/field/type_option/type_option_data_parser.dart @@ -1,10 +1,4 @@ -import 'package:appflowy_backend/protobuf/flowy-database2/checkbox_entities.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/date_entities.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/number_entities.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/text_entities.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/timestamp_entities.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-database2/url_entities.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; abstract class TypeOptionParser { T fromBuffer(List buffer); diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/multi_select.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/multi_select.dart index 129dc65351..1e1de37ece 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/multi_select.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/multi_select.dart @@ -1,4 +1,4 @@ -import 'package:appflowy/plugins/database/application/field/type_option/multi_select_type_option.dart'; +import 'package:appflowy/plugins/database/application/field/type_option/select_type_option_actions.dart'; import 'package:appflowy/plugins/database/application/field/type_option/type_option_data_parser.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; import 'package:flutter/material.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option.dart index f7f137de46..90e32c9225 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option.dart @@ -1,5 +1,6 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/plugins/database/application/field/type_option/select_option_type_option_bloc.dart'; +import 'package:appflowy/plugins/database/application/field/type_option/select_type_option_actions.dart'; import 'package:appflowy/plugins/database/grid/presentation/layout/sizes.dart'; import 'package:appflowy/plugins/database/widgets/cell_editor/extension.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option_editor.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option_editor.dart index c7d6930ce3..dad0798cd3 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option_editor.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/select/select_option_editor.dart @@ -43,7 +43,9 @@ class SelectOptionTypeOptionEditor extends StatelessWidget { BlocListener( listenWhen: (p, c) => p.deleted != c.deleted, listener: (context, state) { - state.deleted.fold(() => null, (_) => onDeleted()); + if (state.deleted) { + onDeleted(); + } }, ), BlocListener( diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/single_select.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/single_select.dart index 2e4b1e9d79..a0ea917b21 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/single_select.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/header/type_option/single_select.dart @@ -1,4 +1,4 @@ -import 'package:appflowy/plugins/database/application/field/type_option/single_select_type_option.dart'; +import 'package:appflowy/plugins/database/application/field/type_option/select_type_option_actions.dart'; import 'package:appflowy/plugins/database/application/field/type_option/type_option_data_parser.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; import 'package:flutter/material.dart';