import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/data/models/invoice_model.dart'; import 'package:invoiceninja_flutter/data/models/payment_model.dart'; import 'package:memoize/memoize.dart'; var memoizedUpcomingInvoices = memo1( (BuiltMap invoiceMap) => _upcomingInvoices(invoiceMap: invoiceMap)); List _upcomingInvoices( {BuiltMap invoiceMap}) { final invoices = []; invoiceMap.forEach((index, invoice) { if (invoice.isUpcoming) { invoices.add(invoice); } }); invoices.sort( (invoiceA, invoiceB) => invoiceA.dueDate.compareTo(invoiceB.dueDate)); return invoices; } var memoizedPastDueInvoices = memo1( (BuiltMap invoiceMap) => _pastDueInvoices(invoiceMap: invoiceMap)); List _pastDueInvoices( {BuiltMap invoiceMap}) { final invoices = []; invoiceMap.forEach((index, invoice) { if (invoice.isPastDue) { invoices.add(invoice); } }); invoices.sort( (invoiceA, invoiceB) => invoiceA.dueDate.compareTo(invoiceB.dueDate)); return invoices; } var memoizedRecentPayments = memo1( (BuiltMap paymentMap) => _recentPayments(paymentMap: paymentMap)); List _recentPayments( {BuiltMap paymentMap}) { final payments = []; final oneMonthAgo = DateTime.now().subtract(Duration(days: 30)).millisecondsSinceEpoch / 1000; paymentMap.forEach((index, payment) { if (payment.isActive && payment.createdAt > oneMonthAgo) { payments.add(payment); } }); payments.sort( (paymentA, paymentB) => paymentA.createdAt.compareTo(paymentB.createdAt)); return payments; } var memoizedUpcomingQuotes = memo1((BuiltMap quoteMap) => _upcomingQuotes(quoteMap: quoteMap)); List _upcomingQuotes( {BuiltMap quoteMap}) { final quotes = []; quoteMap.forEach((index, quote) { if (quote.isUpcoming) { quotes.add(quote); } }); quotes.sort((quoteA, quoteB) => quoteA.dueDate.compareTo(quoteB.dueDate)); return quotes; } var memoizedExpiredQuotes = memo1((BuiltMap quoteMap) => _expiredQuotes(quoteMap: quoteMap)); List _expiredQuotes({BuiltMap quoteMap}) { final quotes = []; quoteMap.forEach((index, quote) { if (quote.isPastDue) { quotes.add(quote); } }); quotes.sort((quoteA, quoteB) => quoteA.dueDate.compareTo(quoteB.dueDate)); return quotes; }