This commit is contained in:
unknown 2018-07-02 20:55:51 +03:00
parent 719184a097
commit 11abf6c373
7 changed files with 46 additions and 40 deletions

View File

@ -3,24 +3,14 @@ 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<int, ClientEntity> clientMap,
BuiltList<int> clientList,
String filter) => dropdownClientsSelector(clientMap, clientList, filter)
);
var memoizedDropdownClientList = memo2(
(BuiltMap<int, ClientEntity> clientMap, BuiltList<int> clientList) =>
dropdownClientsSelector(clientMap, clientList));
List<int> dropdownClientsSelector(
BuiltMap<int, ClientEntity> clientMap,
BuiltList<int> clientList,
String filter) {
final list = clientList.where((clientId) {
final client = clientMap[clientId];
if (! client.isActive) {
return false;
}
return client.matchesSearch(filter);
}).toList();
BuiltMap<int, ClientEntity> clientMap, BuiltList<int> clientList) {
final list =
clientList.where((clientId) => clientMap[clientId].isActive).toList();
list.sort((clientAId, clientBId) {
final clientA = clientMap[clientAId];
@ -31,21 +21,15 @@ List<int> dropdownClientsSelector(
return list;
}
var memoizedClientList = memo3((BuiltMap<int, ClientEntity> clientMap,
BuiltList<int> clientList, ListUIState clientListState) =>
visibleClientsSelector(clientMap, clientList, clientListState));
var memoizedClientList = memo3((
BuiltMap<int, ClientEntity> clientMap,
BuiltList<int> clientList,
ListUIState clientListState) => visibleClientsSelector(clientMap, clientList, clientListState)
);
List<int> visibleClientsSelector(
BuiltMap<int, ClientEntity> clientMap,
BuiltList<int> clientList,
ListUIState clientListState) {
List<int> visibleClientsSelector(BuiltMap<int, ClientEntity> clientMap,
BuiltList<int> clientList, ListUIState clientListState) {
final list = clientList.where((clientId) {
final client = clientMap[clientId];
if (! client.matchesStates(clientListState.stateFilters)) {
if (!client.matchesStates(clientListState.stateFilters)) {
return false;
}
return client.matchesSearch(clientListState.search);
@ -54,8 +38,9 @@ List<int> visibleClientsSelector(
list.sort((clientAId, clientBId) {
final clientA = clientMap[clientAId];
final clientB = clientMap[clientBId];
return clientA.compareTo(clientB, clientListState.sortField, clientListState.sortAscending);
return clientA.compareTo(
clientB, clientListState.sortField, clientListState.sortAscending);
});
return list;
}
}

View File

@ -0,0 +1,16 @@
import 'package:built_collection/built_collection.dart';
import 'package:invoiceninja/data/models/static/country_model.dart';
import 'package:memoize/memoize.dart';
var memoizedCountryList = memo1((BuiltMap<int, CountryEntity> countryMap) =>
countryList(countryMap));
List<int> countryList(BuiltMap<int, CountryEntity> countryMap) {
final list = countryMap.keys.toList();
list.sort((idA, idB) => countryMap[idA].listDisplayName
.compareTo(countryMap[idB].listDisplayName));
return list;
}

View File

@ -12,6 +12,7 @@ class EntityDropdown extends StatefulWidget {
@required this.entityType,
@required this.labelText,
@required this.entityMap,
@required this.entityList,
@required this.onSelected,
this.validator,
this.initialValue,
@ -19,6 +20,7 @@ class EntityDropdown extends StatefulWidget {
final EntityType entityType;
final BuiltMap<int, SelectableEntity> entityMap;
final List<int> entityList;
final String labelText;
final String initialValue;
final Function(int) onSelected;
@ -49,6 +51,7 @@ class _EntityDropdownState extends State<EntityDropdown> {
builder: (BuildContext context) {
return EntityDropdownDialog(
entityMap: widget.entityMap,
entityList: widget.entityList,
onSelected: (entityId) {
_textController.text = widget.entityMap[entityId].listDisplayName;
widget.onSelected(entityId);
@ -80,10 +83,12 @@ class _EntityDropdownState extends State<EntityDropdown> {
class EntityDropdownDialog extends StatefulWidget {
EntityDropdownDialog({
@required this.entityMap,
@required this.entityList,
@required this.onSelected,
});
final BuiltMap<int, SelectableEntity> entityMap;
final List<int> entityList;
final Function(int) onSelected;
@override
@ -92,15 +97,6 @@ class EntityDropdownDialog extends StatefulWidget {
class _EntityDropdownDialogState extends State<EntityDropdownDialog> {
String _filter;
List<int> _entityList;
@override
void initState() {
super.initState();
_entityList = widget.entityMap.keys.toList();
_entityList.sort((idA, idB) => widget.entityMap[idA].listDisplayName
.compareTo(widget.entityMap[idB].listDisplayName));
}
@override
Widget build(BuildContext context) {
@ -139,7 +135,7 @@ class _EntityDropdownDialogState extends State<EntityDropdownDialog> {
}
Widget _createList() {
final matches = _entityList
final matches = widget.entityList
.where((entityId) => widget.entityMap[entityId].matchesSearch(_filter))
.toList();

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja/ui/app/entity_dropdown.dart';
import 'package:invoiceninja/ui/app/form_card.dart';
import 'package:invoiceninja/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja/utils/localization.dart';
import 'package:invoiceninja/redux/static/static_selectors.dart';
class ClientEditBillingAddress extends StatefulWidget {
ClientEditBillingAddress({
@ -125,6 +126,7 @@ class ClientEditBillingAddressState extends State<ClientEditBillingAddress> {
EntityDropdown(
entityType: EntityType.country,
entityMap: viewModel.countryMap,
entityList: memoizedCountryList(viewModel.countryMap),
labelText: localization.country,
initialValue: viewModel.countryMap[client.countryId]?.name,
onSelected: (int countryId) => viewModel

View File

@ -3,6 +3,7 @@ import 'package:invoiceninja/data/models/entities.dart';
import 'package:invoiceninja/ui/app/entity_dropdown.dart';
import 'package:invoiceninja/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja/utils/localization.dart';
import 'package:invoiceninja/redux/static/static_selectors.dart';
import '../../app/form_card.dart';
@ -125,6 +126,7 @@ class ClientEditShippingAddressState extends State<ClientEditShippingAddress> {
EntityDropdown(
entityType: EntityType.country,
entityMap: viewModel.countryMap,
entityList: memoizedCountryList(viewModel.countryMap),
labelText: localization.country,
initialValue: viewModel.countryMap[client.shippingCountryId]?.name,
onSelected: (int countryId) => viewModel

View File

@ -1,4 +1,5 @@
import 'package:invoiceninja/data/models/invoice_model.dart';
import 'package:invoiceninja/redux/client/client_selectors.dart';
import 'package:invoiceninja/utils/formatting.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja/data/models/entities.dart';
@ -100,6 +101,7 @@ class InvoiceEditDetailsState extends State<InvoiceEditDetails> with AutomaticKe
initialValue:
viewModel.clientMap[invoice.clientId]?.displayName,
entityMap: viewModel.clientMap,
entityList: memoizedDropdownClientList(viewModel.clientMap, viewModel.clientList),
validator: (String val) => val.trim().isEmpty
? AppLocalization.of(context).pleaseSelectAClient
: null,

View File

@ -33,12 +33,14 @@ class InvoiceEditDetailsVM {
final InvoiceEntity invoice;
final Function(InvoiceEntity) onChanged;
final BuiltMap<int, ClientEntity> clientMap;
final BuiltList<int> clientList;
InvoiceEditDetailsVM({
@required this.state,
@required this.invoice,
@required this.onChanged,
@required this.clientMap,
@required this.clientList,
});
factory InvoiceEditDetailsVM.fromStore(Store<AppState> store) {
@ -51,6 +53,7 @@ class InvoiceEditDetailsVM {
onChanged: (InvoiceEntity invoice) =>
store.dispatch(UpdateInvoice(invoice)),
clientMap: state.clientState.map,
clientList: state.clientState.list,
);
}
}