import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:pshared/provider/recipient/provider.dart'; import 'package:pweb/app/router/pages.dart'; import 'package:pweb/app/router/payout_routes.dart'; import 'package:pweb/pages/address_book/form/page.dart'; import 'package:pweb/pages/address_book/page/page.dart'; import 'package:pweb/pages/dashboard/dashboard.dart'; import 'package:pweb/pages/payment_methods/page.dart'; import 'package:pweb/pages/payout_page/page.dart'; import 'package:pweb/pages/payout_page/wallet/edit/page.dart'; import 'package:pweb/pages/report/page.dart'; import 'package:pweb/pages/settings/profile/page.dart'; import 'package:pweb/pages/wallet_top_up/page.dart'; import 'package:pweb/providers/page_selector.dart'; import 'package:pweb/widgets/error/snackbar.dart'; import 'package:pweb/widgets/sidebar/destinations.dart'; import 'package:pweb/widgets/sidebar/page.dart'; import 'package:pweb/generated/i18n/app_localizations.dart'; RouteBase payoutShellRoute() => ShellRoute( builder: (context, state, child) => PageSelector( child: child, routerState: state, ), routes: [ GoRoute( name: PayoutRoutes.dashboard, path: routerPage(Pages.dashboard), pageBuilder: (context, _) => NoTransitionPage( child: DashboardPage( onRecipientSelected: (recipient) => context .read() .selectRecipient(context, recipient), onGoToPaymentWithoutRecipient: (type) => context .read() .startPaymentWithoutRecipient(context, type), onTopUp: (wallet) => context .read() .openWalletTopUp(context, wallet), ), ), ), GoRoute( name: PayoutRoutes.recipients, path: PayoutRoutes.recipientsPath, pageBuilder: (context, _) { final loc = AppLocalizations.of(context)!; return NoTransitionPage( child: RecipientAddressBookPage( onRecipientSelected: (recipient) => context .read() .selectRecipient(context, recipient, fromList: true), onAddRecipient: () => context .read() .goToAddRecipient(context), onEditRecipient: (recipient) => context .read() .editRecipient(context, recipient, fromList: true), onDeleteRecipient: (recipient) => executeActionWithNotification( context: context, action: () async => context.read().delete(recipient.id), successMessage: loc.recipientDeletedSuccessfully, errorMessage: loc.errorDeleteRecipient, ), ), ); }, ), GoRoute( name: PayoutRoutes.addRecipient, path: PayoutRoutes.addRecipientPath, pageBuilder: (context, _) { final selector = context.read(); final recipient = selector.recipientProvider.currentObject; return NoTransitionPage( child: AdressBookRecipientForm( recipient: recipient, onSaved: (_) => selector.selectPage( context, PayoutDestination.recipients, ), ), ); }, ), GoRoute( name: PayoutRoutes.payment, path: PayoutRoutes.paymentPath, pageBuilder: (context, _) => NoTransitionPage( child: PaymentPage( onBack: (_) => context .read() .goBackFromPayment(context), ), ), ), GoRoute( name: PayoutRoutes.settings, path: PayoutRoutes.settingsPath, pageBuilder: (_, __) => const NoTransitionPage( child: ProfileSettingsPage(), ), ), GoRoute( name: PayoutRoutes.reports, path: PayoutRoutes.reportsPath, pageBuilder: (_, __) => const NoTransitionPage( child: OperationHistoryPage(), ), ), GoRoute( name: PayoutRoutes.methods, path: PayoutRoutes.methodsPath, pageBuilder: (context, _) => NoTransitionPage( child: PaymentConfigPage( onWalletTap: (wallet) => context .read() .selectWallet(context, wallet), ), ), ), GoRoute( name: PayoutRoutes.editWallet, path: PayoutRoutes.editWalletPath, pageBuilder: (context, _) { final provider = context.read(); final wallet = provider.walletsProvider.selectedWallet; final loc = AppLocalizations.of(context)!; return NoTransitionPage( child: wallet != null ? WalletEditPage( onBack: () => provider.goBackFromWalletEdit(context), ) : Center(child: Text(loc.noWalletSelected)), ); }, ), GoRoute( name: PayoutRoutes.walletTopUp, path: PayoutRoutes.walletTopUpPath, pageBuilder: (context, _) => NoTransitionPage( child: WalletTopUpPage( onBack: () => context .read() .goBackFromWalletTopUp(context), ), ), ), ], );