Merge pull request 'removed payments polling' (#633) from SEND062 into main
Some checks failed
ci/woodpecker/push/frontend Pipeline failed
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:
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user