From 716dffb1e94c29926e077be219a586ca79f07b33 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Thu, 23 Sep 2021 14:50:04 +0300 Subject: [PATCH] Improve number sorting --- lib/data/models/client_model.dart | 4 +++- lib/data/models/expense_model.dart | 4 +++- lib/data/models/invoice_model.dart | 6 +++--- lib/data/models/task_model.dart | 4 +++- lib/data/models/vendor_model.dart | 4 +++- lib/ui/client/edit/client_edit_details.dart | 1 + 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/data/models/client_model.dart b/lib/data/models/client_model.dart index 4d7aeacf9..9a532d7b3 100644 --- a/lib/data/models/client_model.dart +++ b/lib/data/models/client_model.dart @@ -14,6 +14,7 @@ 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'; +import 'package:collection/collection.dart'; part 'client_model.g.dart'; @@ -396,7 +397,8 @@ abstract class ClientEntity extends Object response = clientA.idNumber.compareTo(clientB.idNumber); break; case ClientFields.number: - response = clientA.number.compareTo(clientB.number); + response = compareNatural( + clientA.number.toLowerCase(), clientB.number.toLowerCase()); break; case ClientFields.website: response = clientA.website diff --git a/lib/data/models/expense_model.dart b/lib/data/models/expense_model.dart index 917c08d25..56cc0f407 100644 --- a/lib/data/models/expense_model.dart +++ b/lib/data/models/expense_model.dart @@ -9,6 +9,7 @@ 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'; +import 'package:collection/collection.dart'; part 'expense_model.g.dart'; @@ -449,7 +450,8 @@ abstract class ExpenseEntity extends Object expenseA.documents.length.compareTo(expenseB.documents.length); break; case ExpenseFields.number: - response = expenseA.number.compareTo(expenseB.number); + response = compareNatural( + expenseA.number.toLowerCase(), expenseB.number.toLowerCase()); break; case ExpenseFields.privateNotes: response = expenseA.privateNotes.compareTo(expenseB.privateNotes); diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index 4e3beca3d..4248beb71 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/money.dart'; import 'package:invoiceninja_flutter/utils/strings.dart'; +import 'package:collection/collection.dart'; part 'invoice_model.g.dart'; @@ -556,9 +557,8 @@ abstract class InvoiceEntity extends Object invoiceBNumber.startsWith(recurringPrefix) ? invoiceBNumber.replaceFirst(recurringPrefix, '') : invoiceBNumber; - response = invoiceANumber - .toLowerCase() - .compareTo(invoiceBNumber.toLowerCase()); + response = compareNatural( + invoiceANumber.toLowerCase(), invoiceBNumber.toLowerCase()); break; case InvoiceFields.amount: response = invoiceA.amount.compareTo(invoiceB.amount); diff --git a/lib/data/models/task_model.dart b/lib/data/models/task_model.dart index acd1cb11a..3f98cdf3e 100644 --- a/lib/data/models/task_model.dart +++ b/lib/data/models/task_model.dart @@ -11,6 +11,7 @@ import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/task_status/task_status_selectors.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/strings.dart'; +import 'package:collection/collection.dart'; part 'task_model.g.dart'; @@ -665,7 +666,8 @@ abstract class TaskEntity extends Object response = taskA.documents.length.compareTo(taskB.documents.length); break; case TaskFields.number: - response = taskA.number.compareTo(taskB.number); + response = compareNatural( + taskA.number.toLowerCase(), taskB.number.toLowerCase()); break; case TaskFields.status: final taskAStatus = taskA.isRunning diff --git a/lib/data/models/vendor_model.dart b/lib/data/models/vendor_model.dart index 5a99806d7..85c9967c5 100644 --- a/lib/data/models/vendor_model.dart +++ b/lib/data/models/vendor_model.dart @@ -7,6 +7,7 @@ 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'; +import 'package:collection/collection.dart'; part 'vendor_model.g.dart'; @@ -264,7 +265,8 @@ abstract class VendorEntity extends Object response = vendorA.documents.length.compareTo(vendorB.documents.length); break; case VendorFields.number: - response = vendorA.number.compareTo(vendorB.number); + response = compareNatural( + vendorA.number.toLowerCase(), vendorB.number.toLowerCase()); break; case VendorFields.address1: response = vendorA.address1.compareTo(vendorB.address1); diff --git a/lib/ui/client/edit/client_edit_details.dart b/lib/ui/client/edit/client_edit_details.dart index 9da6292b2..36a890c02 100644 --- a/lib/ui/client/edit/client_edit_details.dart +++ b/lib/ui/client/edit/client_edit_details.dart @@ -170,6 +170,7 @@ class ClientEditDetailsState extends State { DecoratedFormField( label: localization.number, controller: _numberController, + onSavePressed: viewModel.onSavePressed, ), if (memoizedGroupList(state.groupState.map).isNotEmpty) DynamicSelector(