redesigned payment page + a lot of fixes

This commit is contained in:
Arseni
2026-02-21 21:55:20 +03:00
parent a68aa2abff
commit 0c6fa03aba
208 changed files with 4062 additions and 2217 deletions

View File

@@ -15,6 +15,7 @@ import 'package:pshared/provider/payment/multiple/quotation.dart';
import 'package:pshared/provider/payment/payments.dart';
import 'package:pshared/provider/payment/provider.dart';
import 'package:pshared/provider/payment/quotation/quotation.dart';
import 'package:pshared/provider/payment/updates.dart';
import 'package:pshared/provider/payout_verification.dart';
import 'package:pshared/provider/recipient/provider.dart';
import 'package:pshared/provider/recipient/methods_cache.dart';
@@ -22,18 +23,18 @@ import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pweb/app/router/pages.dart';
import 'package:pweb/app/router/payout_routes.dart';
import 'package:pweb/controllers/multiple_payouts.dart';
import 'package:pweb/controllers/payment_page.dart';
import 'package:pweb/controllers/payout_verification.dart';
import 'package:pweb/controllers/payouts/multiple_payouts.dart';
import 'package:pweb/controllers/payouts/multi_quotation.dart';
import 'package:pweb/controllers/payments/page.dart';
import 'package:pweb/controllers/payouts/payout_verification.dart';
import 'package:pweb/pages/invitations/page/page.dart';
import 'package:pweb/providers/multiple_payouts.dart';
import 'package:pweb/controllers/multi_quotation.dart';
import 'package:pweb/providers/quotation/quotation.dart';
import 'package:pweb/controllers/payouts/quotation.dart';
import 'package:pshared/models/payment/wallet.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/invitations/page.dart';
import 'package:pweb/pages/payment_methods/page.dart';
import 'package:pweb/pages/payout_page/send/page.dart';
import 'package:pweb/pages/payout_page/wallet/edit/page.dart';
import 'package:pweb/pages/report/details/page.dart';
import 'package:pweb/pages/report/page.dart';
@@ -169,14 +170,28 @@ RouteBase payoutShellRoute() => ShellRoute(
provider!..update(organization, quotation),
),
ChangeNotifierProxyProvider3<
PaymentsProvider,
PaymentProvider,
MultiPaymentProvider,
PaymentsUpdatesProvider
>(
create: (_) => PaymentsUpdatesProvider(),
lazy: false,
update: (_, payments, payment, multiPayment, controller) =>
controller!..update(
paymentsProvider: payments,
paymentProvider: payment,
multiPaymentProvider: multiPayment,
),
),
ChangeNotifierProxyProvider2<
MultiQuotationProvider,
MultiPaymentProvider,
PaymentsProvider,
MultiplePayoutsProvider
>(
create: (_) => MultiplePayoutsProvider(),
update: (context, quotation, payment, payments, provider) =>
provider!..update(quotation, payment, payments),
update: (context, quotation, payment, provider) =>
provider!..update(quotation, payment),
),
ChangeNotifierProxyProvider2<
MultiplePayoutsProvider,
@@ -200,23 +215,19 @@ RouteBase payoutShellRoute() => ShellRoute(
onRecipientSelected: (recipient) => _startPayment(
context,
recipient: recipient,
returnTo: PayoutDestination.dashboard,
),
onGoToPaymentWithoutRecipient: (type) => _startPayment(
context,
recipient: null,
paymentType: type,
returnTo: PayoutDestination.dashboard,
),
onTopUp: (wallet) => _openWalletTopUp(
context,
wallet,
returnTo: PayoutDestination.dashboard,
),
onWalletTap: (wallet) => _openWalletEdit(
context,
wallet,
returnTo: PayoutDestination.dashboard,
),
),
),
@@ -231,11 +242,10 @@ RouteBase payoutShellRoute() => ShellRoute(
onRecipientSelected: (recipient) => _startPayment(
context,
recipient: recipient,
returnTo: PayoutDestination.recipients,
),
onAddRecipient: () => _openAddRecipient(context),
onEditRecipient: (recipient) =>
_openAddRecipient(context, recipient: recipient),
_openEditRecipient(context, recipient: recipient),
onDeleteRecipient: (recipient) async {
final confirmed = await showConfirmationDialog(
context: context,
@@ -269,7 +279,20 @@ RouteBase payoutShellRoute() => ShellRoute(
return NoTransitionPage(
child: AddressBookRecipientForm(
recipient: recipient,
onSaved: (_) => context.goToPayout(PayoutDestination.recipients),
onSaved: (_) => _popOrGo(context),
),
);
},
),
GoRoute(
name: PayoutRoutes.editRecipient,
path: PayoutRoutes.editRecipientPath,
pageBuilder: (context, _) {
final recipient = context.read<RecipientsProvider>().currentObject;
return NoTransitionPage(
child: AddressBookRecipientForm(
recipient: recipient,
onSaved: (_) => _popOrGo(context),
),
);
},
@@ -278,14 +301,11 @@ RouteBase payoutShellRoute() => ShellRoute(
name: PayoutRoutes.payment,
path: PayoutRoutes.paymentPath,
pageBuilder: (context, state) {
final fallbackDestination = PayoutRoutes.fallbackFromState(
state,
defaultDestination: PayoutDestination.dashboard,
);
final fallbackDestination = PayoutDestination.dashboard;
return NoTransitionPage(
child: PaymentPage(
onBack: (_) => _popOrGo(context, fallbackDestination),
onBack: (_) => _popOrGo(context),
initialPaymentType: PayoutRoutes.paymentTypeFromState(state),
fallbackDestination: fallbackDestination,
),
@@ -327,15 +347,11 @@ RouteBase payoutShellRoute() => ShellRoute(
final walletsProvider = context.read<WalletsController>();
final wallet = walletsProvider.selectedWallet;
final loc = AppLocalizations.of(context)!;
final fallbackDestination = PayoutRoutes.fallbackFromState(
state,
defaultDestination: PayoutDestination.methods,
);
return NoTransitionPage(
child: wallet != null
? WalletEditPage(
onBack: () => _popOrGo(context, fallbackDestination),
onBack: () => _popOrGo(context),
)
: Center(child: Text(loc.noWalletSelected)),
);
@@ -345,14 +361,10 @@ RouteBase payoutShellRoute() => ShellRoute(
name: PayoutRoutes.walletTopUp,
path: PayoutRoutes.walletTopUpPath,
pageBuilder: (context, state) {
final fallbackDestination = PayoutRoutes.fallbackFromState(
state,
defaultDestination: PayoutDestination.dashboard,
);
return NoTransitionPage(
child: WalletTopUpPage(
onBack: () => _popOrGo(context, fallbackDestination),
onBack: () => _popOrGo(context),
),
);
},
@@ -364,10 +376,14 @@ void _startPayment(
BuildContext context, {
Recipient? recipient,
PaymentType? paymentType,
required PayoutDestination returnTo,
}) {
context.read<RecipientsProvider>().setCurrentObject(recipient?.id);
context.pushToPayment(paymentType: paymentType, returnTo: returnTo);
context.pushNamed(
PayoutRoutes.payment,
queryParameters: PayoutRoutes.buildQueryParameters(
paymentType: paymentType,
),
);
}
void _openAddRecipient(BuildContext context, {Recipient? recipient}) {
@@ -375,28 +391,32 @@ void _openAddRecipient(BuildContext context, {Recipient? recipient}) {
context.pushNamed(PayoutRoutes.addRecipient);
}
void _openEditRecipient(BuildContext context, {required Recipient recipient}) {
context.read<RecipientsProvider>().setCurrentObject(recipient.id);
context.pushNamed(PayoutRoutes.editRecipient);
}
void _openWalletEdit(
BuildContext context,
Wallet wallet, {
required PayoutDestination returnTo,
}) {
Wallet wallet,
) {
context.read<WalletsController>().selectWallet(wallet);
context.pushToEditWallet(returnTo: returnTo);
context.pushToEditWallet();
}
void _openWalletTopUp(
BuildContext context,
Wallet wallet, {
required PayoutDestination returnTo,
}) {
Wallet wallet,
) {
context.read<WalletsController>().selectWallet(wallet);
context.pushToWalletTopUp(returnTo: returnTo);
context.pushToWalletTopUp();
}
void _popOrGo(BuildContext context, PayoutDestination destination) {
if (Navigator.of(context).canPop()) {
Navigator.of(context).pop();
void _popOrGo(BuildContext context) {
final router = GoRouter.of(context);
if (router.canPop()) {
router.pop();
} else {
context.goToPayout(destination);
context.goToPayout(PayoutDestination.dashboard);
}
}