diff --git a/lib/redux/recurring_invoice/recurring_invoice_selectors.dart b/lib/redux/recurring_invoice/recurring_invoice_selectors.dart index b4a1da8f2..bde0e4bb5 100644 --- a/lib/redux/recurring_invoice/recurring_invoice_selectors.dart +++ b/lib/redux/recurring_invoice/recurring_invoice_selectors.dart @@ -141,6 +141,27 @@ EntityStats recurringInvoiceStatsForUser( return EntityStats(countActive: countActive, countArchived: countArchived); } +var memoizedRecurringInvoiceStatsForInvoice = memo2( + (String invoiceId, BuiltMap invoiceMap) => + recurringInvoiceStatsForInvoice(invoiceId, invoiceMap)); + +EntityStats recurringInvoiceStatsForInvoice( + String recurrinInvoiceId, BuiltMap invoiceMap) { + int countActive = 0; + int countArchived = 0; + invoiceMap.forEach((invoiceId, invoice) { + if (invoice.recurringId == recurrinInvoiceId) { + if (invoice.isActive) { + countActive++; + } else if (invoice.isDeleted) { + countArchived++; + } + } + }); + + return EntityStats(countActive: countActive, countArchived: countArchived); +} + bool hasRecurringInvoiceChanges(InvoiceEntity recurringInvoice, BuiltMap recurringInvoiceMap) => recurringInvoice.isNew diff --git a/lib/ui/invoice/view/invoice_view_overview.dart b/lib/ui/invoice/view/invoice_view_overview.dart index 22629f81a..6116dc59b 100644 --- a/lib/ui/invoice/view/invoice_view_overview.dart +++ b/lib/ui/invoice/view/invoice_view_overview.dart @@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/data/models/recurring_invoice_model.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart'; +import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_selectors.dart'; import 'package:invoiceninja_flutter/ui/app/FieldGrid.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart'; import 'package:invoiceninja_flutter/ui/app/invoice/invoice_item_view.dart'; @@ -193,6 +194,9 @@ class InvoiceOverview extends StatelessWidget { context: context, entityType: EntityType.invoice, filterEntity: invoice), + subtitle: memoizedRecurringInvoiceStatsForInvoice( + invoice.id, state.invoiceState.map) + .present(localization.active, localization.archived), )); }