Refactor
This commit is contained in:
parent
719184a097
commit
11abf6c373
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue