import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/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/payout_page/page.dart'; import 'package:pweb/pages/payout_page/wallet/edit/page.dart'; import 'package:pweb/pages/payment_methods/page.dart'; import 'package:pweb/pages/report/page.dart'; import 'package:pweb/pages/settings/profile/page.dart'; import 'package:pweb/providers/page_selector.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( pageBuilder: (context, state, child) => NoTransitionPage( child: PageSelector( selected: payoutDestinationFromLocation(state.uri.toString()), child: child, ), ), routes: [ GoRoute( name: Pages.dashboard.name, path: routerPage(Pages.dashboard), pageBuilder: (context, state) { final selector = context.read(); return NoTransitionPage( child: DashboardPage( onRecipientSelected: (recipient) { selector.selectRecipient(recipient); context.go(payoutPath(PayoutDestination.payment)); }, onGoToPaymentWithoutRecipient: (type) { selector.startPaymentWithoutRecipient(type); context.go(payoutPath(PayoutDestination.payment)); }, ), ); }, ), GoRoute( name: 'payoutRecipients', path: payoutPath(PayoutDestination.recipients), pageBuilder: (context, state) { final selector = context.read(); return NoTransitionPage( child: RecipientAddressBookPage( onRecipientSelected: (recipient) { selector.selectRecipient(recipient, fromList: true); context.go(payoutPath(PayoutDestination.payment)); }, onAddRecipient: () { selector.goToAddRecipient(); context.go(payoutPath(PayoutDestination.addrecipient)); }, onEditRecipient: (recipient) { selector.editRecipient(recipient, fromList: true); context.go(payoutPath(PayoutDestination.addrecipient)); }, ), ); }, ), GoRoute( name: 'payoutAddRecipient', path: payoutPath(PayoutDestination.addrecipient), pageBuilder: (context, state) { final selector = context.read(); final recipient = selector.recipientProvider?.selectedRecipient; return NoTransitionPage( child: AdressBookRecipientForm( recipient: recipient, onSaved: (_) { selector.selectPage(PayoutDestination.recipients); context.go(payoutPath(PayoutDestination.recipients)); }, ), ); }, ), GoRoute( name: 'payoutPayment', path: payoutPath(PayoutDestination.payment), pageBuilder: (context, state) { final selector = context.read(); return NoTransitionPage( child: PaymentPage( onBack: (_) { final destination = selector.goBackFromPayment(); context.go(payoutPath(destination)); }, ), ); }, ), GoRoute( name: 'payoutSettings', path: payoutPath(PayoutDestination.settings), pageBuilder: (context, state) => NoTransitionPage( child: const ProfileSettingsPage(), ), ), GoRoute( name: 'payoutReports', path: payoutPath(PayoutDestination.reports), pageBuilder: (context, state) => NoTransitionPage( child: const OperationHistoryPage(), ), ), GoRoute( name: 'payoutMethods', path: payoutPath(PayoutDestination.methods), pageBuilder: (context, state) { final selector = context.read(); return NoTransitionPage( child: PaymentConfigPage( onWalletTap: (wallet) { selector.selectWallet(wallet); context.go(payoutPath(PayoutDestination.editwallet)); }, ), ); }, ), GoRoute( name: 'payoutEditWallet', path: payoutPath(PayoutDestination.editwallet), pageBuilder: (context, state) { final selector = context.read(); final wallet = selector.walletsProvider?.selectedWallet; if (wallet == null) { final loc = AppLocalizations.of(context)!; return NoTransitionPage( child: Center(child: Text(loc.noWalletSelected)), ); } return NoTransitionPage( child: WalletEditPage( onBack: () { selector.goBackFromWalletEdit(); context.go(payoutPath(PayoutDestination.methods)); }, ), ); }, ), ], );