This commit is contained in:
unknown 2018-06-20 01:00:00 -07:00
parent 1046984cd4
commit 9e51d9a0b2
3 changed files with 84 additions and 4 deletions

View File

@ -32,6 +32,7 @@ class ClientFields {
static const String updatedAt = 'updatedAt';
static const String archivedAt = 'archivedAt';
static const String isDeleted = 'isDeleted';
static const String contact = 'contact';
}
@ -237,10 +238,17 @@ abstract class ClientEntity extends Object with BaseEntity implements Built<Clie
if (vatNumber.toLowerCase().contains(search)) {
return ClientFields.vatNumber;
} else if (idNumber.toLowerCase().contains(search)) {
}
if (idNumber.toLowerCase().contains(search)) {
return ClientFields.idNumber;
}
var contact = contacts.where((contact) => contact.matchesSearch(search)).first;
if (contact != null) {
return contact.matchesSearchField(search);
}
return null;
}
@ -252,10 +260,17 @@ abstract class ClientEntity extends Object with BaseEntity implements Built<Clie
search = search.toLowerCase();
if (vatNumber.toLowerCase().contains(search)) {
return vatNumber;
} else if (idNumber.toLowerCase().contains(search)) {
}
if (idNumber.toLowerCase().contains(search)) {
return idNumber;
}
var contact = contacts.where((contact) => contact.matchesSearch(search)).first;
if (contact != null) {
return contact.matchesSearchValue(search);
}
return null;
}
@ -264,6 +279,13 @@ abstract class ClientEntity extends Object with BaseEntity implements Built<Clie
}
class ContactFields {
static const String firstName = 'firstName';
static const String lastName = 'lastName';
static const String email = 'email';
static const String phone = 'phone';
}
abstract class ContactEntity extends Object with BaseEntity implements Built<ContactEntity, ContactEntityBuilder> {
static int counter = 0;
@ -307,6 +329,59 @@ abstract class ContactEntity extends Object with BaseEntity implements Built<Con
return (firstName + ' ' + lastName).trim();
}
bool matchesSearch(String search) {
if (search == null || search.isEmpty) {
return true;
}
search = search.toLowerCase();
if (firstName.toLowerCase().contains(search)) {
return true;
}
if (lastName.toLowerCase().contains(search)) {
return true;
}
if (phone.toLowerCase().contains(search)) {
return true;
}
if (email.toLowerCase().contains(search)) {
return true;
}
return false;
}
String matchesSearchField(String search) {
if (search == null || search.isEmpty) {
return null;
}
search = search.toLowerCase();
if (fullName().toLowerCase().contains(search)) {
return ClientFields.contact;
} else if (email.toLowerCase().contains(search)) {
return ContactFields.email;
} else if (phone.toLowerCase().contains(search)) {
return ContactFields.phone;
}
return null;
}
String matchesSearchValue(String search) {
if (search == null || search.isEmpty) {
return null;
}
search = search.toLowerCase();
if (fullName().toLowerCase().contains(search)) {
return fullName();
} else if (email.toLowerCase().contains(search)) {
return email;
} else if (phone.toLowerCase().contains(search)) {
return phone;
}
return null;
}
ContactEntity._();
static Serializer<ContactEntity> get serializer => _$contactEntitySerializer;

View File

@ -97,9 +97,12 @@ class _EntityDropdownState extends State<EntityDropdown> {
var filter =
store.state.uiState.entityDropdownFilter;
var subtitle = null;
var matchField = entity.matchesSearchField(filter);
var matchField =
entity.matchesSearchField(filter);
if (matchField != null) {
subtitle = matchField + ': ' + entity.matchesSearchValue(filter);
var field = localization.lookup(matchField);
var value = entity.matchesSearchValue(filter);
subtitle = '$field: $value';
}
return ListTile(
dense: true,

View File

@ -126,6 +126,7 @@ class AppLocalization {
'unit_cost': 'Unit Cost',
'quantity': 'Quantity',
'add_item': 'Add Item',
'contact': 'Contact',
'payment': 'Payment',
'payments': 'Payments',
@ -243,6 +244,7 @@ class AppLocalization {
String get unitCost => _localizedValues[locale.languageCode]['unit_cost'];
String get quantity => _localizedValues[locale.languageCode]['quantity'];
String get addItem => _localizedValues[locale.languageCode]['add_item'];
String get contact => _localizedValues[locale.languageCode]['contact'];
String get payment => _localizedValues[locale.languageCode]['payment'];