diff --git a/lib/data/models/client_model.dart b/lib/data/models/client_model.dart index fca2b02b6..e698380c1 100644 --- a/lib/data/models/client_model.dart +++ b/lib/data/models/client_model.dart @@ -6,6 +6,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:collection/collection.dart'; +import 'package:diacritic/diacritic.dart'; // Project imports: import 'package:invoiceninja_flutter/constants.dart'; @@ -385,14 +386,15 @@ abstract class ClientEntity extends Object switch (sortField) { case ClientFields.name: - response = clientA.displayName + response = removeDiacritics(clientA.displayName) .toLowerCase() - .compareTo(clientB.displayName.toLowerCase()); + .compareTo(removeDiacritics(clientB.displayName).toLowerCase()); break; case ClientFields.contactName: - response = clientA.primaryContact.fullName + response = removeDiacritics(clientA.primaryContact.fullName) .toLowerCase() - .compareTo(clientB.primaryContact.fullName.toLowerCase()); + .compareTo(removeDiacritics(clientB.primaryContact.fullName) + .toLowerCase()); break; case ClientFields.contactEmail: response = clientA.primaryContact.email diff --git a/lib/data/models/expense_model.dart b/lib/data/models/expense_model.dart index 321c64ba7..e3c89df85 100644 --- a/lib/data/models/expense_model.dart +++ b/lib/data/models/expense_model.dart @@ -3,6 +3,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:collection/collection.dart'; +import 'package:diacritic/diacritic.dart'; // Project imports: import 'package:invoiceninja_flutter/constants.dart'; @@ -412,17 +413,17 @@ abstract class ExpenseEntity extends Object case ExpenseFields.client: final clientA = clientMap[expenseA.clientId] ?? ClientEntity(); final clientB = clientMap[expenseB.clientId] ?? ClientEntity(); - response = clientA.listDisplayName + response = removeDiacritics(clientA.listDisplayName) .toLowerCase() - .compareTo(clientB.listDisplayName.toLowerCase()); + .compareTo(removeDiacritics(clientB.listDisplayName).toLowerCase()); break; case ExpenseFields.vendorId: case ExpenseFields.vendor: final vendorA = vendorMap[expenseA.vendorId] ?? VendorEntity(); final vendorB = vendorMap[expenseB.vendorId] ?? VendorEntity(); - response = vendorA.listDisplayName + response = removeDiacritics(vendorA.listDisplayName) .toLowerCase() - .compareTo(vendorB.listDisplayName.toLowerCase()); + .compareTo(removeDiacritics(vendorB.listDisplayName).toLowerCase()); break; case EntityFields.state: final stateA = diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index e11943395..af6671a91 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -3,6 +3,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:collection/collection.dart'; +import 'package:diacritic/diacritic.dart'; // Project imports: import 'package:invoiceninja_flutter/constants.dart'; @@ -609,8 +610,10 @@ abstract class InvoiceEntity extends Object final InvoiceEntity invoiceB = sortAscending ? invoice : this; switch (sortField) { case InvoiceFields.number: - var invoiceANumber = invoiceA.number ?? ''; - var invoiceBNumber = invoiceB.number ?? ''; + var invoiceANumber = + (invoiceA.number ?? '').isEmpty ? 'ZZZZZZZZZZ' : invoiceA.number; + var invoiceBNumber = + (invoiceB.number ?? '').isEmpty ? 'ZZZZZZZZZZ' : invoiceB.number; invoiceANumber = recurringPrefix.isNotEmpty && //(invoiceA.recurringId ?? '').isNotEmpty && invoiceANumber.startsWith(recurringPrefix) @@ -734,9 +737,9 @@ abstract class InvoiceEntity extends Object case InvoiceFields.client: final clientA = clientMap[invoiceA.clientId] ?? ClientEntity(); final clientB = clientMap[invoiceB.clientId] ?? ClientEntity(); - response = clientA.listDisplayName + response = removeDiacritics(clientA.listDisplayName) .toLowerCase() - .compareTo(clientB.listDisplayName.toLowerCase()); + .compareTo(removeDiacritics(clientB.listDisplayName).toLowerCase()); break; case InvoiceFields.isViewed: response = invoiceB.isViewed ? 1 : -1; diff --git a/lib/data/models/project_model.dart b/lib/data/models/project_model.dart index eed0399e0..c69845e65 100644 --- a/lib/data/models/project_model.dart +++ b/lib/data/models/project_model.dart @@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; +import 'package:diacritic/diacritic.dart'; // Project imports: import 'package:invoiceninja_flutter/data/models/entities.dart'; @@ -220,9 +221,9 @@ abstract class ProjectEntity extends Object case ProjectFields.client: final clientA = clientMap[projectA.clientId] ?? ClientEntity(); final clientB = clientMap[projectB.clientId] ?? ClientEntity(); - response = clientA.listDisplayName + response = removeDiacritics(clientA.listDisplayName) .toLowerCase() - .compareTo(clientB.listDisplayName.toLowerCase()); + .compareTo(removeDiacritics(clientB.listDisplayName).toLowerCase()); break; case ProjectFields.clientNumber: final clientA = clientMap[projectA.clientId] ?? ClientEntity(); diff --git a/lib/data/models/task_model.dart b/lib/data/models/task_model.dart index e2be44020..3f86ebeda 100644 --- a/lib/data/models/task_model.dart +++ b/lib/data/models/task_model.dart @@ -6,6 +6,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:collection/collection.dart'; +import 'package:diacritic/diacritic.dart'; // Project imports: import 'package:invoiceninja_flutter/constants.dart'; @@ -629,9 +630,9 @@ abstract class TaskEntity extends Object case TaskFields.client: final clientA = clientMap[taskA.clientId] ?? ClientEntity(); final clientB = clientMap[taskB.clientId] ?? ClientEntity(); - response = clientA.listDisplayName + response = removeDiacritics(clientA.listDisplayName) .toLowerCase() - .compareTo(clientB.listDisplayName.toLowerCase()); + .compareTo(removeDiacritics(clientB.listDisplayName).toLowerCase()); break; case TaskFields.projectId: case TaskFields.project: diff --git a/lib/data/models/vendor_model.dart b/lib/data/models/vendor_model.dart index abbefdaf9..611c95d23 100644 --- a/lib/data/models/vendor_model.dart +++ b/lib/data/models/vendor_model.dart @@ -3,6 +3,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:collection/collection.dart'; +import 'package:diacritic/diacritic.dart'; // Project imports: import 'package:invoiceninja_flutter/data/models/entities.dart'; @@ -223,8 +224,9 @@ abstract class VendorEntity extends Object switch (sortField) { case VendorFields.name: - response = - vendorA.name.toLowerCase().compareTo(vendorB.name.toLowerCase()); + response = removeDiacritics(vendorA.name) + .toLowerCase() + .compareTo(removeDiacritics(vendorB.name).toLowerCase()); break; case VendorFields.city: response = diff --git a/pubspec.foss.yaml b/pubspec.foss.yaml index ef9de2205..a7279c037 100644 --- a/pubspec.foss.yaml +++ b/pubspec.foss.yaml @@ -57,6 +57,7 @@ dependencies: pointer_interceptor: ^0.9.0 contacts_service: ^0.6.1 super_editor: ^0.1.0 + diacritic: ^0.1.3 # quick_actions: ^0.2.1 # idb_shim: ^1.11.1+1 diff --git a/pubspec.lock b/pubspec.lock index 433cd170f..eb3596028 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -274,6 +274,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" + diacritic: + dependency: "direct main" + description: + name: diacritic + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" extension: dependency: transitive description: diff --git a/pubspec.next.yaml b/pubspec.next.yaml index 53a66eb55..5977c50f2 100644 --- a/pubspec.next.yaml +++ b/pubspec.next.yaml @@ -57,6 +57,7 @@ dependencies: pointer_interceptor: ^0.9.0 contacts_service: ^0.6.1 super_editor: ^0.1.0 + diacritic: ^0.1.3 # quick_actions: ^0.2.1 # idb_shim: ^1.11.1+1 diff --git a/pubspec.yaml b/pubspec.yaml index 53a66eb55..5977c50f2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,6 +57,7 @@ dependencies: pointer_interceptor: ^0.9.0 contacts_service: ^0.6.1 super_editor: ^0.1.0 + diacritic: ^0.1.3 # quick_actions: ^0.2.1 # idb_shim: ^1.11.1+1