[client] Update url on web

This commit is contained in:
Abhishek Shroff
2024-09-11 00:33:42 +05:30
parent 8100bc3f92
commit 3d0c4c9035
7 changed files with 59 additions and 43 deletions
+24 -15
View File
@@ -7,29 +7,18 @@ import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/ui/app/app_layout.dart';
import 'package:provider/provider.dart';
final _router = GoRouter(
routes: [
GoRoute(
name: 'home',
path: '/',
builder: (context, state) => const AppScaffold(),
),
],
);
class PhylumApp extends StatelessWidget {
final String accountId;
final PhylumAccount account;
PhylumApp({required this.accountId}) : super(key: ValueKey(accountId));
PhylumApp({required this.account}) : super(key: ValueKey(account.id));
@override
Widget build(BuildContext context) {
final account = context.select<AccountManagerState<PhylumAccount>, PhylumAccount?>((state) => state.accounts[accountId]);
if (account == null) return Container();
return MultiProvider(
providers: [
Provider.value(value: account),
StateNotifierProvider<ApiActionQueue, ApiActionQueueState>.value(value: account.actionQueue),
// StateNotifierProvider<NavHistoryManager, NavHistoryState>.value(value: routerConfig.historyManager),
],
child: MaterialApp.router(
key: ValueKey(account),
@@ -37,9 +26,29 @@ class PhylumApp extends StatelessWidget {
debugShowCheckedModeBanner: false,
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.orange)),
darkTheme: ThemeData.dark(),
routerConfig: _router,
routerConfig: createRouter(account),
shortcuts: getAppShortcuts(),
),
);
}
GoRouter createRouter(PhylumAccount account) => GoRouter(
routes: [
GoRoute(
name: 'root',
path: '/',
redirect: (context, state) => '/home',
),
GoRoute(
name: 'home',
path: '/home',
pageBuilder: (context, state) => NoTransitionPage(child: AppScaffold(folderId: account.userHome)),
),
GoRoute(
name: 'folder',
path: '/folders/:id',
pageBuilder: (context, state) => NoTransitionPage(child: AppScaffold(folderId: state.pathParameters['id']!)),
),
],
);
}
+3 -2
View File
@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -99,7 +100,7 @@ Map<ShortcutActivator, Intent> getAppShortcuts() {
// Top-level Navigation
SingleActivator(LogicalKeyboardKey.arrowUp, alt: true): NavUpIntent(),
SingleActivator(LogicalKeyboardKey.arrowLeft, alt: true): NavBackIntent(),
SingleActivator(LogicalKeyboardKey.arrowRight, alt: true): NavForwardIntent(),
if (!kIsWeb) SingleActivator(LogicalKeyboardKey.arrowLeft, alt: true): NavBackIntent(),
if (!kIsWeb) SingleActivator(LogicalKeyboardKey.arrowRight, alt: true): NavForwardIntent(),
};
}
+1 -1
View File
@@ -71,7 +71,7 @@ class AccountSelector extends StatelessWidget {
if (account == null) {
return buildLoginPage(context);
}
return PhylumApp(accountId: account.id);
return PhylumApp(account: account);
});
Widget buildLoginPage(BuildContext context) => MaterialApp(
+13 -10
View File
@@ -1,49 +1,52 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:phylum/app_shortcuts.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/ui/app/app_layout.dart';
import 'package:phylum/ui/app/nav_history.dart';
import 'package:phylum/util/upload_utils.dart';
import 'package:provider/provider.dart';
class AppActions extends StatelessWidget {
const AppActions({super.key});
final Widget child;
const AppActions({super.key, required this.child});
@override
Widget build(BuildContext context) {
return Actions(
actions: {
NewFolderIntent: CallbackAction<NewFolderIntent>(onInvoke: (intent) {
final folderId = context.read<NavHistoryState>().folderId;
final folderId = context.read<CurrentLocation>().folderId;
return createDirectory(context, folderId);
}),
UploadFilesIntent: CallbackAction<UploadFilesIntent>(onInvoke: (intent) {
final folderId = context.read<NavHistoryState>().folderId;
final folderId = context.read<CurrentLocation>().folderId;
return pickAndUploadFiles(context, folderId);
}),
UploadFolderIntent: CallbackAction<UploadFolderIntent>(onInvoke: (intent) {
final folderId = context.read<NavHistoryState>().folderId;
final folderId = context.read<CurrentLocation>().folderId;
return pickAndUploadDirectory(context, folderId);
}),
NavUpIntent: CallbackAction<NavUpIntent>(onInvoke: (i) async {
final folderId = context.read<NavHistoryState>().folderId;
final folderId = context.read<CurrentLocation>().folderId;
final r = await context.read<PhylumAccount>().resourceRepository.getResource(folderId);
final parent = r?.parent;
if (parent != null && context.mounted) {
context.read<NavHistoryManager>().go(parent);
context.goNamed('folder', pathParameters: {'id': parent});
}
return null;
}),
NavBackIntent: CallbackAction<NavBackIntent>(onInvoke: (i) {
context.read<NavHistoryManager>().goBack();
if (context.canPop()) {
context.pop();
}
return null;
}),
NavForwardIntent: CallbackAction<NavForwardIntent>(onInvoke: (i) {
context.read<NavHistoryManager>().goForward();
// context.read<NavHistoryManager>().goForward();
return null;
}),
},
child: const AppLayout(),
child: child,
);
}
}
+14 -8
View File
@@ -1,23 +1,29 @@
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/common/expandable_fab.dart';
import 'package:phylum/ui/app/nav_list.dart';
import 'package:phylum/ui/folder/folder_view.dart';
import 'package:phylum/ui/app/nav_history.dart';
import 'package:provider/provider.dart';
class CurrentLocation {
final String folderId;
CurrentLocation({required this.folderId});
}
class AppScaffold extends StatelessWidget {
final String? initialDirectory;
const AppScaffold({super.key, this.initialDirectory});
final String folderId;
const AppScaffold({super.key, required this.folderId});
@override
Widget build(BuildContext context) {
return StateNotifierProvider<NavHistoryManager, NavHistoryState>(
create: (context) => NavHistoryManager(initialDirectory ?? context.read<PhylumAccount>().userHome),
builder: (context, child) => const AppActions(),
return Provider<CurrentLocation>(
key: ValueKey(folderId),
create: (context) => CurrentLocation(folderId: folderId),
builder: (context, child) => AppActions(child: child!),
child: const AppLayout(),
);
}
}
@@ -3,6 +3,7 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:phylum/app_shortcuts.dart';
import 'package:phylum/libphylum/actions/action_resource_delete.dart';
import 'package:phylum/libphylum/actions/action_resource_move.dart';
@@ -10,7 +11,6 @@ import 'package:phylum/libphylum/db/db.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/ui/folder/folder_selection_manager.dart';
import 'package:phylum/ui/folder/resource_details_row.dart';
import 'package:phylum/ui/app/nav_history.dart';
import 'package:phylum/util/upload_utils.dart';
import 'package:phylum/util/dialogs.dart';
import 'package:provider/provider.dart';
@@ -244,7 +244,7 @@ class _FolderContentsViewState extends State<FolderContentsView> {
}
void open(Resource r) {
if (r.dir) context.read<NavHistoryManager>().go(r.id);
if (r.dir) context.goNamed('folder', pathParameters: {'id': r.id});
}
void deleteSelected() async {
+2 -5
View File
@@ -4,10 +4,10 @@ import 'package:flutter/material.dart';
import 'package:flutter_state_notifier/flutter_state_notifier.dart';
import 'package:phylum/libphylum/db/db.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/ui/app/app_layout.dart';
import 'package:phylum/ui/folder/folder_contents_view.dart';
import 'package:phylum/ui/folder/folder_empty_view.dart';
import 'package:phylum/ui/folder/folder_selection_manager.dart';
import 'package:phylum/ui/app/nav_history.dart';
import 'package:provider/provider.dart';
class FolderView extends StatelessWidget {
@@ -39,10 +39,7 @@ class FolderWatcher extends StatelessWidget {
const FolderWatcher({super.key});
@override
Widget build(BuildContext context) {
final folderId = context.select<NavHistoryState, String>((s) => s.folderId);
return FolderContentsListener(id: folderId);
}
Widget build(BuildContext context) => FolderContentsListener(id: context.watch<CurrentLocation>().folderId);
}
class FolderContentsListener extends StatefulWidget {