Multiple Wallet support, history of each wallet and updated payment page
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
import 'package:collection/collection.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:pshared/models/payment/methods/type.dart';
|
||||
import 'package:pshared/models/payment/type.dart';
|
||||
import 'package:pshared/models/recipient/recipient.dart';
|
||||
|
||||
import 'package:pweb/models/wallet.dart';
|
||||
import 'package:pweb/providers/payment_methods.dart';
|
||||
import 'package:pweb/providers/wallets.dart';
|
||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
||||
import 'package:pweb/services/amplitude.dart';
|
||||
@@ -15,13 +19,29 @@ class PageSelectorProvider extends ChangeNotifier {
|
||||
PaymentType? _type;
|
||||
bool _cameFromRecipientList = false;
|
||||
|
||||
final RecipientProvider? recipientProvider;
|
||||
final WalletsProvider? walletsProvider;
|
||||
RecipientProvider? recipientProvider;
|
||||
WalletsProvider? walletsProvider;
|
||||
PaymentMethodsProvider? methodsProvider;
|
||||
|
||||
PayoutDestination get selected => _selected;
|
||||
PaymentType? get type => _type;
|
||||
bool get cameFromRecipientList => _cameFromRecipientList;
|
||||
|
||||
PageSelectorProvider({this.recipientProvider, this.walletsProvider});
|
||||
PageSelectorProvider({
|
||||
this.recipientProvider,
|
||||
this.walletsProvider,
|
||||
this.methodsProvider,
|
||||
});
|
||||
|
||||
void update(
|
||||
RecipientProvider recipientProv,
|
||||
WalletsProvider walletsProv,
|
||||
PaymentMethodsProvider methodsProv,
|
||||
) {
|
||||
recipientProvider = recipientProv;
|
||||
walletsProvider = walletsProv;
|
||||
methodsProvider = methodsProv;
|
||||
}
|
||||
|
||||
void selectPage(PayoutDestination dest) {
|
||||
_selected = dest;
|
||||
@@ -90,7 +110,64 @@ class PageSelectorProvider extends ChangeNotifier {
|
||||
_selected = PayoutDestination.editwallet;
|
||||
notifyListeners();
|
||||
} else {
|
||||
debugPrint("RecipientProvider is null — cannot select wallet");
|
||||
debugPrint("WalletsProvider is null — cannot select wallet");
|
||||
}
|
||||
}
|
||||
|
||||
void startPaymentFromWallet(Wallet wallet) {
|
||||
_type = PaymentType.wallet;
|
||||
_cameFromRecipientList = true;
|
||||
_selected = PayoutDestination.payment;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
PaymentMethod? getPaymentMethodForWallet(Wallet wallet) {
|
||||
if (methodsProvider == null || methodsProvider!.methods.isEmpty) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return methodsProvider!.methods.firstWhereOrNull(
|
||||
(method) => method.type == PaymentType.wallet &&
|
||||
method.details.contains(wallet.walletUserID)
|
||||
);
|
||||
}
|
||||
|
||||
Map<PaymentType, Object> getAvailablePaymentTypes() {
|
||||
final recipient = selectedRecipient;
|
||||
if (recipient == null) return {};
|
||||
|
||||
return {
|
||||
if (recipient.card != null) PaymentType.card: recipient.card!,
|
||||
if (recipient.iban != null) PaymentType.iban: recipient.iban!,
|
||||
if (recipient.wallet != null) PaymentType.wallet: recipient.wallet!,
|
||||
if (recipient.bank != null) PaymentType.bankAccount: recipient.bank!,
|
||||
};
|
||||
}
|
||||
|
||||
PaymentType getDefaultPaymentType() {
|
||||
final availableTypes = getAvailablePaymentTypes();
|
||||
final currentType = _type ?? PaymentType.bankAccount;
|
||||
|
||||
if (availableTypes.containsKey(currentType)) {
|
||||
return currentType;
|
||||
} else if (availableTypes.isNotEmpty) {
|
||||
return availableTypes.keys.first;
|
||||
} else {
|
||||
return PaymentType.bankAccount;
|
||||
}
|
||||
}
|
||||
|
||||
bool shouldShowPaymentForm() {
|
||||
return selectedRecipient == null;
|
||||
}
|
||||
|
||||
void handleWalletAutoSelection() {
|
||||
if (selectedWallet != null && methodsProvider != null) {
|
||||
final wallet = selectedWallet!;
|
||||
final matchingMethod = getPaymentMethodForWallet(wallet);
|
||||
if (matchingMethod != null) {
|
||||
methodsProvider!.selectMethod(matchingMethod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user