Refactored matchesFilter and matchesFilterValue methods
This commit is contained in:
parent
36a21ae6bc
commit
5155e33bd5
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
return true;
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue