Refactored matchesFilter and matchesFilterValue methods

This commit is contained in:
Gianfranco Gasbarri 2020-08-06 23:01:00 +01:00
parent 36a21ae6bc
commit 5155e33bd5
19 changed files with 448 additions and 532 deletions

View File

@ -535,41 +535,29 @@ abstract class ClientEntity extends Object
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
for (var i = 0; i < contacts.length; i++) {
final value = contacts[i].matchesFilterValue(filter);
if (value != null) {
return value;
}
}
filter = filter.toLowerCase();
final contact = contacts.firstWhere(
(contact) => contact.matchesFilter(filter),
orElse: () => null);
if (vatNumber.toLowerCase().contains(filter)) {
return vatNumber;
} else if (idNumber.toLowerCase().contains(filter)) {
return idNumber;
} else if (phone.toLowerCase().contains(filter)) {
return phone;
} else if (address1.toLowerCase().contains(filter)) {
return address1;
} else if (city.toLowerCase().contains(filter)) {
return city;
} else if (postalCode.toLowerCase().contains(filter)) {
return postalCode;
} else if (contact != null) {
final match = contact.matchesFilterValue(filter);
return match == displayName ? null : match;
} else if (customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
displayName,
vatNumber,
idNumber,
phone,
address1,
city,
postalCode,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'company_gateway_model.g.dart';
@ -163,25 +164,30 @@ abstract class CompanyGatewayEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (gateway.name.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
gateway.name,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
return matchesStringsValue(
haystacks: [
gateway.name,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -13,6 +13,7 @@ import 'package:invoiceninja_flutter/data/models/payment_term_model.dart';
import 'package:invoiceninja_flutter/data/models/task_model.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/.env.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'company_model.g.dart';
@ -259,10 +260,64 @@ abstract class CompanyEntity extends Object
String get displayName => settings.name ?? '';
@override
bool matchesFilter(String filter) => false;
bool matchesFilter(String filter) {
for (final user in users) {
if (user.matchesFilter(filter)) {
return true;
}
}
for (final project in projects) {
if (project.matchesFilter(filter)) {
return true;
}
}
for (final product in products) {
if (product.matchesFilter(filter)) {
return true;
}
}
return matchesStrings(
haystacks: [
subdomain,
displayName,
companyKey
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) => null;
String matchesFilterValue(String filter) {
for (final user in users) {
final value = user.matchesFilterValue(filter);
if (value != null) {
return value;
}
}
for (final project in projects) {
final value = project.matchesFilterValue(filter);
if (value != null) {
return value;
}
}
for (final product in products) {
final value = product.matchesFilterValue(filter);
if (value != null) {
return value;
}
}
return matchesStringsValue(
haystacks: [
subdomain,
displayName,
companyKey
],
needle: filter,
);
}
@override
double get listDisplayAmount => null;

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'design_model.g.dart';
@ -174,28 +175,22 @@ abstract class DesignEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (name.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
name
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
return null;
return matchesStringsValue(
haystacks: [
name
],
needle: filter,
);
}
@override

View File

@ -4,6 +4,7 @@ import 'package:built_value/serializer.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'document_model.g.dart';
@ -154,48 +155,26 @@ abstract class DocumentEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
/*
if (documentKey.toLowerCase().contains(filter)) {
return true;
} else if (notes.toLowerCase().contains(filter)) {
return true;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return true;
}
*/
return true;
return matchesStrings(
haystacks: [
name,
type,
preview,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
/*
if (notes.toLowerCase().contains(filter)) {
return notes;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return customValue2;
}
*/
return null;
return matchesStringsValue(
haystacks: [
name,
type,
preview,
],
needle: filter,
);
}
@override

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'expense_model.g.dart';
@ -357,70 +358,40 @@ abstract class ExpenseEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (publicNotes.toLowerCase().contains(filter)) {
return true;
} else if (privateNotes.toLowerCase().contains(filter)) {
return true;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return true;
}
if (transactionReference.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
publicNotes,
privateNotes,
transactionReference,
taxName1,
taxName2,
taxName3,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
if (privateNotes.toLowerCase().contains(filter)) {
return privateNotes;
}
if (publicNotes.toLowerCase().contains(filter)) {
return publicNotes;
} else if (publicNotes.toLowerCase().contains(filter)) {
return transactionReference;
} else if (transactionReference.toLowerCase().contains(filter)) {
return transactionReference;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
publicNotes,
privateNotes,
transactionReference,
taxName1,
taxName2,
taxName3,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/company_model.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'gateway_token_model.g.dart';
@ -121,25 +122,22 @@ abstract class GatewayTokenEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (customerReference.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
customerReference
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
return matchesStringsValue(
haystacks: [
customerReference
],
needle: filter,
);
}
@override

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'group_model.g.dart';
@ -117,25 +118,22 @@ abstract class GroupEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (name.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
name,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
return matchesStringsValue(
haystacks: [
name,
],
needle: filter,
);
}
@override

View File

@ -10,6 +10,7 @@ import 'package:invoiceninja_flutter/data/models/quote_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'invoice_model.g.dart';
@ -534,52 +535,36 @@ abstract class InvoiceEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (number != null && number.toLowerCase().contains(filter)) {
return true;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
number,
poNumber,
publicNotes,
privateNotes,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
number,
poNumber,
publicNotes,
privateNotes,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'payment_model.g.dart';
@ -304,66 +305,32 @@ abstract class PaymentEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (transactionReference.toLowerCase().contains(filter)) {
return true;
} else if (privateNotes.toLowerCase().contains(filter)) {
return true;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return true;
}
/*
} else if (customValue1.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return customValue2;
}
*/
return false;
return matchesStrings(
haystacks: [
transactionReference,
privateNotes,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
if (transactionReference.toLowerCase().contains(filter)) {
return transactionReference;
} else if (privateNotes.toLowerCase().contains(filter)) {
return privateNotes;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
transactionReference,
privateNotes,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'product_model.g.dart';
@ -267,56 +268,32 @@ abstract class ProductEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (productKey.toLowerCase().contains(filter)) {
return true;
} else if (notes.toLowerCase().contains(filter)) {
return true;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.isNotEmpty &&
customValue4.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
productKey,
notes,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
if (notes.toLowerCase().contains(filter)) {
return notes;
} else if (customValue1.isNotEmpty &&
customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.isNotEmpty &&
customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue3.isNotEmpty &&
customValue3.toLowerCase().contains(filter)) {
return customValue2;
}
return null;
return matchesStringsValue(
haystacks: [
productKey,
notes,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'project_model.g.dart';
@ -239,36 +240,30 @@ abstract class ProjectEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
} else if (customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.toLowerCase().contains(filter)) {
return true;
}
return name.toLowerCase().contains(filter);
return matchesStrings(
haystacks: [
name,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
} else if (customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
name,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'task_model.g.dart';
@ -522,23 +523,16 @@ abstract class TaskEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.toLowerCase().contains(filter)) {
return true;
}
return description.toLowerCase().contains(filter);
return matchesStrings(
haystacks: [
description,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
@ -562,19 +556,16 @@ abstract class TaskEntity extends Object
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
} else if (customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
description,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'tax_rate_model.g.dart';
@ -114,25 +115,22 @@ abstract class TaxRateEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (name.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
name
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
return matchesStringsValue(
haystacks: [
name
],
needle: filter,
);
}
@override

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'token_model.g.dart';
@ -125,25 +126,22 @@ abstract class TokenEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (name.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
name,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
return matchesStringsValue(
haystacks: [
name,
],
needle: filter,
);
}
@override

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'user_model.g.dart';
@ -181,39 +182,36 @@ abstract class UserEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (firstName.toLowerCase().contains(filter)) {
return true;
} else if (lastName.toLowerCase().contains(filter)) {
return true;
} else if (phone.toLowerCase().contains(filter)) {
return true;
} else if (email.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
firstName,
lastName,
email,
phone,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
filter = filter.toLowerCase();
if (email.toLowerCase().contains(filter)) {
return email;
} else if (phone.toLowerCase().contains(filter)) {
return phone;
}
return null;
return matchesStringsValue(
haystacks: [
firstName,
lastName,
email,
phone,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'vendor_model.g.dart';
@ -255,76 +256,55 @@ abstract class VendorEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
for(final contact in contacts) {
if (contact.matchesFilter(filter)) {
return true;
}
filter = filter.toLowerCase();
if (name.toLowerCase().contains(filter)) {
return true;
} else if (vatNumber.toLowerCase().contains(filter)) {
return true;
} else if (idNumber.toLowerCase().contains(filter)) {
return true;
} else if (phone.toLowerCase().contains(filter)) {
return true;
} else if (address1.toLowerCase().contains(filter)) {
return true;
} else if (city.toLowerCase().contains(filter)) {
return true;
} else if (contacts
.where((contact) => contact.matchesFilter(filter))
.isNotEmpty) {
return true;
} else if (customValue1.toLowerCase().contains(filter)) {
return true;
} else if (customValue2.toLowerCase().contains(filter)) {
return true;
} else if (customValue3.toLowerCase().contains(filter)) {
return true;
} else if (customValue4.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
name,
vatNumber,
idNumber,
phone,
address1,
city,
postalCode,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
for(final contact in contacts) {
final value = contact.matchesFilterValue(filter);
if (value != null) {
return value;
}
}
filter = filter.toLowerCase();
final contact = contacts.firstWhere(
(contact) => contact.matchesFilter(filter),
orElse: () => null);
if (vatNumber.toLowerCase().contains(filter)) {
return vatNumber;
} else if (idNumber.toLowerCase().contains(filter)) {
return idNumber;
} else if (phone.toLowerCase().contains(filter)) {
return phone;
} else if (address1.toLowerCase().contains(filter)) {
return address1;
} else if (city.toLowerCase().contains(filter)) {
return city;
} else if (contact != null) {
final match = contact.matchesFilterValue(filter);
return match == name ? null : match;
} else if (customValue1.toLowerCase().contains(filter)) {
return customValue1;
} else if (customValue2.toLowerCase().contains(filter)) {
return customValue2;
} else if (customValue3.toLowerCase().contains(filter)) {
return customValue3;
} else if (customValue4.toLowerCase().contains(filter)) {
return customValue4;
}
return null;
return matchesStringsValue(
haystacks: [
name,
vatNumber,
idNumber,
phone,
address1,
city,
postalCode,
customValue1,
customValue2,
customValue3,
customValue4,
],
needle: filter,
);
}
@override

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
part 'webhook_model.g.dart';
@ -186,25 +187,22 @@ abstract class WebhookEntity extends Object
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
filter = filter.toLowerCase();
if (targetUrl.toLowerCase().contains(filter)) {
return true;
}
return false;
return matchesStrings(
haystacks: [
targetUrl,
],
needle: filter,
);
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
return matchesStringsValue(
haystacks: [
targetUrl,
],
needle: filter,
);
}
@override

View File

@ -104,3 +104,42 @@ bool matchesString({String haystack, String needle}) {
});
return RegExp(regExp).hasMatch(haystack.toLowerCase());
}
String matchesStringsValue({
List<String> haystacks,
String needle,
}) {
if (needle == null || needle.isEmpty) {
return null;
}
String match;
haystacks.forEach((haystack) {
final value = matchesStringValue(
haystack: haystack,
needle: needle,
);
if (value != null) {
match = value;
}
});
return match;
}
String matchesStringValue({String haystack, String needle}) {
if (needle == null || needle.isEmpty) {
return null;
}
String regExp = '';
needle.toLowerCase().runes.forEach((int rune) {
final character = String.fromCharCode(rune);
regExp += character + '.*?';
});
if(RegExp(regExp).hasMatch(haystack.toLowerCase())) {
return haystack;
} else {
return null;
}
}