import 'package:memoize/memoize.dart'; import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja/data/models/models.dart'; import 'package:invoiceninja/redux/ui/list_ui_state.dart'; var memoizedDropdownClientList = memo3(( BuiltMap clientMap, BuiltList clientList, String filter) => dropdownClientsSelector(clientMap, clientList, filter) ); List dropdownClientsSelector( BuiltMap clientMap, BuiltList clientList, String filter) { final list = clientList.where((clientId) { final client = clientMap[clientId]; if (! client.isActive) { return false; } return client.matchesSearch(filter); }).toList(); list.sort((clientAId, clientBId) { final clientA = clientMap[clientAId]; final clientB = clientMap[clientBId]; return clientA.compareTo(clientB, ClientFields.name, true); }); return list; } var memoizedClientList = memo3(( BuiltMap clientMap, BuiltList clientList, ListUIState clientListState) => visibleClientsSelector(clientMap, clientList, clientListState) ); List visibleClientsSelector( BuiltMap clientMap, BuiltList clientList, ListUIState clientListState) { final list = clientList.where((clientId) { final client = clientMap[clientId]; if (! client.matchesStates(clientListState.stateFilters)) { return false; } return client.matchesSearch(clientListState.search); }).toList(); list.sort((clientAId, clientBId) { final clientA = clientMap[clientAId]; final clientB = clientMap[clientBId]; return clientA.compareTo(clientB, clientListState.sortField, clientListState.sortAscending); }); return list; }