mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-05 02:59:57 -06:00
[client] Move SelectionMode to navigation package
This commit is contained in:
@@ -1,23 +1,17 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
enum SelectionMode {
|
||||
single,
|
||||
range,
|
||||
toggle,
|
||||
add,
|
||||
noChange,
|
||||
none,
|
||||
}
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
|
||||
class FocusUpIntent extends Intent {
|
||||
final SelectionMode mode;
|
||||
|
||||
const FocusUpIntent(this.mode);
|
||||
}
|
||||
|
||||
class FocusDownIntent extends Intent {
|
||||
final SelectionMode mode;
|
||||
|
||||
const FocusDownIntent(this.mode);
|
||||
}
|
||||
|
||||
@@ -31,6 +25,7 @@ class SelectAllIntent extends Intent {
|
||||
|
||||
class CopyToClipboardIntent extends Intent {
|
||||
final bool cut;
|
||||
|
||||
const CopyToClipboardIntent(this.cut);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,21 +45,21 @@ class AppActions extends StatelessWidget {
|
||||
NavUpIntent: CallbackAction<NavUpIntent>(onInvoke: (i) async {
|
||||
final parent = context.read<ExplorerState>().folder?.parent;
|
||||
if (parent != null) {
|
||||
context.read<NavHistoryManager>().go(context, NavDestinationFolder(folderId: parent));
|
||||
context.read<NavHistoryManager>().go(NavDestinationFolder(folderId: parent));
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
NavHomeIntent: CallbackAction<NavHomeIntent>(
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().go(context, NavDestinationFolder(folderId: context.read<PhylumAccount>().userHome)),
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().go(NavDestinationFolder(folderId: context.read<PhylumAccount>().userHome)),
|
||||
),
|
||||
NavToFolderIntent: CallbackAction<NavToFolderIntent>(
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().go(context, NavDestinationFolder(folderId: i.folderId)),
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().go(NavDestinationFolder(folderId: i.folderId)),
|
||||
),
|
||||
NavBackIntent: CallbackAction<NavBackIntent>(
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().goBack(context),
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().goBack(),
|
||||
),
|
||||
NavForwardIntent: CallbackAction<NavForwardIntent>(
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().goForward(context),
|
||||
onInvoke: (i) => context.read<NavHistoryManager>().goForward(),
|
||||
),
|
||||
},
|
||||
child: child,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_state_notifier/flutter_state_notifier.dart';
|
||||
import 'package:phylum/app_shortcuts.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/ui/app/app_actions.dart';
|
||||
import 'package:phylum/ui/app/fab_action.dart';
|
||||
@@ -12,6 +11,7 @@ import 'package:phylum/ui/navigation/explorer_controller.dart';
|
||||
import 'package:phylum/ui/explorer/path_view.dart';
|
||||
import 'package:phylum/ui/explorer/resource_drop_and_drop.dart';
|
||||
import 'package:phylum/ui/explorer/resource_info_view.dart';
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class AppLayout extends StatefulWidget {
|
||||
@@ -27,7 +27,7 @@ class _AppLayoutState extends State<AppLayout> {
|
||||
@override
|
||||
void didUpdateWidget(covariant AppLayout oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
context.read<NavHistoryManager>().handleDestinationChange(widget.destination);
|
||||
context.read<NavHistoryManager>().go(widget.destination);
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/ui/navigation/destination.dart';
|
||||
import 'package:phylum/ui/navigation/explorer_controller.dart';
|
||||
import 'package:phylum/ui/explorer/resource_icon_extension.dart';
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
import 'package:phylum/util/upload_utils.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:phylum/libphylum/actions/action_resource_move.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/ui/explorer/paste_action_handler.dart';
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
import 'package:phylum/ui/preview/resource_preview.dart';
|
||||
import 'package:phylum/util/dialogs.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:phylum/app_shortcuts.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/ui/navigation/explorer_controller.dart';
|
||||
import 'package:phylum/ui/menu/menu_option.dart';
|
||||
import 'package:phylum/ui/menu/option_groups.dart';
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ExplorerGestureHandler extends StatelessWidget {
|
||||
|
||||
@@ -3,13 +3,13 @@ import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:phylum/app_shortcuts.dart';
|
||||
import 'package:phylum/libphylum/actions/action_resource_move.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/ui/navigation/explorer_controller.dart';
|
||||
import 'package:phylum/ui/explorer/resource_details_row.dart';
|
||||
import 'package:phylum/ui/explorer/resource_icon_extension.dart';
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
import 'package:phylum/util/upload_utils.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:super_drag_and_drop/super_drag_and_drop.dart';
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:phylum/app_shortcuts.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/ui/navigation/explorer_controller.dart';
|
||||
import 'package:phylum/ui/explorer/resource_drop_and_drop.dart';
|
||||
import 'package:phylum/ui/menu/menu_option.dart';
|
||||
import 'package:phylum/ui/menu/option_groups.dart';
|
||||
import 'package:phylum/ui/navigation/selection_mode.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ResourceItemGestureHandler extends StatefulWidget {
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
|
||||
sealed class NavDestination {
|
||||
const NavDestination();
|
||||
|
||||
void go(BuildContext context);
|
||||
|
||||
Future<bool> refresh(PhylumAccount account);
|
||||
|
||||
Stream<Resource?> watchResource(PhylumAccount account);
|
||||
@@ -22,11 +18,6 @@ class NavDestinationFolder extends NavDestination {
|
||||
|
||||
NavDestinationFolder({required this.folderId});
|
||||
|
||||
@override
|
||||
void go(BuildContext context) {
|
||||
context.goNamed('folder', pathParameters: {'id': folderId});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> refresh(PhylumAccount account) {
|
||||
return account.resourceRepository.requestResource(folderId).then((result) => result.success);
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import 'dart:async';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:phylum/app_shortcuts.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:state_notifier/state_notifier.dart';
|
||||
|
||||
import 'destination.dart';
|
||||
import 'history_manager.dart';
|
||||
import 'selection_mode.dart';
|
||||
|
||||
class ExplorerState {
|
||||
final NavDestination destination;
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:phylum/ui/navigation/destination.dart';
|
||||
import 'package:state_notifier/state_notifier.dart';
|
||||
|
||||
import 'destination.dart';
|
||||
|
||||
class NavHistoryState {
|
||||
final NavDestination current;
|
||||
final List<NavDestination> _back;
|
||||
@@ -30,10 +29,8 @@ class NavHistoryState {
|
||||
class NavHistoryManager extends StateNotifier<NavHistoryState> {
|
||||
NavHistoryManager(NavDestination destination) : super(NavHistoryState(current: destination));
|
||||
|
||||
void go(BuildContext context, NavDestination destination) {
|
||||
if (kIsWeb) {
|
||||
destination.go(context);
|
||||
} else {
|
||||
void go(NavDestination destination) {
|
||||
if (state.current != destination) {
|
||||
state = NavHistoryState(
|
||||
current: destination,
|
||||
back: [...state._back, state.current],
|
||||
@@ -42,22 +39,7 @@ class NavHistoryManager extends StateNotifier<NavHistoryState> {
|
||||
}
|
||||
}
|
||||
|
||||
void handleDestinationChange(NavDestination destination) {
|
||||
if (kIsWeb) {
|
||||
state = NavHistoryState(
|
||||
current: destination,
|
||||
);
|
||||
} else if (destination != state.current) {
|
||||
// For handling deep links
|
||||
state = NavHistoryState(
|
||||
current: destination,
|
||||
back: [...state._back, state.current],
|
||||
forward: const [],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void goBack(BuildContext context) {
|
||||
void goBack() {
|
||||
if (!state.canGoBack) return;
|
||||
int len = state._back.length;
|
||||
final target = state._back[len - 1];
|
||||
@@ -68,7 +50,7 @@ class NavHistoryManager extends StateNotifier<NavHistoryState> {
|
||||
);
|
||||
}
|
||||
|
||||
void goForward(BuildContext context) {
|
||||
void goForward() {
|
||||
if (!state.canGoForward) return;
|
||||
int len = state._forward.length;
|
||||
final target = state._forward[len - 1];
|
||||
|
||||
8
client/lib/ui/navigation/selection_mode.dart
Normal file
8
client/lib/ui/navigation/selection_mode.dart
Normal file
@@ -0,0 +1,8 @@
|
||||
enum SelectionMode {
|
||||
single,
|
||||
range,
|
||||
toggle,
|
||||
add,
|
||||
noChange,
|
||||
none,
|
||||
}
|
||||
Reference in New Issue
Block a user