diff --git a/frontend/app_flowy/lib/startup/deps_resolver.dart b/frontend/app_flowy/lib/startup/deps_resolver.dart index a5d6321fa0..fb5cad590e 100644 --- a/frontend/app_flowy/lib/startup/deps_resolver.dart +++ b/frontend/app_flowy/lib/startup/deps_resolver.dart @@ -99,7 +99,6 @@ void _resolveFolderDeps(GetIt getIt) { getIt.registerFactoryParam( (user, workspaceId) => MenuBloc( workspaceId: workspaceId, - service: WorkspaceService(), listener: getIt(param1: user, param2: workspaceId), ), ); diff --git a/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart b/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart index 6ee18986b5..558c84b83a 100644 --- a/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart @@ -12,11 +12,13 @@ import 'package:flutter_bloc/flutter_bloc.dart'; part 'menu_bloc.freezed.dart'; class MenuBloc extends Bloc { - final WorkspaceService service; + final WorkspaceService _workspaceService; final WorkspaceListener listener; final String workspaceId; - MenuBloc({required this.workspaceId, required this.service, required this.listener}) : super(MenuState.initial()) { + MenuBloc({required this.workspaceId, required this.listener}) + : _workspaceService = WorkspaceService(workspaceId: workspaceId), + super(MenuState.initial()) { on((event, emit) async { await event.map( initial: (e) async { @@ -30,15 +32,21 @@ class MenuBloc extends Bloc { openPage: (e) async { emit(state.copyWith(plugin: e.plugin)); }, - createApp: (CreateApp event) async { + createApp: (_CreateApp event) async { await _performActionOnCreateApp(event, emit); }, didReceiveApps: (e) async { emit(e.appsOrFail.fold( - (apps) => state.copyWith(apps: some(apps), successOrFailure: left(unit)), + (apps) => state.copyWith(apps: apps, successOrFailure: left(unit)), (err) => state.copyWith(successOrFailure: right(err)), )); }, + moveApp: (_MoveApp value) { + if (state.apps.length > value.fromIndex) { + final app = state.apps[value.fromIndex]; + _workspaceService.moveApp(appId: app.id, fromIndex: value.fromIndex, toIndex: value.toIndex); + } + }, ); }); } @@ -49,8 +57,8 @@ class MenuBloc extends Bloc { return super.close(); } - Future _performActionOnCreateApp(CreateApp event, Emitter emit) async { - final result = await service.createApp(workspaceId: workspaceId, name: event.name, desc: event.desc ?? ""); + Future _performActionOnCreateApp(_CreateApp event, Emitter emit) async { + final result = await _workspaceService.createApp(name: event.name, desc: event.desc ?? ""); result.fold( (app) => {}, (error) { @@ -62,9 +70,9 @@ class MenuBloc extends Bloc { // ignore: unused_element Future _fetchApps(Emitter emit) async { - final appsOrFail = await service.getApps(workspaceId: workspaceId); + final appsOrFail = await _workspaceService.getApps(); emit(appsOrFail.fold( - (apps) => state.copyWith(apps: some(apps)), + (apps) => state.copyWith(apps: apps), (error) { Log.error(error); return state.copyWith(successOrFailure: right(error)); @@ -83,24 +91,25 @@ class MenuBloc extends Bloc { @freezed class MenuEvent with _$MenuEvent { const factory MenuEvent.initial() = _Initial; - const factory MenuEvent.collapse() = Collapse; - const factory MenuEvent.openPage(Plugin plugin) = OpenPage; - const factory MenuEvent.createApp(String name, {String? desc}) = CreateApp; - const factory MenuEvent.didReceiveApps(Either, FlowyError> appsOrFail) = ReceiveApps; + const factory MenuEvent.collapse() = _Collapse; + const factory MenuEvent.openPage(Plugin plugin) = _OpenPage; + const factory MenuEvent.createApp(String name, {String? desc}) = _CreateApp; + const factory MenuEvent.moveApp(int fromIndex, int toIndex) = _MoveApp; + const factory MenuEvent.didReceiveApps(Either, FlowyError> appsOrFail) = _ReceiveApps; } @freezed class MenuState with _$MenuState { const factory MenuState({ required bool isCollapse, - required Option> apps, + required List apps, required Either successOrFailure, required Plugin plugin, }) = _MenuState; factory MenuState.initial() => MenuState( isCollapse: false, - apps: none(), + apps: [], successOrFailure: left(unit), plugin: makePlugin(pluginType: DefaultPlugin.blank.type()), ); diff --git a/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.freezed.dart b/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.freezed.dart index 4148412aee..633357d4cc 100644 --- a/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.freezed.dart +++ b/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.freezed.dart @@ -21,25 +21,32 @@ class _$MenuEventTearOff { return const _Initial(); } - Collapse collapse() { - return const Collapse(); + _Collapse collapse() { + return const _Collapse(); } - OpenPage openPage(Plugin plugin) { - return OpenPage( + _OpenPage openPage(Plugin plugin) { + return _OpenPage( plugin, ); } - CreateApp createApp(String name, {String? desc}) { - return CreateApp( + _CreateApp createApp(String name, {String? desc}) { + return _CreateApp( name, desc: desc, ); } - ReceiveApps didReceiveApps(Either, FlowyError> appsOrFail) { - return ReceiveApps( + _MoveApp moveApp(int fromIndex, int toIndex) { + return _MoveApp( + fromIndex, + toIndex, + ); + } + + _ReceiveApps didReceiveApps(Either, FlowyError> appsOrFail) { + return _ReceiveApps( appsOrFail, ); } @@ -56,6 +63,7 @@ mixin _$MenuEvent { required TResult Function() collapse, required TResult Function(Plugin plugin) openPage, required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, required TResult Function(Either, FlowyError> appsOrFail) didReceiveApps, }) => @@ -66,6 +74,7 @@ mixin _$MenuEvent { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, }) => throw _privateConstructorUsedError; @@ -75,6 +84,7 @@ mixin _$MenuEvent { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, required TResult orElse(), }) => @@ -82,28 +92,31 @@ mixin _$MenuEvent { @optionalTypeArgs TResult map({ required TResult Function(_Initial value) initial, - required TResult Function(Collapse value) collapse, - required TResult Function(OpenPage value) openPage, - required TResult Function(CreateApp value) createApp, - required TResult Function(ReceiveApps value) didReceiveApps, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -165,6 +178,7 @@ class _$_Initial implements _Initial { required TResult Function() collapse, required TResult Function(Plugin plugin) openPage, required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, required TResult Function(Either, FlowyError> appsOrFail) didReceiveApps, }) { @@ -178,6 +192,7 @@ class _$_Initial implements _Initial { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, }) { return initial?.call(); @@ -190,6 +205,7 @@ class _$_Initial implements _Initial { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, required TResult orElse(), }) { @@ -203,10 +219,11 @@ class _$_Initial implements _Initial { @optionalTypeArgs TResult map({ required TResult Function(_Initial value) initial, - required TResult Function(Collapse value) collapse, - required TResult Function(OpenPage value) openPage, - required TResult Function(CreateApp value) createApp, - required TResult Function(ReceiveApps value) didReceiveApps, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, }) { return initial(this); } @@ -215,10 +232,11 @@ class _$_Initial implements _Initial { @optionalTypeArgs TResult? mapOrNull({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, }) { return initial?.call(this); } @@ -227,10 +245,11 @@ class _$_Initial implements _Initial { @optionalTypeArgs TResult maybeMap({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, required TResult orElse(), }) { if (initial != null) { @@ -245,25 +264,25 @@ abstract class _Initial implements MenuEvent { } /// @nodoc -abstract class $CollapseCopyWith<$Res> { - factory $CollapseCopyWith(Collapse value, $Res Function(Collapse) then) = - _$CollapseCopyWithImpl<$Res>; +abstract class _$CollapseCopyWith<$Res> { + factory _$CollapseCopyWith(_Collapse value, $Res Function(_Collapse) then) = + __$CollapseCopyWithImpl<$Res>; } /// @nodoc -class _$CollapseCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> - implements $CollapseCopyWith<$Res> { - _$CollapseCopyWithImpl(Collapse _value, $Res Function(Collapse) _then) - : super(_value, (v) => _then(v as Collapse)); +class __$CollapseCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> + implements _$CollapseCopyWith<$Res> { + __$CollapseCopyWithImpl(_Collapse _value, $Res Function(_Collapse) _then) + : super(_value, (v) => _then(v as _Collapse)); @override - Collapse get _value => super._value as Collapse; + _Collapse get _value => super._value as _Collapse; } /// @nodoc -class _$Collapse implements Collapse { - const _$Collapse(); +class _$_Collapse implements _Collapse { + const _$_Collapse(); @override String toString() { @@ -272,7 +291,7 @@ class _$Collapse implements Collapse { @override bool operator ==(dynamic other) { - return identical(this, other) || (other is Collapse); + return identical(this, other) || (other is _Collapse); } @override @@ -285,6 +304,7 @@ class _$Collapse implements Collapse { required TResult Function() collapse, required TResult Function(Plugin plugin) openPage, required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, required TResult Function(Either, FlowyError> appsOrFail) didReceiveApps, }) { @@ -298,6 +318,7 @@ class _$Collapse implements Collapse { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, }) { return collapse?.call(); @@ -310,6 +331,7 @@ class _$Collapse implements Collapse { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, required TResult orElse(), }) { @@ -323,10 +345,11 @@ class _$Collapse implements Collapse { @optionalTypeArgs TResult map({ required TResult Function(_Initial value) initial, - required TResult Function(Collapse value) collapse, - required TResult Function(OpenPage value) openPage, - required TResult Function(CreateApp value) createApp, - required TResult Function(ReceiveApps value) didReceiveApps, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, }) { return collapse(this); } @@ -335,10 +358,11 @@ class _$Collapse implements Collapse { @optionalTypeArgs TResult? mapOrNull({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, }) { return collapse?.call(this); } @@ -347,10 +371,11 @@ class _$Collapse implements Collapse { @optionalTypeArgs TResult maybeMap({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, required TResult orElse(), }) { if (collapse != null) { @@ -360,31 +385,31 @@ class _$Collapse implements Collapse { } } -abstract class Collapse implements MenuEvent { - const factory Collapse() = _$Collapse; +abstract class _Collapse implements MenuEvent { + const factory _Collapse() = _$_Collapse; } /// @nodoc -abstract class $OpenPageCopyWith<$Res> { - factory $OpenPageCopyWith(OpenPage value, $Res Function(OpenPage) then) = - _$OpenPageCopyWithImpl<$Res>; +abstract class _$OpenPageCopyWith<$Res> { + factory _$OpenPageCopyWith(_OpenPage value, $Res Function(_OpenPage) then) = + __$OpenPageCopyWithImpl<$Res>; $Res call({Plugin plugin}); } /// @nodoc -class _$OpenPageCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> - implements $OpenPageCopyWith<$Res> { - _$OpenPageCopyWithImpl(OpenPage _value, $Res Function(OpenPage) _then) - : super(_value, (v) => _then(v as OpenPage)); +class __$OpenPageCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> + implements _$OpenPageCopyWith<$Res> { + __$OpenPageCopyWithImpl(_OpenPage _value, $Res Function(_OpenPage) _then) + : super(_value, (v) => _then(v as _OpenPage)); @override - OpenPage get _value => super._value as OpenPage; + _OpenPage get _value => super._value as _OpenPage; @override $Res call({ Object? plugin = freezed, }) { - return _then(OpenPage( + return _then(_OpenPage( plugin == freezed ? _value.plugin : plugin // ignore: cast_nullable_to_non_nullable @@ -395,8 +420,8 @@ class _$OpenPageCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> /// @nodoc -class _$OpenPage implements OpenPage { - const _$OpenPage(this.plugin); +class _$_OpenPage implements _OpenPage { + const _$_OpenPage(this.plugin); @override final Plugin plugin; @@ -409,7 +434,7 @@ class _$OpenPage implements OpenPage { @override bool operator ==(dynamic other) { return identical(this, other) || - (other is OpenPage && + (other is _OpenPage && (identical(other.plugin, plugin) || const DeepCollectionEquality().equals(other.plugin, plugin))); } @@ -420,8 +445,8 @@ class _$OpenPage implements OpenPage { @JsonKey(ignore: true) @override - $OpenPageCopyWith get copyWith => - _$OpenPageCopyWithImpl(this, _$identity); + _$OpenPageCopyWith<_OpenPage> get copyWith => + __$OpenPageCopyWithImpl<_OpenPage>(this, _$identity); @override @optionalTypeArgs @@ -430,6 +455,7 @@ class _$OpenPage implements OpenPage { required TResult Function() collapse, required TResult Function(Plugin plugin) openPage, required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, required TResult Function(Either, FlowyError> appsOrFail) didReceiveApps, }) { @@ -443,6 +469,7 @@ class _$OpenPage implements OpenPage { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, }) { return openPage?.call(plugin); @@ -455,6 +482,7 @@ class _$OpenPage implements OpenPage { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, required TResult orElse(), }) { @@ -468,10 +496,11 @@ class _$OpenPage implements OpenPage { @optionalTypeArgs TResult map({ required TResult Function(_Initial value) initial, - required TResult Function(Collapse value) collapse, - required TResult Function(OpenPage value) openPage, - required TResult Function(CreateApp value) createApp, - required TResult Function(ReceiveApps value) didReceiveApps, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, }) { return openPage(this); } @@ -480,10 +509,11 @@ class _$OpenPage implements OpenPage { @optionalTypeArgs TResult? mapOrNull({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, }) { return openPage?.call(this); } @@ -492,10 +522,11 @@ class _$OpenPage implements OpenPage { @optionalTypeArgs TResult maybeMap({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, required TResult orElse(), }) { if (openPage != null) { @@ -505,37 +536,38 @@ class _$OpenPage implements OpenPage { } } -abstract class OpenPage implements MenuEvent { - const factory OpenPage(Plugin plugin) = _$OpenPage; +abstract class _OpenPage implements MenuEvent { + const factory _OpenPage(Plugin plugin) = _$_OpenPage; Plugin get plugin => throw _privateConstructorUsedError; @JsonKey(ignore: true) - $OpenPageCopyWith get copyWith => + _$OpenPageCopyWith<_OpenPage> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class $CreateAppCopyWith<$Res> { - factory $CreateAppCopyWith(CreateApp value, $Res Function(CreateApp) then) = - _$CreateAppCopyWithImpl<$Res>; +abstract class _$CreateAppCopyWith<$Res> { + factory _$CreateAppCopyWith( + _CreateApp value, $Res Function(_CreateApp) then) = + __$CreateAppCopyWithImpl<$Res>; $Res call({String name, String? desc}); } /// @nodoc -class _$CreateAppCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> - implements $CreateAppCopyWith<$Res> { - _$CreateAppCopyWithImpl(CreateApp _value, $Res Function(CreateApp) _then) - : super(_value, (v) => _then(v as CreateApp)); +class __$CreateAppCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> + implements _$CreateAppCopyWith<$Res> { + __$CreateAppCopyWithImpl(_CreateApp _value, $Res Function(_CreateApp) _then) + : super(_value, (v) => _then(v as _CreateApp)); @override - CreateApp get _value => super._value as CreateApp; + _CreateApp get _value => super._value as _CreateApp; @override $Res call({ Object? name = freezed, Object? desc = freezed, }) { - return _then(CreateApp( + return _then(_CreateApp( name == freezed ? _value.name : name // ignore: cast_nullable_to_non_nullable @@ -550,8 +582,8 @@ class _$CreateAppCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> /// @nodoc -class _$CreateApp implements CreateApp { - const _$CreateApp(this.name, {this.desc}); +class _$_CreateApp implements _CreateApp { + const _$_CreateApp(this.name, {this.desc}); @override final String name; @@ -566,7 +598,7 @@ class _$CreateApp implements CreateApp { @override bool operator ==(dynamic other) { return identical(this, other) || - (other is CreateApp && + (other is _CreateApp && (identical(other.name, name) || const DeepCollectionEquality().equals(other.name, name)) && (identical(other.desc, desc) || @@ -581,8 +613,8 @@ class _$CreateApp implements CreateApp { @JsonKey(ignore: true) @override - $CreateAppCopyWith get copyWith => - _$CreateAppCopyWithImpl(this, _$identity); + _$CreateAppCopyWith<_CreateApp> get copyWith => + __$CreateAppCopyWithImpl<_CreateApp>(this, _$identity); @override @optionalTypeArgs @@ -591,6 +623,7 @@ class _$CreateApp implements CreateApp { required TResult Function() collapse, required TResult Function(Plugin plugin) openPage, required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, required TResult Function(Either, FlowyError> appsOrFail) didReceiveApps, }) { @@ -604,6 +637,7 @@ class _$CreateApp implements CreateApp { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, }) { return createApp?.call(name, desc); @@ -616,6 +650,7 @@ class _$CreateApp implements CreateApp { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, required TResult orElse(), }) { @@ -629,10 +664,11 @@ class _$CreateApp implements CreateApp { @optionalTypeArgs TResult map({ required TResult Function(_Initial value) initial, - required TResult Function(Collapse value) collapse, - required TResult Function(OpenPage value) openPage, - required TResult Function(CreateApp value) createApp, - required TResult Function(ReceiveApps value) didReceiveApps, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, }) { return createApp(this); } @@ -641,10 +677,11 @@ class _$CreateApp implements CreateApp { @optionalTypeArgs TResult? mapOrNull({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, }) { return createApp?.call(this); } @@ -653,10 +690,11 @@ class _$CreateApp implements CreateApp { @optionalTypeArgs TResult maybeMap({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, required TResult orElse(), }) { if (createApp != null) { @@ -666,39 +704,208 @@ class _$CreateApp implements CreateApp { } } -abstract class CreateApp implements MenuEvent { - const factory CreateApp(String name, {String? desc}) = _$CreateApp; +abstract class _CreateApp implements MenuEvent { + const factory _CreateApp(String name, {String? desc}) = _$_CreateApp; String get name => throw _privateConstructorUsedError; String? get desc => throw _privateConstructorUsedError; @JsonKey(ignore: true) - $CreateAppCopyWith get copyWith => + _$CreateAppCopyWith<_CreateApp> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class $ReceiveAppsCopyWith<$Res> { - factory $ReceiveAppsCopyWith( - ReceiveApps value, $Res Function(ReceiveApps) then) = - _$ReceiveAppsCopyWithImpl<$Res>; +abstract class _$MoveAppCopyWith<$Res> { + factory _$MoveAppCopyWith(_MoveApp value, $Res Function(_MoveApp) then) = + __$MoveAppCopyWithImpl<$Res>; + $Res call({int fromIndex, int toIndex}); +} + +/// @nodoc +class __$MoveAppCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> + implements _$MoveAppCopyWith<$Res> { + __$MoveAppCopyWithImpl(_MoveApp _value, $Res Function(_MoveApp) _then) + : super(_value, (v) => _then(v as _MoveApp)); + + @override + _MoveApp get _value => super._value as _MoveApp; + + @override + $Res call({ + Object? fromIndex = freezed, + Object? toIndex = freezed, + }) { + return _then(_MoveApp( + fromIndex == freezed + ? _value.fromIndex + : fromIndex // ignore: cast_nullable_to_non_nullable + as int, + toIndex == freezed + ? _value.toIndex + : toIndex // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc + +class _$_MoveApp implements _MoveApp { + const _$_MoveApp(this.fromIndex, this.toIndex); + + @override + final int fromIndex; + @override + final int toIndex; + + @override + String toString() { + return 'MenuEvent.moveApp(fromIndex: $fromIndex, toIndex: $toIndex)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other is _MoveApp && + (identical(other.fromIndex, fromIndex) || + const DeepCollectionEquality() + .equals(other.fromIndex, fromIndex)) && + (identical(other.toIndex, toIndex) || + const DeepCollectionEquality().equals(other.toIndex, toIndex))); + } + + @override + int get hashCode => + runtimeType.hashCode ^ + const DeepCollectionEquality().hash(fromIndex) ^ + const DeepCollectionEquality().hash(toIndex); + + @JsonKey(ignore: true) + @override + _$MoveAppCopyWith<_MoveApp> get copyWith => + __$MoveAppCopyWithImpl<_MoveApp>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initial, + required TResult Function() collapse, + required TResult Function(Plugin plugin) openPage, + required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, + required TResult Function(Either, FlowyError> appsOrFail) + didReceiveApps, + }) { + return moveApp(fromIndex, toIndex); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult Function()? initial, + TResult Function()? collapse, + TResult Function(Plugin plugin)? openPage, + TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, + TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, + }) { + return moveApp?.call(fromIndex, toIndex); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initial, + TResult Function()? collapse, + TResult Function(Plugin plugin)? openPage, + TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, + TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, + required TResult orElse(), + }) { + if (moveApp != null) { + return moveApp(fromIndex, toIndex); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_Initial value) initial, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, + }) { + return moveApp(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult Function(_Initial value)? initial, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, + }) { + return moveApp?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_Initial value)? initial, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, + required TResult orElse(), + }) { + if (moveApp != null) { + return moveApp(this); + } + return orElse(); + } +} + +abstract class _MoveApp implements MenuEvent { + const factory _MoveApp(int fromIndex, int toIndex) = _$_MoveApp; + + int get fromIndex => throw _privateConstructorUsedError; + int get toIndex => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + _$MoveAppCopyWith<_MoveApp> get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$ReceiveAppsCopyWith<$Res> { + factory _$ReceiveAppsCopyWith( + _ReceiveApps value, $Res Function(_ReceiveApps) then) = + __$ReceiveAppsCopyWithImpl<$Res>; $Res call({Either, FlowyError> appsOrFail}); } /// @nodoc -class _$ReceiveAppsCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> - implements $ReceiveAppsCopyWith<$Res> { - _$ReceiveAppsCopyWithImpl( - ReceiveApps _value, $Res Function(ReceiveApps) _then) - : super(_value, (v) => _then(v as ReceiveApps)); +class __$ReceiveAppsCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> + implements _$ReceiveAppsCopyWith<$Res> { + __$ReceiveAppsCopyWithImpl( + _ReceiveApps _value, $Res Function(_ReceiveApps) _then) + : super(_value, (v) => _then(v as _ReceiveApps)); @override - ReceiveApps get _value => super._value as ReceiveApps; + _ReceiveApps get _value => super._value as _ReceiveApps; @override $Res call({ Object? appsOrFail = freezed, }) { - return _then(ReceiveApps( + return _then(_ReceiveApps( appsOrFail == freezed ? _value.appsOrFail : appsOrFail // ignore: cast_nullable_to_non_nullable @@ -709,8 +916,8 @@ class _$ReceiveAppsCopyWithImpl<$Res> extends _$MenuEventCopyWithImpl<$Res> /// @nodoc -class _$ReceiveApps implements ReceiveApps { - const _$ReceiveApps(this.appsOrFail); +class _$_ReceiveApps implements _ReceiveApps { + const _$_ReceiveApps(this.appsOrFail); @override final Either, FlowyError> appsOrFail; @@ -723,7 +930,7 @@ class _$ReceiveApps implements ReceiveApps { @override bool operator ==(dynamic other) { return identical(this, other) || - (other is ReceiveApps && + (other is _ReceiveApps && (identical(other.appsOrFail, appsOrFail) || const DeepCollectionEquality() .equals(other.appsOrFail, appsOrFail))); @@ -735,8 +942,8 @@ class _$ReceiveApps implements ReceiveApps { @JsonKey(ignore: true) @override - $ReceiveAppsCopyWith get copyWith => - _$ReceiveAppsCopyWithImpl(this, _$identity); + _$ReceiveAppsCopyWith<_ReceiveApps> get copyWith => + __$ReceiveAppsCopyWithImpl<_ReceiveApps>(this, _$identity); @override @optionalTypeArgs @@ -745,6 +952,7 @@ class _$ReceiveApps implements ReceiveApps { required TResult Function() collapse, required TResult Function(Plugin plugin) openPage, required TResult Function(String name, String? desc) createApp, + required TResult Function(int fromIndex, int toIndex) moveApp, required TResult Function(Either, FlowyError> appsOrFail) didReceiveApps, }) { @@ -758,6 +966,7 @@ class _$ReceiveApps implements ReceiveApps { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, }) { return didReceiveApps?.call(appsOrFail); @@ -770,6 +979,7 @@ class _$ReceiveApps implements ReceiveApps { TResult Function()? collapse, TResult Function(Plugin plugin)? openPage, TResult Function(String name, String? desc)? createApp, + TResult Function(int fromIndex, int toIndex)? moveApp, TResult Function(Either, FlowyError> appsOrFail)? didReceiveApps, required TResult orElse(), }) { @@ -783,10 +993,11 @@ class _$ReceiveApps implements ReceiveApps { @optionalTypeArgs TResult map({ required TResult Function(_Initial value) initial, - required TResult Function(Collapse value) collapse, - required TResult Function(OpenPage value) openPage, - required TResult Function(CreateApp value) createApp, - required TResult Function(ReceiveApps value) didReceiveApps, + required TResult Function(_Collapse value) collapse, + required TResult Function(_OpenPage value) openPage, + required TResult Function(_CreateApp value) createApp, + required TResult Function(_MoveApp value) moveApp, + required TResult Function(_ReceiveApps value) didReceiveApps, }) { return didReceiveApps(this); } @@ -795,10 +1006,11 @@ class _$ReceiveApps implements ReceiveApps { @optionalTypeArgs TResult? mapOrNull({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, }) { return didReceiveApps?.call(this); } @@ -807,10 +1019,11 @@ class _$ReceiveApps implements ReceiveApps { @optionalTypeArgs TResult maybeMap({ TResult Function(_Initial value)? initial, - TResult Function(Collapse value)? collapse, - TResult Function(OpenPage value)? openPage, - TResult Function(CreateApp value)? createApp, - TResult Function(ReceiveApps value)? didReceiveApps, + TResult Function(_Collapse value)? collapse, + TResult Function(_OpenPage value)? openPage, + TResult Function(_CreateApp value)? createApp, + TResult Function(_MoveApp value)? moveApp, + TResult Function(_ReceiveApps value)? didReceiveApps, required TResult orElse(), }) { if (didReceiveApps != null) { @@ -820,14 +1033,14 @@ class _$ReceiveApps implements ReceiveApps { } } -abstract class ReceiveApps implements MenuEvent { - const factory ReceiveApps(Either, FlowyError> appsOrFail) = - _$ReceiveApps; +abstract class _ReceiveApps implements MenuEvent { + const factory _ReceiveApps(Either, FlowyError> appsOrFail) = + _$_ReceiveApps; Either, FlowyError> get appsOrFail => throw _privateConstructorUsedError; @JsonKey(ignore: true) - $ReceiveAppsCopyWith get copyWith => + _$ReceiveAppsCopyWith<_ReceiveApps> get copyWith => throw _privateConstructorUsedError; } @@ -837,7 +1050,7 @@ class _$MenuStateTearOff { _MenuState call( {required bool isCollapse, - required Option> apps, + required List apps, required Either successOrFailure, required Plugin plugin}) { return _MenuState( @@ -855,7 +1068,7 @@ const $MenuState = _$MenuStateTearOff(); /// @nodoc mixin _$MenuState { bool get isCollapse => throw _privateConstructorUsedError; - Option> get apps => throw _privateConstructorUsedError; + List get apps => throw _privateConstructorUsedError; Either get successOrFailure => throw _privateConstructorUsedError; Plugin get plugin => throw _privateConstructorUsedError; @@ -871,7 +1084,7 @@ abstract class $MenuStateCopyWith<$Res> { _$MenuStateCopyWithImpl<$Res>; $Res call( {bool isCollapse, - Option> apps, + List apps, Either successOrFailure, Plugin plugin}); } @@ -899,7 +1112,7 @@ class _$MenuStateCopyWithImpl<$Res> implements $MenuStateCopyWith<$Res> { apps: apps == freezed ? _value.apps : apps // ignore: cast_nullable_to_non_nullable - as Option>, + as List, successOrFailure: successOrFailure == freezed ? _value.successOrFailure : successOrFailure // ignore: cast_nullable_to_non_nullable @@ -920,7 +1133,7 @@ abstract class _$MenuStateCopyWith<$Res> implements $MenuStateCopyWith<$Res> { @override $Res call( {bool isCollapse, - Option> apps, + List apps, Either successOrFailure, Plugin plugin}); } @@ -949,7 +1162,7 @@ class __$MenuStateCopyWithImpl<$Res> extends _$MenuStateCopyWithImpl<$Res> apps: apps == freezed ? _value.apps : apps // ignore: cast_nullable_to_non_nullable - as Option>, + as List, successOrFailure: successOrFailure == freezed ? _value.successOrFailure : successOrFailure // ignore: cast_nullable_to_non_nullable @@ -974,7 +1187,7 @@ class _$_MenuState implements _MenuState { @override final bool isCollapse; @override - final Option> apps; + final List apps; @override final Either successOrFailure; @override @@ -1018,14 +1231,14 @@ class _$_MenuState implements _MenuState { abstract class _MenuState implements MenuState { const factory _MenuState( {required bool isCollapse, - required Option> apps, + required List apps, required Either successOrFailure, required Plugin plugin}) = _$_MenuState; @override bool get isCollapse => throw _privateConstructorUsedError; @override - Option> get apps => throw _privateConstructorUsedError; + List get apps => throw _privateConstructorUsedError; @override Either get successOrFailure => throw _privateConstructorUsedError; diff --git a/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart b/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart index e12b8174e5..fc3e05e629 100644 --- a/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart +++ b/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart @@ -1,15 +1,21 @@ import 'dart:async'; + import 'package:dartz/dartz.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart'; -import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart'; -import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart' show MoveFolderItemPayload, MoveItemType; -import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart' show MoveFolderItemPayload, MoveFolderItemType; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; + import 'package:app_flowy/generated/locale_keys.g.dart'; class WorkspaceService { - Future> createApp({required String workspaceId, required String name, required String desc}) { + final String workspaceId; + WorkspaceService({ + required this.workspaceId, + }); + Future> createApp({required String name, required String desc}) { final payload = CreateAppPayload.create() ..name = name ..workspaceId = workspaceId @@ -17,7 +23,7 @@ class WorkspaceService { return FolderEventCreateApp(payload).send(); } - Future> getWorkspace({required String workspaceId}) { + Future> getWorkspace() { final payload = WorkspaceId.create()..value = workspaceId; return FolderEventReadWorkspaces(payload).send().then((result) { return result.fold( @@ -35,7 +41,7 @@ class WorkspaceService { }); } - Future, FlowyError>> getApps({required String workspaceId}) { + Future, FlowyError>> getApps() { final payload = WorkspaceId.create()..value = workspaceId; return FolderEventReadWorkspaceApps(payload).send().then((result) { return result.fold( @@ -54,7 +60,7 @@ class WorkspaceService { ..itemId = appId ..from = fromIndex ..to = toIndex - ..ty = MoveItemType.MoveApp; + ..ty = MoveFolderItemType.MoveApp; return FolderEventMoveItem(payload).send(); } diff --git a/frontend/app_flowy/lib/workspace/presentation/home/menu/menu.dart b/frontend/app_flowy/lib/workspace/presentation/home/menu/menu.dart index 49959ce0ce..b8c116a45a 100644 --- a/frontend/app_flowy/lib/workspace/presentation/home/menu/menu.dart +++ b/frontend/app_flowy/lib/workspace/presentation/home/menu/menu.dart @@ -26,7 +26,7 @@ import 'app/menu_app.dart'; import 'app/create_button.dart'; import 'menu_user.dart'; -class HomeMenu extends StatefulWidget { +class HomeMenu extends StatelessWidget { final PublishNotifier _collapsedNotifier; final UserProfile user; final CurrentWorkspaceSetting workspaceSetting; @@ -39,22 +39,13 @@ class HomeMenu extends StatefulWidget { }) : _collapsedNotifier = collapsedNotifier, super(key: key); - @override - State createState() => _HomeMenuState(); -} - -class _HomeMenuState extends State { - /// Maps the hashmap of the menu items to their index in reorderable list view. - //TODO @gaganyadav80: Retain this map to persist on app restarts. - final Map _menuItemIndex = {}; - @override Widget build(BuildContext context) { return MultiBlocProvider( providers: [ BlocProvider( create: (context) { - final menuBloc = getIt(param1: widget.user, param2: widget.workspaceSetting.workspace.id); + final menuBloc = getIt(param1: user, param2: workspaceSetting.workspace.id); menuBloc.add(const MenuEvent.initial()); return menuBloc; }, @@ -71,7 +62,7 @@ class _HomeMenuState extends State { BlocListener( listenWhen: (p, c) => p.isCollapse != c.isCollapse, listener: (context, state) { - widget._collapsedNotifier.value = state.isCollapse; + _collapsedNotifier.value = state.isCollapse; }, ) ], @@ -101,7 +92,7 @@ class _HomeMenuState extends State { ).padding(horizontal: Insets.l), ), const VSpace(20), - _renderTrash(context).padding(horizontal: Insets.l), + const MenuTrash().padding(horizontal: Insets.l), const VSpace(20), _renderNewAppButton(context), ], @@ -116,56 +107,18 @@ class _HomeMenuState extends State { child: ScrollConfiguration( behavior: const ScrollBehavior().copyWith(scrollbars: false), child: BlocSelector>( - selector: (state) { - List menuItems = []; - // menuItems.add(MenuUser(user)); - List appWidgets = - state.apps.foldRight([], (apps, _) => apps.map((app) => MenuApp(app)).toList()); - // menuItems.addAll(appWidgets); - for (int i = 0; i < appWidgets.length; i++) { - if (_menuItemIndex[appWidgets[i].key.hashCode] == null) { - _menuItemIndex[appWidgets[i].key.hashCode] = i; - } - - menuItems.insert(_menuItemIndex[appWidgets[i].key.hashCode]!, appWidgets[i]); - } - - return menuItems; - }, + selector: (state) => state.apps.map((app) => MenuApp(app)).toList(), builder: (context, menuItems) { return ReorderableListView.builder( itemCount: menuItems.length, buildDefaultDragHandles: false, header: Padding( padding: EdgeInsets.only(bottom: 20.0 - MenuAppSizes.appVPadding), - child: MenuUser(widget.user), + child: MenuUser(user), ), - onReorder: (oldIndex, newIndex) { - int index = newIndex > oldIndex ? newIndex - 1 : newIndex; - - Widget menu = menuItems.removeAt(oldIndex); - menuItems.insert(index, menu); - - final menuBloc = context.read(); - menuBloc.state.apps.forEach((a) { - var app = a.removeAt(oldIndex); - a.insert(index, app); - }); - - _menuItemIndex[menu.key.hashCode] = index; - }, + onReorder: (oldIndex, newIndex) => context.read().add(MenuEvent.moveApp(oldIndex, newIndex)), physics: StyledScrollPhysics(), itemBuilder: (BuildContext context, int index) { - //? @gaganyadav80: To mimic the ListView.separated behavior, we need to add a padding. - // EdgeInsets padding = EdgeInsets.zero; - // if (index == 0) { - // padding = EdgeInsets.only(bottom: MenuAppSizes.appVPadding / 2); - // } else if (index == menuItems.length - 1) { - // padding = EdgeInsets.only(top: MenuAppSizes.appVPadding / 2); - // } else { - // padding = EdgeInsets.symmetric(vertical: MenuAppSizes.appVPadding / 2); - // } - return ReorderableDragStartListener( key: ValueKey(menuItems[index].hashCode), index: index, @@ -183,10 +136,6 @@ class _HomeMenuState extends State { ); } - Widget _renderTrash(BuildContext context) { - return const MenuTrash(); - } - Widget _renderNewAppButton(BuildContext context) { return NewAppButton( press: (appName) => context.read().add(MenuEvent.createApp(appName, desc: "")), diff --git a/shared-lib/flowy-sync/src/client_folder/folder_pad.rs b/shared-lib/flowy-sync/src/client_folder/folder_pad.rs index a45462e01b..f1eb3aba5d 100644 --- a/shared-lib/flowy-sync/src/client_folder/folder_pad.rs +++ b/shared-lib/flowy-sync/src/client_folder/folder_pad.rs @@ -169,6 +169,21 @@ impl FolderPad { }) } + #[tracing::instrument(level = "trace", skip(self), err)] + pub fn move_app(&mut self, app_id: &str, _from: usize, to: usize) -> CollaborateResult> { + let app = self.read_app(app_id)?; + self.with_workspace(&app.workspace_id, |workspace| { + match workspace.apps.iter().position(|app| app.id == app_id) { + None => Ok(None), + Some(index) => { + let app = workspace.apps.remove(index); + workspace.apps.insert(to, app); + Ok(Some(())) + } + } + }) + } + #[tracing::instrument(level = "trace", skip(self), fields(view_name=%view.name), err)] pub fn create_view(&mut self, view: View) -> CollaborateResult> { let app_id = view.belong_to_id.clone();