Improve number sorting

This commit is contained in:
Hillel Coren 2021-09-23 14:50:04 +03:00
parent cc4bec2a38
commit 716dffb1e9
6 changed files with 16 additions and 7 deletions

View File

@ -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/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:invoiceninja_flutter/utils/strings.dart';
import 'package:collection/collection.dart';
part 'client_model.g.dart'; part 'client_model.g.dart';
@ -396,7 +397,8 @@ abstract class ClientEntity extends Object
response = clientA.idNumber.compareTo(clientB.idNumber); response = clientA.idNumber.compareTo(clientB.idNumber);
break; break;
case ClientFields.number: case ClientFields.number:
response = clientA.number.compareTo(clientB.number); response = compareNatural(
clientA.number.toLowerCase(), clientB.number.toLowerCase());
break; break;
case ClientFields.website: case ClientFields.website:
response = clientA.website response = clientA.website

View File

@ -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/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:invoiceninja_flutter/utils/strings.dart';
import 'package:collection/collection.dart';
part 'expense_model.g.dart'; part 'expense_model.g.dart';
@ -449,7 +450,8 @@ abstract class ExpenseEntity extends Object
expenseA.documents.length.compareTo(expenseB.documents.length); expenseA.documents.length.compareTo(expenseB.documents.length);
break; break;
case ExpenseFields.number: case ExpenseFields.number:
response = expenseA.number.compareTo(expenseB.number); response = compareNatural(
expenseA.number.toLowerCase(), expenseB.number.toLowerCase());
break; break;
case ExpenseFields.privateNotes: case ExpenseFields.privateNotes:
response = expenseA.privateNotes.compareTo(expenseB.privateNotes); response = expenseA.privateNotes.compareTo(expenseB.privateNotes);

View File

@ -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/formatting.dart';
import 'package:invoiceninja_flutter/utils/money.dart'; import 'package:invoiceninja_flutter/utils/money.dart';
import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:invoiceninja_flutter/utils/strings.dart';
import 'package:collection/collection.dart';
part 'invoice_model.g.dart'; part 'invoice_model.g.dart';
@ -556,9 +557,8 @@ abstract class InvoiceEntity extends Object
invoiceBNumber.startsWith(recurringPrefix) invoiceBNumber.startsWith(recurringPrefix)
? invoiceBNumber.replaceFirst(recurringPrefix, '') ? invoiceBNumber.replaceFirst(recurringPrefix, '')
: invoiceBNumber; : invoiceBNumber;
response = invoiceANumber response = compareNatural(
.toLowerCase() invoiceANumber.toLowerCase(), invoiceBNumber.toLowerCase());
.compareTo(invoiceBNumber.toLowerCase());
break; break;
case InvoiceFields.amount: case InvoiceFields.amount:
response = invoiceA.amount.compareTo(invoiceB.amount); response = invoiceA.amount.compareTo(invoiceB.amount);

View File

@ -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/redux/task_status/task_status_selectors.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:invoiceninja_flutter/utils/strings.dart';
import 'package:collection/collection.dart';
part 'task_model.g.dart'; part 'task_model.g.dart';
@ -665,7 +666,8 @@ abstract class TaskEntity extends Object
response = taskA.documents.length.compareTo(taskB.documents.length); response = taskA.documents.length.compareTo(taskB.documents.length);
break; break;
case TaskFields.number: case TaskFields.number:
response = taskA.number.compareTo(taskB.number); response = compareNatural(
taskA.number.toLowerCase(), taskB.number.toLowerCase());
break; break;
case TaskFields.status: case TaskFields.status:
final taskAStatus = taskA.isRunning final taskAStatus = taskA.isRunning

View File

@ -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/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:invoiceninja_flutter/utils/strings.dart';
import 'package:collection/collection.dart';
part 'vendor_model.g.dart'; part 'vendor_model.g.dart';
@ -264,7 +265,8 @@ abstract class VendorEntity extends Object
response = vendorA.documents.length.compareTo(vendorB.documents.length); response = vendorA.documents.length.compareTo(vendorB.documents.length);
break; break;
case VendorFields.number: case VendorFields.number:
response = vendorA.number.compareTo(vendorB.number); response = compareNatural(
vendorA.number.toLowerCase(), vendorB.number.toLowerCase());
break; break;
case VendorFields.address1: case VendorFields.address1:
response = vendorA.address1.compareTo(vendorB.address1); response = vendorA.address1.compareTo(vendorB.address1);

View File

@ -170,6 +170,7 @@ class ClientEditDetailsState extends State<ClientEditDetails> {
DecoratedFormField( DecoratedFormField(
label: localization.number, label: localization.number,
controller: _numberController, controller: _numberController,
onSavePressed: viewModel.onSavePressed,
), ),
if (memoizedGroupList(state.groupState.map).isNotEmpty) if (memoizedGroupList(state.groupState.map).isNotEmpty)
DynamicSelector( DynamicSelector(