From 95a7e8fa19b633f5b48f1329f628d4654c2beef1 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Fri, 27 Jun 2025 19:57:04 +0530 Subject: [PATCH] [client] Build pages from routes --- client/lib/ui/app/account_selector_vm.dart | 22 +-------------- client/lib/ui/app/account_selector_web.dart | 30 +------------------- client/lib/ui/app/routes.dart | 31 +++++++++++++++++++++ 3 files changed, 33 insertions(+), 50 deletions(-) diff --git a/client/lib/ui/app/account_selector_vm.dart b/client/lib/ui/app/account_selector_vm.dart index 08d0e9f4..e3d50541 100644 --- a/client/lib/ui/app/account_selector_vm.dart +++ b/client/lib/ui/app/account_selector_vm.dart @@ -3,10 +3,6 @@ import 'package:offtheline/offtheline.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/app/dialog_scaffold.dart'; import 'package:phylum/ui/app/router.dart'; -import 'package:phylum/ui/app/routes.dart'; -import 'package:phylum/ui/login/login_page.dart'; -import 'package:phylum/ui/layout/app_layout.dart'; -import 'package:phylum/ui/login/reset_password_page.dart'; import 'package:phylum/util/dialogs.dart'; import 'package:provider/provider.dart'; @@ -80,22 +76,6 @@ class _AccountSelectorState extends State { ); } - final route = context.select((state) => - state.currentConfiguration is ResetPasswordRoute ? state.currentConfiguration as ResetPasswordRoute : null); - if (route != null) { - return ResetPasswordPage( - instanceUrl: route.instanceUri, - email: route.email, - token: route.token, - ); - } - - final account = - context.select, PhylumAccount?>((state) => state.selectedAccount); - - if (account == null) { - return const LoginPage(); - } - return AppLayout.create(account); + return context.watch().currentConfiguration?.buildPage(context) ?? Container(); } } diff --git a/client/lib/ui/app/account_selector_web.dart b/client/lib/ui/app/account_selector_web.dart index 93dd682f..2a9a65b1 100644 --- a/client/lib/ui/app/account_selector_web.dart +++ b/client/lib/ui/app/account_selector_web.dart @@ -2,16 +2,11 @@ import 'dart:async'; import 'dart:js_interop'; import 'dart:math'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:offtheline/offtheline.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/app/dialog_scaffold.dart'; -import 'package:phylum/ui/app/routes.dart'; import 'package:phylum/ui/app/router.dart'; -import 'package:phylum/ui/login/login_page.dart'; -import 'package:phylum/ui/layout/app_layout.dart'; -import 'package:phylum/ui/login/reset_password_page.dart'; import 'package:phylum/util/dialogs.dart'; import 'package:phylum/util/logging.dart'; import 'package:provider/provider.dart'; @@ -125,30 +120,7 @@ class _AccountSelectorState extends State { ); } - final resetRoute = context.select((state) => - state.currentConfiguration is ResetPasswordRoute ? state.currentConfiguration as ResetPasswordRoute : null); - if (resetRoute != null) { - return ResetPasswordPage( - instanceUrl: resetRoute.instanceUri, - email: resetRoute.email, - token: resetRoute.token, - ); - } - - final oauthLoginRoute = context.select((state) { - return state.currentConfiguration is OAuthLoginRoute ? state.currentConfiguration as OAuthLoginRoute : null; - }); - if (oauthLoginRoute != null) { - print('Code: ${oauthLoginRoute.code}'); - } - - final account = - context.select, PhylumAccount?>((state) => state.selectedAccount); - - if (account == null) { - return kDebugMode ? const LoginPage() : LoginPage(fixedInstanceUrl: Uri()); - } - return AppLayout.create(account); + return context.watch().currentConfiguration?.buildPage(context) ?? Container(); } void requestHandoff() { diff --git a/client/lib/ui/app/routes.dart b/client/lib/ui/app/routes.dart index a5cfdc5e..ab9ffc50 100644 --- a/client/lib/ui/app/routes.dart +++ b/client/lib/ui/app/routes.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:offtheline/offtheline.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/db/resource_helpers.dart'; @@ -7,11 +9,17 @@ import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/libphylum/requests/search_request.dart'; import 'package:phylum/libphylum/requests/shared_resources_request.dart'; import 'package:phylum/libphylum/responses/responses.dart'; +import 'package:phylum/ui/layout/app_layout.dart'; +import 'package:phylum/ui/login/login_page.dart'; +import 'package:phylum/ui/login/reset_password_page.dart'; +import 'package:provider/provider.dart'; sealed class PhylumRoute { Uri get uri; const PhylumRoute(); + + Widget buildPage(BuildContext context); } class OAuthLoginRoute extends PhylumRoute { @@ -21,6 +29,11 @@ class OAuthLoginRoute extends PhylumRoute { @override Uri get uri => Uri(path: '/login/oauth'); + + @override + Widget buildPage(BuildContext context) { + return const LoginPage(); + } } class ResetPasswordRoute extends PhylumRoute { @@ -32,6 +45,13 @@ class ResetPasswordRoute extends PhylumRoute { @override Uri get uri => Uri(path: '/reset_password'); + + @override + Widget buildPage(BuildContext context) => ResetPasswordPage( + instanceUrl: instanceUri, + email: email, + token: token, + ); } sealed class ExplorerRoute extends PhylumRoute { @@ -44,6 +64,17 @@ sealed class ExplorerRoute extends PhylumRoute { Future refresh(PhylumAccount account); Stream> items(PhylumAccount account); + + @override + Widget buildPage(BuildContext context) { + final account = + context.select, PhylumAccount?>((state) => state.selectedAccount); + + if (account == null) { + return kDebugMode ? const LoginPage() : LoginPage(fixedInstanceUrl: Uri()); + } + return AppLayout.create(account); + } } class ExplorerRouteHome extends ExplorerRouteFolder {