Merge pull request 'removed payments polling' (#633) from SEND062 into main
Some checks failed
ci/woodpecker/push/frontend Pipeline failed

Reviewed-on: #633
This commit was merged in pull request #633.
This commit is contained in:
2026-03-04 12:55:35 +00:00
2 changed files with 15 additions and 55 deletions

View File

@@ -9,8 +9,6 @@ import 'package:pshared/service/payment/service.dart';
import 'package:pshared/utils/exception.dart'; import 'package:pshared/utils/exception.dart';
class PaymentsProvider with ChangeNotifier { class PaymentsProvider with ChangeNotifier {
static const Duration _pendingRefreshInterval = Duration(seconds: 10);
OrganizationsProvider? _organizations; OrganizationsProvider? _organizations;
String? _loadedOrganizationRef; String? _loadedOrganizationRef;
@@ -25,8 +23,6 @@ class PaymentsProvider with ChangeNotifier {
List<String>? _states; List<String>? _states;
int _opSeq = 0; int _opSeq = 0;
Timer? _pendingRefreshTimer;
bool _isPendingRefreshInFlight = false;
Resource<List<Payment>> get resource => _resource; Resource<List<Payment>> get resource => _resource;
List<Payment> get payments => _resource.data ?? []; List<Payment> get payments => _resource.data ?? [];
@@ -89,6 +85,18 @@ class PaymentsProvider with ChangeNotifier {
); );
} }
Future<void> refreshCurrentQuerySilently() async {
await _refresh(
limit: _limit,
quotationRef: _quotationRef,
createdFrom: _createdFrom,
createdTo: _createdTo,
states: _states,
showLoading: false,
updateError: false,
);
}
void mergePayments(List<Payment> incoming) { void mergePayments(List<Payment> incoming) {
if (incoming.isEmpty) return; if (incoming.isEmpty) return;
final existing = List<Payment>.from(_resource.data ?? const []); final existing = List<Payment>.from(_resource.data ?? const []);
@@ -228,7 +236,6 @@ class PaymentsProvider with ChangeNotifier {
_createdTo = null; _createdTo = null;
_states = null; _states = null;
_resource = Resource(data: []); _resource = Resource(data: []);
_stopPendingRefreshTimer();
notifyListeners(); notifyListeners();
} }
@@ -237,7 +244,6 @@ class PaymentsProvider with ChangeNotifier {
required bool notify, required bool notify,
}) { }) {
_resource = newResource; _resource = newResource;
_syncPendingRefresh();
if (notify) notifyListeners(); if (notify) notifyListeners();
} }
@@ -262,52 +268,4 @@ class PaymentsProvider with ChangeNotifier {
if (normalized.isEmpty) return null; if (normalized.isEmpty) return null;
return normalized; return normalized;
} }
void _syncPendingRefresh() {
final hasPending = payments.any((payment) => payment.isPending);
if (!hasPending) {
_stopPendingRefreshTimer();
return;
}
_ensurePendingRefreshTimer();
}
void _ensurePendingRefreshTimer() {
if (_pendingRefreshTimer != null) return;
_pendingRefreshTimer = Timer.periodic(
_pendingRefreshInterval,
(_) => _refreshPending(),
);
_refreshPending();
}
Future<void> _refreshPending() async {
if (_isPendingRefreshInFlight) return;
if (isLoading || isLoadingMore) return;
_isPendingRefreshInFlight = true;
try {
await refreshSilently(
limit: _limit,
quotationRef: _quotationRef,
createdFrom: _createdFrom,
createdTo: _createdTo,
states: _states,
);
} finally {
_isPendingRefreshInFlight = false;
}
}
void _stopPendingRefreshTimer() {
_pendingRefreshTimer?.cancel();
_pendingRefreshTimer = null;
_isPendingRefreshInFlight = false;
}
@override
void dispose() {
_stopPendingRefreshTimer();
super.dispose();
}
} }

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:pshared/models/payment/payment.dart'; import 'package:pshared/models/payment/payment.dart';
@@ -5,7 +7,6 @@ import 'package:pshared/provider/payment/multiple/provider.dart';
import 'package:pshared/provider/payment/payments.dart'; import 'package:pshared/provider/payment/payments.dart';
import 'package:pshared/provider/payment/provider.dart'; import 'package:pshared/provider/payment/provider.dart';
class PaymentsUpdatesProvider extends ChangeNotifier { class PaymentsUpdatesProvider extends ChangeNotifier {
PaymentsProvider? _payments; PaymentsProvider? _payments;
PaymentProvider? _paymentProvider; PaymentProvider? _paymentProvider;
@@ -66,6 +67,7 @@ class PaymentsUpdatesProvider extends ChangeNotifier {
void _merge(List<Payment> incoming) { void _merge(List<Payment> incoming) {
if (incoming.isEmpty) return; if (incoming.isEmpty) return;
_payments?.mergePayments(incoming); _payments?.mergePayments(incoming);
unawaited(_payments?.refreshCurrentQuerySilently());
for (final payment in incoming) { for (final payment in incoming) {
final key = _key(payment); final key = _key(payment);
if (key != null) { if (key != null) {