import 'package:invoiceninja_flutter/data/models/token_model.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'; var memoizedDropdownTokenList = memo3((BuiltMap tokenMap, BuiltList tokenList, String clientId) => dropdownTokensSelector(tokenMap, tokenList, clientId)); List dropdownTokensSelector(BuiltMap tokenMap, BuiltList tokenList, String clientId) { final list = tokenList.where((tokenId) { final token = tokenMap[tokenId]; return token.isActive; }).toList(); list.sort((tokenAId, tokenBId) { final tokenA = tokenMap[tokenAId]; final tokenB = tokenMap[tokenBId]; return tokenA.compareTo(tokenB, TokenFields.name, true); }); return list; } var memoizedFilteredTokenList = memo5(( String filterEntityId, EntityType filterEntityType, BuiltMap tokenMap, BuiltList tokenList, ListUIState tokenListState, ) => filteredTokensSelector( filterEntityId, filterEntityType, tokenMap, tokenList, tokenListState, )); List filteredTokensSelector( String filterEntityId, EntityType filterEntityType, BuiltMap tokenMap, BuiltList tokenList, ListUIState tokenListState, ) { final list = tokenList.where((tokenId) { final token = tokenMap[tokenId]; if (filterEntityId != null && token.id != filterEntityId) { return false; } else { // } if (token.isSystem) { return false; } if (!token.matchesStates(tokenListState.stateFilters)) { return false; } return token.matchesFilter(tokenListState.filter); }).toList(); list.sort((tokenAId, tokenBId) { final tokenA = tokenMap[tokenAId]; final tokenB = tokenMap[tokenBId]; return tokenA.compareTo( tokenB, tokenListState.sortField, tokenListState.sortAscending); }); return list; } bool hasTokenChanges( TokenEntity token, BuiltMap tokenMap) => token.isNew ? token.isChanged : token != tokenMap[token.id];