Fixed search field in payment page and cleaned up payment flow #187
@@ -3,18 +3,22 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:pshared/models/payment/methods/data.dart';
|
||||
import 'package:pshared/models/payment/type.dart';
|
||||
import 'package:pshared/models/recipient/recipient.dart';
|
||||
import 'package:pshared/provider/recipient/provider.dart';
|
||||
import 'package:pshared/provider/recipient/pmethods.dart';
|
||||
|
||||
|
||||
class PaymentFlowProvider extends ChangeNotifier {
|
||||
PaymentType _selectedType;
|
||||
PaymentType? _preferredType;
|
||||
PaymentMethodData? _manualPaymentData;
|
||||
MethodMap _availableTypes = {};
|
||||
Recipient? _recipient;
|
||||
|
||||
PaymentFlowProvider({
|
||||
required PaymentType initialType,
|
||||
}) : _selectedType = initialType;
|
||||
PaymentType? preferredType,
|
||||
}) : _selectedType = initialType,
|
||||
_preferredType = preferredType ?? initialType;
|
||||
|
||||
PaymentType get selectedType => _selectedType;
|
||||
PaymentMethodData? get manualPaymentData => _manualPaymentData;
|
||||
@@ -29,30 +33,17 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
PaymentMethodData? get selectedPaymentData =>
|
||||
hasRecipient ? _availableTypes[_selectedType] : _manualPaymentData;
|
||||
|
||||
void syncWith({
|
||||
required Recipient? recipient,
|
||||
required PaymentMethodsProvider methodsProvider,
|
||||
PaymentType? preferredType,
|
||||
}) =>
|
||||
void update(
|
||||
RecipientsProvider recipientsProvider,
|
||||
PaymentMethodsProvider methodsProvider,
|
||||
) =>
|
||||
_applyState(
|
||||
recipient: recipient,
|
||||
availableTypes: methodsProvider.availableTypesForRecipient(recipient),
|
||||
preferredType: preferredType,
|
||||
recipient: recipientsProvider.currentObject,
|
||||
availableTypes: methodsProvider.availableTypesForRecipient(recipientsProvider.currentObject),
|
||||
preferredType: _preferredType,
|
||||
forceResetManualData: false,
|
||||
);
|
||||
|
||||
void reset({
|
||||
required Recipient? recipient,
|
||||
required PaymentMethodsProvider methodsProvider,
|
||||
PaymentType? preferredType,
|
||||
}) =>
|
||||
_applyState(
|
||||
recipient: recipient,
|
||||
availableTypes: methodsProvider.availableTypesForRecipient(recipient),
|
||||
preferredType: preferredType,
|
||||
forceResetManualData: true,
|
||||
);
|
||||
|
||||
void selectType(PaymentType type, {bool resetManualData = false}) {
|
||||
if (_selectedType == type && (!resetManualData || _manualPaymentData == null)) {
|
||||
return;
|
||||
@@ -70,6 +61,20 @@ class PaymentFlowProvider extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setPreferredType(PaymentType? preferredType) {
|
||||
if (_preferredType == preferredType) {
|
||||
return;
|
||||
}
|
||||
|
||||
_preferredType = preferredType;
|
||||
_applyState(
|
||||
recipient: _recipient,
|
||||
availableTypes: _availableTypes,
|
||||
preferredType: _preferredType,
|
||||
forceResetManualData: false,
|
||||
);
|
||||
}
|
||||
|
||||
PaymentType _resolveSelectedType({
|
||||
required Recipient? recipient,
|
||||
required MethodMap availableTypes,
|
||||
|
||||
@@ -20,11 +20,11 @@ import 'package:pshared/provider/recipient/provider.dart';
|
||||
import 'package:pshared/provider/recipient/pmethods.dart';
|
||||
import 'package:pshared/provider/payment/wallets.dart';
|
||||
import 'package:pshared/service/payment/wallets.dart';
|
||||
import 'package:pshared/models/payment/type.dart';
|
||||
|
||||
import 'package:pweb/app/app.dart';
|
||||
import 'package:pweb/app/timeago.dart';
|
||||
import 'package:pweb/providers/carousel.dart';
|
||||
import 'package:pshared/models/payment/type.dart';
|
||||
import 'package:pweb/providers/operatioins.dart';
|
||||
import 'package:pweb/providers/two_factor.dart';
|
||||
import 'package:pweb/providers/upload_history.dart';
|
||||
@@ -92,10 +92,13 @@ void main() async {
|
||||
ChangeNotifierProvider(
|
||||
create: (_) => WalletTransactionsProvider(MockWalletTransactionsService())..load(),
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
ChangeNotifierProxyProvider2<RecipientsProvider, PaymentMethodsProvider, PaymentFlowProvider>(
|
||||
create: (_) => PaymentFlowProvider(initialType: PaymentType.bankAccount),
|
||||
update: (context, recipients, methods, provider) => provider!..update(
|
||||
recipients,
|
||||
methods,
|
||||
),
|
||||
),
|
||||
|
||||
ChangeNotifierProvider(
|
||||
create: (_) => OperationProvider(OperationService())..loadOperations(),
|
||||
),
|
||||
|
||||
@@ -14,7 +14,6 @@ import 'package:pshared/provider/recipient/provider.dart';
|
||||
import 'package:pshared/models/payment/wallet.dart';
|
||||
import 'package:pshared/provider/payment/wallets.dart';
|
||||
|
||||
|
||||
import 'package:pweb/pages/payment_methods/payment_page/body.dart';
|
||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
||||
import 'package:pweb/services/posthog.dart';
|
||||
@@ -59,14 +58,8 @@ class _PaymentPageState extends State<PaymentPage> {
|
||||
void _initializePaymentPage() {
|
||||
final flowProvider = context.read<PaymentFlowProvider>();
|
||||
final methodsProvider = context.read<PaymentMethodsProvider>();
|
||||
_handleWalletAutoSelection(methodsProvider, flowProvider);
|
||||
|
||||
final recipient = context.read<RecipientsProvider>().currentObject;
|
||||
flowProvider.syncWith(
|
||||
recipient: recipient,
|
||||
methodsProvider: methodsProvider,
|
||||
preferredType: widget.initialPaymentType,
|
||||
);
|
||||
flowProvider.setPreferredType(widget.initialPaymentType);
|
||||
_handleWalletAutoSelection(methodsProvider);
|
||||
}
|
||||
|
||||
void _handleSearchChanged(String query) {
|
||||
@@ -74,30 +67,14 @@ class _PaymentPageState extends State<PaymentPage> {
|
||||
}
|
||||
|
||||
void _handleRecipientSelected(Recipient recipient) {
|
||||
final flowProvider = context.read<PaymentFlowProvider>();
|
||||
final recipientProvider = context.read<RecipientsProvider>();
|
||||
final methodsProvider = context.read<PaymentMethodsProvider>();
|
||||
|
||||
recipientProvider.setCurrentObject(recipient.id);
|
||||
flowProvider.reset(
|
||||
recipient: recipient,
|
||||
methodsProvider: methodsProvider,
|
||||
preferredType: widget.initialPaymentType,
|
||||
);
|
||||
_clearSearchField();
|
||||
}
|
||||
|
||||
void _handleRecipientCleared() {
|
||||
final flowProvider = context.read<PaymentFlowProvider>();
|
||||
final recipientProvider = context.read<RecipientsProvider>();
|
||||
final methodsProvider = context.read<PaymentMethodsProvider>();
|
||||
|
||||
recipientProvider.setCurrentObject(null);
|
||||
flowProvider.reset(
|
||||
recipient: null,
|
||||
methodsProvider: methodsProvider,
|
||||
preferredType: widget.initialPaymentType,
|
||||
);
|
||||
_clearSearchField();
|
||||
}
|
||||
|
||||
@@ -129,13 +106,6 @@ class _PaymentPageState extends State<PaymentPage> {
|
||||
final recipient = context.select<RecipientsProvider, Recipient?>(
|
||||
(provider) => provider.currentObject,
|
||||
);
|
||||
final flowProvider = context.watch<PaymentFlowProvider>();
|
||||
|
||||
flowProvider.syncWith(
|
||||
recipient: recipient,
|
||||
methodsProvider: methodsProvider,
|
||||
preferredType: recipient != null ? widget.initialPaymentType : null,
|
||||
);
|
||||
|
||||
return PaymentPageBody(
|
||||
onBack: widget.onBack,
|
||||
@@ -152,18 +122,13 @@ class _PaymentPageState extends State<PaymentPage> {
|
||||
);
|
||||
}
|
||||
|
||||
void _handleWalletAutoSelection(PaymentMethodsProvider methodsProvider, PaymentFlowProvider flowProvider) {
|
||||
void _handleWalletAutoSelection(PaymentMethodsProvider methodsProvider) {
|
||||
final wallet = context.read<WalletsProvider>().selectedWallet;
|
||||
if (wallet == null) return;
|
||||
|
||||
final matchingMethod = _getPaymentMethodForWallet(wallet, methodsProvider);
|
||||
if (matchingMethod != null) {
|
||||
methodsProvider.setCurrentObject(matchingMethod.id);
|
||||
flowProvider.syncWith(
|
||||
recipient: context.read<RecipientsProvider>().currentObject,
|
||||
methodsProvider: methodsProvider,
|
||||
preferredType: widget.initialPaymentType,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user