import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:memoize/memoize.dart'; import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; ClientEntity paymentClientSelector(int paymentId, BuildContext context) { final state = StoreProvider.of(context).state; final payment = state.paymentState.map[paymentId]; final invoice = state.invoiceState.map[payment.invoiceId]; return state.clientState.map[invoice.clientId]; } var memoizedDropdownPaymentList = memo2( (BuiltMap paymentMap, BuiltList paymentList) => dropdownPaymentsSelector(paymentMap, paymentList)); List dropdownPaymentsSelector( BuiltMap paymentMap, BuiltList paymentList) { final list = paymentList.where((paymentId) => paymentMap[paymentId].isActive).toList(); list.sort((paymentAId, paymentBId) { final paymentA = paymentMap[paymentAId]; final paymentB = paymentMap[paymentBId]; return paymentA.compareTo(paymentB, PaymentFields.paymentDate, true); }); return list; } var memoizedFilteredPaymentList = memo3((BuiltMap paymentMap, BuiltList paymentList, ListUIState paymentListState) => filteredPaymentsSelector(paymentMap, paymentList, paymentListState)); List filteredPaymentsSelector(BuiltMap paymentMap, BuiltList paymentList, ListUIState paymentListState) { final list = paymentList.where((paymentId) { final payment = paymentMap[paymentId]; if (!payment.matchesStates(paymentListState.stateFilters)) { return false; } return payment.matchesFilter(paymentListState.filter); }).toList(); list.sort((paymentAId, paymentBId) { final paymentA = paymentMap[paymentAId]; final paymentB = paymentMap[paymentBId]; return paymentA.compareTo( paymentB, paymentListState.sortField, paymentListState.sortAscending); }); return list; }