mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: enable reordering properties from settings
This commit is contained in:
parent
2da37122e4
commit
778e462523
@ -27,20 +27,32 @@ class DatabasePropertyBloc
|
|||||||
_startListening();
|
_startListening();
|
||||||
},
|
},
|
||||||
setFieldVisibility: (_SetFieldVisibility value) async {
|
setFieldVisibility: (_SetFieldVisibility value) async {
|
||||||
final fieldBackendSvc =
|
final fieldBackendSvc = FieldBackendService(
|
||||||
FieldBackendService(viewId: viewId, fieldId: value.fieldId);
|
viewId: viewId,
|
||||||
final result =
|
fieldId: value.fieldId,
|
||||||
await fieldBackendSvc.updateField(visibility: value.visibility);
|
|
||||||
result.fold(
|
|
||||||
(l) => null,
|
|
||||||
(err) => Log.error(err),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final result = await fieldBackendSvc.updateField(
|
||||||
|
visibility: value.visibility,
|
||||||
|
);
|
||||||
|
|
||||||
|
result.fold((l) => null, (err) => Log.error(err));
|
||||||
},
|
},
|
||||||
didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) {
|
didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) {
|
||||||
emit(state.copyWith(fieldContexts: value.fields));
|
emit(state.copyWith(fieldContexts: value.fields));
|
||||||
},
|
},
|
||||||
moveField: (_MoveField value) {
|
moveField: (_MoveField value) async {
|
||||||
//
|
final fieldBackendService = FieldBackendService(
|
||||||
|
viewId: viewId,
|
||||||
|
fieldId: value.fieldId,
|
||||||
|
);
|
||||||
|
|
||||||
|
final result = await fieldBackendService.moveField(
|
||||||
|
value.fromIndex,
|
||||||
|
value.toIndex,
|
||||||
|
);
|
||||||
|
|
||||||
|
result.fold((l) => null, (r) => Log.error(r));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -76,8 +88,11 @@ class DatabasePropertyEvent with _$DatabasePropertyEvent {
|
|||||||
const factory DatabasePropertyEvent.didReceiveFieldUpdate(
|
const factory DatabasePropertyEvent.didReceiveFieldUpdate(
|
||||||
List<FieldInfo> fields,
|
List<FieldInfo> fields,
|
||||||
) = _DidReceiveFieldUpdate;
|
) = _DidReceiveFieldUpdate;
|
||||||
const factory DatabasePropertyEvent.moveField(int fromIndex, int toIndex) =
|
const factory DatabasePropertyEvent.moveField({
|
||||||
_MoveField;
|
required String fieldId,
|
||||||
|
required int fromIndex,
|
||||||
|
required int toIndex,
|
||||||
|
}) = _MoveField;
|
||||||
}
|
}
|
||||||
|
|
||||||
@freezed
|
@freezed
|
||||||
|
@ -9,6 +9,7 @@ import 'package:flowy_infra/theme_extension.dart';
|
|||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:reorderables/reorderables.dart';
|
||||||
import 'package:styled_widget/styled_widget.dart';
|
import 'package:styled_widget/styled_widget.dart';
|
||||||
|
|
||||||
import '../../grid/presentation/layout/sizes.dart';
|
import '../../grid/presentation/layout/sizes.dart';
|
||||||
@ -17,24 +18,19 @@ import '../../grid/presentation/widgets/header/field_editor.dart';
|
|||||||
class DatabasePropertyList extends StatefulWidget {
|
class DatabasePropertyList extends StatefulWidget {
|
||||||
final String viewId;
|
final String viewId;
|
||||||
final FieldController fieldController;
|
final FieldController fieldController;
|
||||||
|
|
||||||
const DatabasePropertyList({
|
const DatabasePropertyList({
|
||||||
|
super.key,
|
||||||
required this.viewId,
|
required this.viewId,
|
||||||
required this.fieldController,
|
required this.fieldController,
|
||||||
Key? key,
|
});
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<StatefulWidget> createState() => _DatabasePropertyListState();
|
State<StatefulWidget> createState() => _DatabasePropertyListState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _DatabasePropertyListState extends State<DatabasePropertyList> {
|
class _DatabasePropertyListState extends State<DatabasePropertyList> {
|
||||||
late PopoverMutex _popoverMutex;
|
final PopoverMutex _popoverMutex = PopoverMutex();
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
_popoverMutex = PopoverMutex();
|
|
||||||
super.initState();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -47,21 +43,29 @@ class _DatabasePropertyListState extends State<DatabasePropertyList> {
|
|||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
final cells = state.fieldContexts.map((field) {
|
final cells = state.fieldContexts.map((field) {
|
||||||
return _GridPropertyCell(
|
return _GridPropertyCell(
|
||||||
popoverMutex: _popoverMutex,
|
key: ValueKey(field.id),
|
||||||
viewId: widget.viewId,
|
viewId: widget.viewId,
|
||||||
fieldInfo: field,
|
fieldInfo: field,
|
||||||
key: ValueKey(field.id),
|
popoverMutex: _popoverMutex,
|
||||||
);
|
);
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
return ListView.separated(
|
return ReorderableColumn(
|
||||||
controller: ScrollController(),
|
needsLongPressDraggable: false,
|
||||||
shrinkWrap: true,
|
buildDraggableFeedback: (context, constraints, child) =>
|
||||||
itemCount: cells.length,
|
ConstrainedBox(
|
||||||
itemBuilder: (BuildContext context, int index) => cells[index],
|
constraints: constraints,
|
||||||
separatorBuilder: (BuildContext context, int index) =>
|
child: Material(color: Colors.transparent, child: child),
|
||||||
VSpace(GridSize.typeOptionSeparatorHeight),
|
),
|
||||||
|
onReorder: (from, to) => context.read<DatabasePropertyBloc>().add(
|
||||||
|
DatabasePropertyEvent.moveField(
|
||||||
|
fieldId: cells[from].fieldInfo.id,
|
||||||
|
fromIndex: from,
|
||||||
|
toIndex: to,
|
||||||
|
),
|
||||||
|
),
|
||||||
padding: const EdgeInsets.symmetric(vertical: 6.0),
|
padding: const EdgeInsets.symmetric(vertical: 6.0),
|
||||||
|
children: cells,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -75,24 +79,18 @@ class _GridPropertyCell extends StatefulWidget {
|
|||||||
final PopoverMutex popoverMutex;
|
final PopoverMutex popoverMutex;
|
||||||
|
|
||||||
const _GridPropertyCell({
|
const _GridPropertyCell({
|
||||||
required this.viewId,
|
super.key,
|
||||||
required this.fieldInfo,
|
required this.fieldInfo,
|
||||||
|
required this.viewId,
|
||||||
required this.popoverMutex,
|
required this.popoverMutex,
|
||||||
Key? key,
|
});
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<_GridPropertyCell> createState() => _GridPropertyCellState();
|
State<_GridPropertyCell> createState() => _GridPropertyCellState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _GridPropertyCellState extends State<_GridPropertyCell> {
|
class _GridPropertyCellState extends State<_GridPropertyCell> {
|
||||||
late PopoverController _popoverController;
|
final PopoverController _popoverController = PopoverController();
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
_popoverController = PopoverController();
|
|
||||||
super.initState();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -28,13 +28,7 @@ class SettingButton extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _SettingButtonState extends State<SettingButton> {
|
class _SettingButtonState extends State<SettingButton> {
|
||||||
late PopoverController _popoverController;
|
final PopoverController _popoverController = PopoverController();
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
_popoverController = PopoverController();
|
|
||||||
super.initState();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -108,9 +102,18 @@ class _DatabaseSettingListPopoverState
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
case DatabaseSettingAction.showProperties:
|
case DatabaseSettingAction.showProperties:
|
||||||
return DatabasePropertyList(
|
return Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
DatabasePropertyList(
|
||||||
viewId: widget.databaseController.viewId,
|
viewId: widget.databaseController.viewId,
|
||||||
fieldController: widget.databaseController.fieldController,
|
fieldController: widget.databaseController.fieldController,
|
||||||
|
),
|
||||||
|
FlowyText.regular(
|
||||||
|
LocaleKeys.grid_settings_reorderPropertiesTooltip.tr(),
|
||||||
|
),
|
||||||
|
const VSpace(8),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
case DatabaseSettingAction.showCalendarLayout:
|
case DatabaseSettingAction.showCalendarLayout:
|
||||||
return CalendarLayoutSetting(
|
return CalendarLayoutSetting(
|
||||||
@ -165,7 +168,7 @@ extension DatabaseSettingActionExtension on DatabaseSettingAction {
|
|||||||
String title() {
|
String title() {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case DatabaseSettingAction.showProperties:
|
case DatabaseSettingAction.showProperties:
|
||||||
return LocaleKeys.grid_settings_Properties.tr();
|
return LocaleKeys.grid_settings_properties.tr();
|
||||||
case DatabaseSettingAction.showLayout:
|
case DatabaseSettingAction.showLayout:
|
||||||
return LocaleKeys.grid_settings_databaseLayout.tr();
|
return LocaleKeys.grid_settings_databaseLayout.tr();
|
||||||
case DatabaseSettingAction.showGroup:
|
case DatabaseSettingAction.showGroup:
|
||||||
|
@ -285,7 +285,8 @@
|
|||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"sort": "Sort",
|
"sort": "Sort",
|
||||||
"sortBy": "Sort by",
|
"sortBy": "Sort by",
|
||||||
"Properties": "Properties",
|
"properties": "Properties",
|
||||||
|
"reorderPropertiesTooltip": "Drag to reorder properties",
|
||||||
"group": "Group",
|
"group": "Group",
|
||||||
"addFilter": "Add Filter",
|
"addFilter": "Add Filter",
|
||||||
"deleteFilter": "Delete filter",
|
"deleteFilter": "Delete filter",
|
||||||
|
Loading…
Reference in New Issue
Block a user