mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
refactor: refactor multi-select typeOption
This commit is contained in:
@ -56,6 +56,9 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
|
|||||||
didReceiveGridUpdate: (GridPB grid) {
|
didReceiveGridUpdate: (GridPB grid) {
|
||||||
emit(state.copyWith(grid: Some(grid)));
|
emit(state.copyWith(grid: Some(grid)));
|
||||||
},
|
},
|
||||||
|
groupByField: (GridFieldPB field) {
|
||||||
|
emit(state.copyWith(groupField: Some(field)));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -97,11 +100,16 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _buildColumns(UnmodifiableListView<GridFieldPB> fields) {
|
void _buildColumns(UnmodifiableListView<GridFieldPB> fields) {
|
||||||
|
GridFieldPB? groupField;
|
||||||
for (final field in fields) {
|
for (final field in fields) {
|
||||||
if (field.fieldType == FieldType.SingleSelect) {
|
if (field.fieldType == FieldType.SingleSelect) {
|
||||||
|
groupField = field;
|
||||||
_buildColumnsFromSingleSelect(field);
|
_buildColumnsFromSingleSelect(field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(groupField != null);
|
||||||
|
add(BoardEvent.groupByField(groupField!));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _buildColumnsFromSingleSelect(GridFieldPB field) {
|
void _buildColumnsFromSingleSelect(GridFieldPB field) {
|
||||||
|
@ -17,7 +17,7 @@ import 'package:app_flowy/plugins/grid/application/field/field_service.dart';
|
|||||||
import 'dart:convert' show utf8;
|
import 'dart:convert' show utf8;
|
||||||
|
|
||||||
import '../../field/field_cache.dart';
|
import '../../field/field_cache.dart';
|
||||||
import '../../field/type_option/type_option_data_controller.dart';
|
import '../../field/type_option/type_option_context.dart';
|
||||||
import 'cell_field_notifier.dart';
|
import 'cell_field_notifier.dart';
|
||||||
part 'cell_service.freezed.dart';
|
part 'cell_service.freezed.dart';
|
||||||
part 'cell_data_loader.dart';
|
part 'cell_data_loader.dart';
|
||||||
|
@ -2,9 +2,11 @@ import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'type_option/type_option_data_controller.dart';
|
import 'type_option/type_option_context.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
|
import 'type_option/type_option_data_controller.dart';
|
||||||
|
|
||||||
part 'field_editor_bloc.freezed.dart';
|
part 'field_editor_bloc.freezed.dart';
|
||||||
|
|
||||||
class FieldEditorBloc extends Bloc<FieldEditorEvent, FieldEditorState> {
|
class FieldEditorBloc extends Bloc<FieldEditorEvent, FieldEditorState> {
|
||||||
|
@ -2,6 +2,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'type_option/type_option_data_controller.dart';
|
import 'type_option/type_option_data_controller.dart';
|
||||||
part 'field_type_option_edit_bloc.freezed.dart';
|
part 'field_type_option_edit_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@ -5,16 +5,9 @@ import 'package:freezed_annotation/freezed_annotation.dart';
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:protobuf/protobuf.dart';
|
import 'package:protobuf/protobuf.dart';
|
||||||
|
|
||||||
import 'type_option_data_controller.dart';
|
import 'type_option_context.dart';
|
||||||
part 'date_bloc.freezed.dart';
|
part 'date_bloc.freezed.dart';
|
||||||
|
|
||||||
class DateTypeOptionDataParser extends TypeOptionDataParser<DateTypeOption> {
|
|
||||||
@override
|
|
||||||
DateTypeOption fromBuffer(List<int> buffer) {
|
|
||||||
return DateTypeOption.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class DateTypeOptionBloc
|
class DateTypeOptionBloc
|
||||||
extends Bloc<DateTypeOptionEvent, DateTypeOptionState> {
|
extends Bloc<DateTypeOptionEvent, DateTypeOptionState> {
|
||||||
DateTypeOptionBloc({required DateTypeOptionContext typeOptionContext})
|
DateTypeOptionBloc({required DateTypeOptionContext typeOptionContext})
|
||||||
|
@ -3,6 +3,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/multi_select_type_option.pb.dart';
|
|||||||
import 'package:flowy_sdk/protobuf/flowy-grid/select_option.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-grid/select_option.pb.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'select_option_type_option_bloc.dart';
|
import 'select_option_type_option_bloc.dart';
|
||||||
|
import 'type_option_context.dart';
|
||||||
import 'type_option_data_controller.dart';
|
import 'type_option_data_controller.dart';
|
||||||
import 'type_option_service.dart';
|
import 'type_option_service.dart';
|
||||||
import 'package:protobuf/protobuf.dart';
|
import 'package:protobuf/protobuf.dart';
|
||||||
@ -72,11 +73,3 @@ class MultiSelectTypeOptionContext
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MultiSelectTypeOptionWidgetDataParser
|
|
||||||
extends TypeOptionDataParser<MultiSelectTypeOption> {
|
|
||||||
@override
|
|
||||||
MultiSelectTypeOption fromBuffer(List<int> buffer) {
|
|
||||||
return MultiSelectTypeOption.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -4,18 +4,10 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:protobuf/protobuf.dart';
|
import 'package:protobuf/protobuf.dart';
|
||||||
import 'type_option_data_controller.dart';
|
import 'type_option_context.dart';
|
||||||
|
|
||||||
part 'number_bloc.freezed.dart';
|
part 'number_bloc.freezed.dart';
|
||||||
|
|
||||||
class NumberTypeOptionWidgetDataParser
|
|
||||||
extends TypeOptionDataParser<NumberTypeOption> {
|
|
||||||
@override
|
|
||||||
NumberTypeOption fromBuffer(List<int> buffer) {
|
|
||||||
return NumberTypeOption.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class NumberTypeOptionBloc
|
class NumberTypeOptionBloc
|
||||||
extends Bloc<NumberTypeOptionEvent, NumberTypeOptionState> {
|
extends Bloc<NumberTypeOptionEvent, NumberTypeOptionState> {
|
||||||
NumberTypeOptionBloc({required NumberTypeOptionContext typeOptionContext})
|
NumberTypeOptionBloc({required NumberTypeOptionContext typeOptionContext})
|
||||||
|
@ -4,20 +4,26 @@ import 'package:flowy_sdk/protobuf/flowy-grid/single_select_type_option.pb.dart'
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:protobuf/protobuf.dart';
|
import 'package:protobuf/protobuf.dart';
|
||||||
import 'select_option_type_option_bloc.dart';
|
import 'select_option_type_option_bloc.dart';
|
||||||
import 'type_option_data_controller.dart';
|
import 'type_option_context.dart';
|
||||||
import 'type_option_service.dart';
|
import 'type_option_service.dart';
|
||||||
|
|
||||||
class SingleSelectTypeOptionContext with ISelectOptionAction {
|
class SingleSelectAction with ISelectOptionAction {
|
||||||
|
final String gridId;
|
||||||
|
final String fieldId;
|
||||||
|
final SingleSelectTypeOptionContext typeOptionContext;
|
||||||
final TypeOptionFFIService service;
|
final TypeOptionFFIService service;
|
||||||
|
|
||||||
SingleSelectTypeOptionContext({
|
SingleSelectAction({
|
||||||
required SingleSelectTypeOptionWidgetDataParser dataBuilder,
|
required this.gridId,
|
||||||
required TypeOptionDataController dataController,
|
required this.fieldId,
|
||||||
}) : service = TypeOptionFFIService(
|
required this.typeOptionContext,
|
||||||
gridId: dataController.gridId,
|
}) : service = TypeOptionFFIService(gridId: gridId, fieldId: fieldId);
|
||||||
fieldId: dataController.field.id,
|
|
||||||
),
|
SingleSelectTypeOptionPB get typeOption => typeOptionContext.typeOption;
|
||||||
super(dataParser: dataBuilder, dataController: dataController);
|
|
||||||
|
set typeOption(SingleSelectTypeOptionPB newTypeOption) {
|
||||||
|
typeOptionContext.typeOption = newTypeOption;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<SelectOptionPB> Function(SelectOptionPB) get deleteOption {
|
List<SelectOptionPB> Function(SelectOptionPB) get deleteOption {
|
||||||
@ -71,11 +77,3 @@ class SingleSelectTypeOptionContext with ISelectOptionAction {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SingleSelectTypeOptionWidgetDataParser
|
|
||||||
extends TypeOptionDataParser<SingleSelectTypeOptionPB> {
|
|
||||||
@override
|
|
||||||
SingleSelectTypeOptionPB fromBuffer(List<int> buffer) {
|
|
||||||
return SingleSelectTypeOptionPB.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,127 +1,12 @@
|
|||||||
import 'package:flowy_infra/notifier.dart';
|
import 'package:flowy_infra/notifier.dart';
|
||||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option.pb.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/field_service.dart';
|
import 'package:app_flowy/plugins/grid/application/field/field_service.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/number_type_option.pb.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/single_select_type_option.pb.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/text_type_option.pb.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/url_type_option.pb.dart';
|
|
||||||
import 'package:protobuf/protobuf.dart';
|
import 'package:protobuf/protobuf.dart';
|
||||||
import 'package:flowy_sdk/log.dart';
|
import 'package:flowy_sdk/log.dart';
|
||||||
|
|
||||||
abstract class TypeOptionDataParser<T> {
|
import 'type_option_context.dart';
|
||||||
T fromBuffer(List<int> buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef NumberTypeOptionContext = TypeOptionContext<NumberTypeOption>;
|
|
||||||
typedef RichTextTypeOptionContext = TypeOptionContext<RichTextTypeOption>;
|
|
||||||
typedef CheckboxTypeOptionContext = TypeOptionContext<CheckboxTypeOption>;
|
|
||||||
typedef URLTypeOptionContext = TypeOptionContext<URLTypeOption>;
|
|
||||||
typedef DateTypeOptionContext = TypeOptionContext<DateTypeOption>;
|
|
||||||
|
|
||||||
typedef SingleSelectTypeOptionContext
|
|
||||||
= TypeOptionContext<SingleSelectTypeOptionPB>;
|
|
||||||
|
|
||||||
class TypeOptionContext<T extends GeneratedMessage> {
|
|
||||||
T? _typeOptionObject;
|
|
||||||
final TypeOptionDataParser<T> dataParser;
|
|
||||||
final TypeOptionDataController _dataController;
|
|
||||||
|
|
||||||
TypeOptionContext({
|
|
||||||
required this.dataParser,
|
|
||||||
required TypeOptionDataController dataController,
|
|
||||||
}) : _dataController = dataController;
|
|
||||||
|
|
||||||
String get gridId => _dataController.gridId;
|
|
||||||
|
|
||||||
Future<void> loadTypeOptionData({
|
|
||||||
required void Function(T) onCompleted,
|
|
||||||
required void Function(FlowyError) onError,
|
|
||||||
}) async {
|
|
||||||
await _dataController.loadTypeOptionData().then((result) {
|
|
||||||
result.fold((l) => null, (err) => onError(err));
|
|
||||||
});
|
|
||||||
|
|
||||||
onCompleted(typeOption);
|
|
||||||
}
|
|
||||||
|
|
||||||
T get typeOption {
|
|
||||||
if (_typeOptionObject != null) {
|
|
||||||
return _typeOptionObject!;
|
|
||||||
}
|
|
||||||
|
|
||||||
final T object = _dataController.getTypeOption(dataParser);
|
|
||||||
_typeOptionObject = object;
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
set typeOption(T typeOption) {
|
|
||||||
_dataController.typeOptionData = typeOption.writeToBuffer();
|
|
||||||
_typeOptionObject = typeOption;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class TypeOptionFieldDelegate {
|
|
||||||
void onFieldChanged(void Function(String) callback);
|
|
||||||
void dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class IFieldTypeOptionLoader {
|
|
||||||
String get gridId;
|
|
||||||
Future<Either<FieldTypeOptionDataPB, FlowyError>> load();
|
|
||||||
|
|
||||||
Future<Either<FieldTypeOptionDataPB, FlowyError>> switchToField(
|
|
||||||
String fieldId, FieldType fieldType) {
|
|
||||||
final payload = EditFieldPayloadPB.create()
|
|
||||||
..gridId = gridId
|
|
||||||
..fieldId = fieldId
|
|
||||||
..fieldType = fieldType;
|
|
||||||
|
|
||||||
return GridEventSwitchToField(payload).send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader {
|
|
||||||
@override
|
|
||||||
final String gridId;
|
|
||||||
NewFieldTypeOptionLoader({
|
|
||||||
required this.gridId,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Either<FieldTypeOptionDataPB, FlowyError>> load() {
|
|
||||||
final payload = CreateFieldPayloadPB.create()
|
|
||||||
..gridId = gridId
|
|
||||||
..fieldType = FieldType.RichText;
|
|
||||||
|
|
||||||
return GridEventCreateFieldTypeOption(payload).send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FieldTypeOptionLoader extends IFieldTypeOptionLoader {
|
|
||||||
@override
|
|
||||||
final String gridId;
|
|
||||||
final GridFieldPB field;
|
|
||||||
|
|
||||||
FieldTypeOptionLoader({
|
|
||||||
required this.gridId,
|
|
||||||
required this.field,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Either<FieldTypeOptionDataPB, FlowyError>> load() {
|
|
||||||
final payload = GridFieldTypeOptionIdPB.create()
|
|
||||||
..gridId = gridId
|
|
||||||
..fieldId = field.id
|
|
||||||
..fieldType = field.fieldType;
|
|
||||||
|
|
||||||
return GridEventGetFieldTypeOption(payload).send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TypeOptionDataController {
|
class TypeOptionDataController {
|
||||||
final String gridId;
|
final String gridId;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:app_flowy/generated/locale_keys.g.dart';
|
import 'package:app_flowy/generated/locale_keys.g.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/cell/date_cal_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/cell/date_cal_bloc.dart';
|
||||||
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flowy_infra/image.dart';
|
import 'package:flowy_infra/image.dart';
|
||||||
import 'package:flowy_infra/theme.dart';
|
import 'package:flowy_infra/theme.dart';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/field_cell_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/field/field_cell_bloc.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/field_service.dart';
|
import 'package:app_flowy/plugins/grid/application/field/field_service.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:flowy_infra/image.dart';
|
import 'package:flowy_infra/image.dart';
|
||||||
import 'package:flowy_infra/theme.dart';
|
import 'package:flowy_infra/theme.dart';
|
||||||
import 'package:flowy_infra_ui/style_widget/button.dart';
|
import 'package:flowy_infra_ui/style_widget/button.dart';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/field_editor_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/field/field_editor_bloc.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flowy_infra_ui/style_widget/text.dart';
|
import 'package:flowy_infra_ui/style_widget/text.dart';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/field_cache.dart';
|
import 'package:app_flowy/plugins/grid/application/field/field_cache.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:app_flowy/startup/startup.dart';
|
import 'package:app_flowy/startup/startup.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/prelude.dart';
|
import 'package:app_flowy/plugins/grid/application/prelude.dart';
|
||||||
import 'package:flowy_infra/image.dart';
|
import 'package:flowy_infra/image.dart';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/multi_select_type_option.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/multi_select_type_option.dart';
|
||||||
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option.pb.dart';
|
||||||
@ -86,7 +87,7 @@ TypeOptionWidgetBuilder makeTypeOptionWidgetBuilder({
|
|||||||
gridId: gridId,
|
gridId: gridId,
|
||||||
fieldType: fieldType,
|
fieldType: fieldType,
|
||||||
dataController: dataController,
|
dataController: dataController,
|
||||||
) as SingleSelectTypeOptionContext,
|
),
|
||||||
overlayDelegate,
|
overlayDelegate,
|
||||||
);
|
);
|
||||||
case FieldType.MultiSelect:
|
case FieldType.MultiSelect:
|
||||||
@ -165,7 +166,7 @@ TypeOptionContext<T>
|
|||||||
case FieldType.SingleSelect:
|
case FieldType.SingleSelect:
|
||||||
return SingleSelectTypeOptionContext(
|
return SingleSelectTypeOptionContext(
|
||||||
dataController: dataController,
|
dataController: dataController,
|
||||||
dataBuilder: SingleSelectTypeOptionWidgetDataParser(),
|
dataParser: SingleSelectTypeOptionWidgetDataParser(),
|
||||||
) as TypeOptionContext<T>;
|
) as TypeOptionContext<T>;
|
||||||
case FieldType.MultiSelect:
|
case FieldType.MultiSelect:
|
||||||
return MultiSelectTypeOptionContext(
|
return MultiSelectTypeOptionContext(
|
||||||
|
@ -1,18 +1,7 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'builder.dart';
|
import 'builder.dart';
|
||||||
|
|
||||||
typedef CheckboxTypeOptionContext = TypeOptionContext<CheckboxTypeOption>;
|
|
||||||
|
|
||||||
class CheckboxTypeOptionWidgetDataParser
|
|
||||||
extends TypeOptionDataParser<CheckboxTypeOption> {
|
|
||||||
@override
|
|
||||||
CheckboxTypeOption fromBuffer(List<int> buffer) {
|
|
||||||
return CheckboxTypeOption.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class CheckboxTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
class CheckboxTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
||||||
CheckboxTypeOptionWidgetBuilder(CheckboxTypeOptionContext typeOptionContext);
|
CheckboxTypeOptionWidgetBuilder(CheckboxTypeOptionContext typeOptionContext);
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/date_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/date_bloc.dart';
|
||||||
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart' hide DateFormat;
|
import 'package:easy_localization/easy_localization.dart' hide DateFormat;
|
||||||
import 'package:app_flowy/generated/locale_keys.g.dart';
|
import 'package:app_flowy/generated/locale_keys.g.dart';
|
||||||
import 'package:flowy_infra/image.dart';
|
import 'package:flowy_infra/image.dart';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/number_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/number_bloc.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/number_format_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/number_format_bloc.dart';
|
||||||
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:flowy_infra/image.dart';
|
import 'package:flowy_infra/image.dart';
|
||||||
import 'package:flowy_infra/theme.dart';
|
import 'package:flowy_infra/theme.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
|
@ -1,16 +1,7 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/text_type_option.pb.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'builder.dart';
|
import 'builder.dart';
|
||||||
|
|
||||||
class RichTextTypeOptionWidgetDataParser
|
|
||||||
extends TypeOptionDataParser<RichTextTypeOption> {
|
|
||||||
@override
|
|
||||||
RichTextTypeOption fromBuffer(List<int> buffer) {
|
|
||||||
return RichTextTypeOption.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class RichTextTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
class RichTextTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
||||||
RichTextTypeOptionWidgetBuilder(RichTextTypeOptionContext typeOptionContext);
|
RichTextTypeOptionWidgetBuilder(RichTextTypeOptionContext typeOptionContext);
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/single_select_type_option.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/single_select_type_option.dart';
|
||||||
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../field_type_option_editor.dart';
|
import '../field_type_option_editor.dart';
|
||||||
import 'builder.dart';
|
import 'builder.dart';
|
||||||
@ -8,10 +9,14 @@ class SingleSelectTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
|||||||
final SingleSelectTypeOptionWidget _widget;
|
final SingleSelectTypeOptionWidget _widget;
|
||||||
|
|
||||||
SingleSelectTypeOptionWidgetBuilder(
|
SingleSelectTypeOptionWidgetBuilder(
|
||||||
SingleSelectTypeOptionContext typeOptionContext,
|
SingleSelectTypeOptionContext singleSelectTypeOption,
|
||||||
TypeOptionOverlayDelegate overlayDelegate,
|
TypeOptionOverlayDelegate overlayDelegate,
|
||||||
) : _widget = SingleSelectTypeOptionWidget(
|
) : _widget = SingleSelectTypeOptionWidget(
|
||||||
typeOptionContext: typeOptionContext,
|
selectOptionAction: SingleSelectAction(
|
||||||
|
fieldId: singleSelectTypeOption.fieldId,
|
||||||
|
gridId: singleSelectTypeOption.gridId,
|
||||||
|
typeOptionContext: singleSelectTypeOption,
|
||||||
|
),
|
||||||
overlayDelegate: overlayDelegate,
|
overlayDelegate: overlayDelegate,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -20,11 +25,11 @@ class SingleSelectTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SingleSelectTypeOptionWidget extends TypeOptionWidget {
|
class SingleSelectTypeOptionWidget extends TypeOptionWidget {
|
||||||
final SingleSelectTypeOptionContext typeOptionContext;
|
final SingleSelectAction selectOptionAction;
|
||||||
final TypeOptionOverlayDelegate overlayDelegate;
|
final TypeOptionOverlayDelegate overlayDelegate;
|
||||||
|
|
||||||
const SingleSelectTypeOptionWidget({
|
const SingleSelectTypeOptionWidget({
|
||||||
required this.typeOptionContext,
|
required this.selectOptionAction,
|
||||||
required this.overlayDelegate,
|
required this.overlayDelegate,
|
||||||
Key? key,
|
Key? key,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
@ -32,10 +37,10 @@ class SingleSelectTypeOptionWidget extends TypeOptionWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SelectOptionTypeOptionWidget(
|
return SelectOptionTypeOptionWidget(
|
||||||
options: typeOptionContext.typeOption.options,
|
options: selectOptionAction.typeOption.options,
|
||||||
beginEdit: () => overlayDelegate.hideOverlay(context),
|
beginEdit: () => overlayDelegate.hideOverlay(context),
|
||||||
overlayDelegate: overlayDelegate,
|
overlayDelegate: overlayDelegate,
|
||||||
typeOptionAction: typeOptionContext,
|
typeOptionAction: selectOptionAction,
|
||||||
// key: ValueKey(state.typeOption.hashCode),
|
// key: ValueKey(state.typeOption.hashCode),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,7 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid/url_type_option.pb.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'builder.dart';
|
import 'builder.dart';
|
||||||
|
|
||||||
class URLTypeOptionWidgetDataParser
|
|
||||||
extends TypeOptionDataParser<URLTypeOption> {
|
|
||||||
@override
|
|
||||||
URLTypeOption fromBuffer(List<int> buffer) {
|
|
||||||
return URLTypeOption.fromBuffer(buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class URLTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
class URLTypeOptionWidgetBuilder extends TypeOptionWidgetBuilder {
|
||||||
URLTypeOptionWidgetBuilder(URLTypeOptionContext typeOptionContext);
|
URLTypeOptionWidgetBuilder(URLTypeOptionContext typeOptionContext);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart';
|
import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/row/row_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/row/row_data_controller.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/row/row_detail_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/row/row_detail_bloc.dart';
|
||||||
import 'package:flowy_infra/image.dart';
|
import 'package:flowy_infra/image.dart';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart';
|
import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:app_flowy/startup/startup.dart';
|
import 'package:app_flowy/startup/startup.dart';
|
||||||
import 'package:app_flowy/plugins/grid/application/setting/property_bloc.dart';
|
import 'package:app_flowy/plugins/grid/application/setting/property_bloc.dart';
|
||||||
import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart';
|
import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart';
|
||||||
|
Reference in New Issue
Block a user