Refactor
This commit is contained in:
parent
85ea508ef4
commit
58d9dc8fc8
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'client_model.g.dart';
|
part 'client_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -288,7 +289,10 @@ abstract class ClientEntity extends Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<ClientEntity> get serializer => _$clientEntitySerializer;
|
static Serializer<ClientEntity> get serializer => _$clientEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
@ -395,7 +399,10 @@ abstract class ContactEntity extends Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<ContactEntity> get serializer => _$contactEntitySerializer;
|
static Serializer<ContactEntity> get serializer => _$contactEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'credit_model.g.dart';
|
part 'credit_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -122,7 +123,10 @@ abstract class CreditEntity extends Object with BaseEntity implements Built<Cred
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<CreditEntity> get serializer => _$creditEntitySerializer;
|
static Serializer<CreditEntity> get serializer => _$creditEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'entities.g.dart';
|
part 'entities.g.dart';
|
||||||
|
|
||||||
|
|
@ -65,7 +66,8 @@ abstract class SelectableEntity {
|
||||||
|
|
||||||
String get listDisplayName => 'Error: listDisplayName not set';
|
String get listDisplayName => 'Error: listDisplayName not set';
|
||||||
|
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class BaseEntity extends Object with SelectableEntity {
|
abstract class BaseEntity extends Object with SelectableEntity {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'expense_model.g.dart';
|
part 'expense_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -198,7 +199,10 @@ abstract class ExpenseEntity extends Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<ExpenseEntity> get serializer => _$expenseEntitySerializer;
|
static Serializer<ExpenseEntity> get serializer => _$expenseEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
@ -235,7 +239,10 @@ abstract class ExpenseCategoryEntity extends Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
String get name;
|
String get name;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -336,7 +336,10 @@ abstract class InvoiceEntity extends Object with BaseEntity, CalculateInvoiceTot
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
bool get isPastDue {
|
bool get isPastDue {
|
||||||
return ! isDeleted && isPublic && balance > 0 && DateTime.tryParse(dueDate).isBefore(DateTime.now());
|
return ! isDeleted && isPublic && balance > 0 && DateTime.tryParse(dueDate).isBefore(DateTime.now());
|
||||||
|
|
@ -433,7 +436,10 @@ abstract class InvoiceItemEntity extends Object with BaseEntity implements Built
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<InvoiceItemEntity> get serializer => _$invoiceItemEntitySerializer;
|
static Serializer<InvoiceItemEntity> get serializer => _$invoiceItemEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
@ -493,7 +499,10 @@ abstract class InvitationEntity extends Object with BaseEntity implements Built<
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<InvitationEntity> get serializer => _$invitationEntitySerializer;
|
static Serializer<InvitationEntity> get serializer => _$invitationEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'payment_model.g.dart';
|
part 'payment_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -133,7 +134,10 @@ abstract class PaymentEntity extends Object with BaseEntity implements Built<Pay
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<PaymentEntity> get serializer => _$paymentEntitySerializer;
|
static Serializer<PaymentEntity> get serializer => _$paymentEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
import 'package:invoiceninja/data/models/invoice_model.dart';
|
import 'package:invoiceninja/data/models/invoice_model.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'product_model.g.dart';
|
part 'product_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -102,6 +103,9 @@ abstract class ProductEntity extends Object
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => cost;
|
double get listDisplayAmount => cost;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
InvoiceItemEntity get asInvoiceItem {
|
InvoiceItemEntity get asInvoiceItem {
|
||||||
return InvoiceItemEntity().rebuild((b) => b
|
return InvoiceItemEntity().rebuild((b) => b
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'project_model.g.dart';
|
part 'project_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -131,7 +132,10 @@ abstract class ProjectEntity extends Object with BaseEntity implements Built<Pro
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<ProjectEntity> get serializer => _$projectEntitySerializer;
|
static Serializer<ProjectEntity> get serializer => _$projectEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ abstract class CountryEntity extends Object with SelectableEntity implements Bui
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
static Serializer<CountryEntity> get serializer => _$countryEntitySerializer;
|
static Serializer<CountryEntity> get serializer => _$countryEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ abstract class CurrencyEntity extends Object with SelectableEntity implements Bu
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
static Serializer<CurrencyEntity> get serializer => _$currencyEntitySerializer;
|
static Serializer<CurrencyEntity> get serializer => _$currencyEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
@ -83,7 +83,7 @@ abstract class LanguageEntity extends Object with SelectableEntity implements Bu
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
static Serializer<LanguageEntity> get serializer => _$languageEntitySerializer;
|
static Serializer<LanguageEntity> get serializer => _$languageEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'task_model.g.dart';
|
part 'task_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -136,7 +137,10 @@ abstract class TaskEntity extends Object with BaseEntity implements Built<TaskEn
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<TaskEntity> get serializer => _$taskEntitySerializer;
|
static Serializer<TaskEntity> get serializer => _$taskEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja/data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
|
|
||||||
part 'vendor_model.g.dart';
|
part 'vendor_model.g.dart';
|
||||||
|
|
||||||
|
|
@ -177,7 +178,10 @@ abstract class VendorEntity extends Object with BaseEntity implements Built<Vend
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<VendorEntity> get serializer => _$vendorEntitySerializer;
|
static Serializer<VendorEntity> get serializer => _$vendorEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
@ -238,7 +242,10 @@ abstract class VendorContactEntity extends Object with BaseEntity implements Bui
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
double get listDisplayAmount => 0.0;
|
double get listDisplayAmount => null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||||
|
|
||||||
static Serializer<VendorContactEntity> get serializer => _$vendorContactEntitySerializer;
|
static Serializer<VendorContactEntity> get serializer => _$vendorContactEntitySerializer;
|
||||||
}
|
}
|
||||||
|
|
@ -3,7 +3,19 @@ import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:invoiceninja/data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import 'package:invoiceninja/redux/ui/list_ui_state.dart';
|
import 'package:invoiceninja/redux/ui/list_ui_state.dart';
|
||||||
|
|
||||||
var memoizedProductList = memo3((
|
var memoizedProductList = memo1((BuiltMap<int, ProductEntity> productMap) =>
|
||||||
|
productList(productMap));
|
||||||
|
|
||||||
|
List<int> productList(BuiltMap<int, ProductEntity> productMap) {
|
||||||
|
final list = productMap.keys.where((productId) => productMap[productId].isActive).toList();
|
||||||
|
|
||||||
|
list.sort((idA, idB) => productMap[idA].listDisplayName
|
||||||
|
.compareTo(productMap[idB].listDisplayName));
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
var memoizedFilteredProductList = memo3((
|
||||||
BuiltMap<int, ProductEntity> productMap,
|
BuiltMap<int, ProductEntity> productMap,
|
||||||
BuiltList<int> productList,
|
BuiltList<int> productList,
|
||||||
ListUIState productListState) => visibleProductsSelector(productMap, productList, productListState)
|
ListUIState productListState) => visibleProductsSelector(productMap, productList, productListState)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:built_collection/built_collection.dart';
|
import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja/data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
import 'package:invoiceninja/utils/localization.dart';
|
import 'package:invoiceninja/utils/localization.dart';
|
||||||
|
|
||||||
class EntityDropdown extends StatefulWidget {
|
class EntityDropdown extends StatefulWidget {
|
||||||
|
|
@ -149,6 +150,10 @@ class _EntityDropdownDialogState extends State<EntityDropdownDialog> {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(entity.listDisplayName),
|
child: Text(entity.listDisplayName),
|
||||||
),
|
),
|
||||||
|
entity.listDisplayAmount != null
|
||||||
|
? Text(formatNumber(entity.listDisplayAmount, context,
|
||||||
|
formatNumberType: entity.listDisplayAmountType))
|
||||||
|
: Container(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
subtitle: subtitle != null ? Text(subtitle, maxLines: 2) : null,
|
subtitle: subtitle != null ? Text(subtitle, maxLines: 2) : null,
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ class _InvoiceEditState extends State<InvoiceEdit>
|
||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return InvoiceItemSelector(
|
return InvoiceItemSelector(
|
||||||
|
productMap: viewModel.productMap,
|
||||||
onItemsSelected: viewModel.onItemsAdded,
|
onItemsSelected: viewModel.onItemsAdded,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
|
|
@ -37,6 +38,7 @@ class InvoiceEditVM {
|
||||||
final CompanyEntity company;
|
final CompanyEntity company;
|
||||||
final InvoiceEntity invoice;
|
final InvoiceEntity invoice;
|
||||||
final InvoiceEntity origInvoice;
|
final InvoiceEntity origInvoice;
|
||||||
|
final BuiltMap<int, ProductEntity> productMap;
|
||||||
final Function(BuildContext) onSavePressed;
|
final Function(BuildContext) onSavePressed;
|
||||||
final Function(BuildContext, EntityAction) onActionSelected;
|
final Function(BuildContext, EntityAction) onActionSelected;
|
||||||
final Function(List<InvoiceItemEntity>) onItemsAdded;
|
final Function(List<InvoiceItemEntity>) onItemsAdded;
|
||||||
|
|
@ -47,6 +49,7 @@ class InvoiceEditVM {
|
||||||
@required this.company,
|
@required this.company,
|
||||||
@required this.invoice,
|
@required this.invoice,
|
||||||
@required this.origInvoice,
|
@required this.origInvoice,
|
||||||
|
@required this.productMap,
|
||||||
@required this.onSavePressed,
|
@required this.onSavePressed,
|
||||||
@required this.onItemsAdded,
|
@required this.onItemsAdded,
|
||||||
@required this.onBackPressed,
|
@required this.onBackPressed,
|
||||||
|
|
@ -61,6 +64,7 @@ class InvoiceEditVM {
|
||||||
return InvoiceEditVM(
|
return InvoiceEditVM(
|
||||||
company: state.selectedCompany,
|
company: state.selectedCompany,
|
||||||
isLoading: state.isLoading,
|
isLoading: state.isLoading,
|
||||||
|
productMap: state.selectedCompanyState.productState.map,
|
||||||
invoice: invoice,
|
invoice: invoice,
|
||||||
origInvoice: store.state.invoiceState.map[invoice.id],
|
origInvoice: store.state.invoiceState.map[invoice.id],
|
||||||
onBackPressed: () =>
|
onBackPressed: () =>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
|
import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:invoiceninja/data/models/invoice_model.dart';
|
import 'package:invoiceninja/data/models/invoice_model.dart';
|
||||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:invoiceninja/utils/formatting.dart';
|
||||||
import 'package:invoiceninja/utils/localization.dart';
|
import 'package:invoiceninja/utils/localization.dart';
|
||||||
|
|
||||||
class InvoiceItemSelector extends StatefulWidget {
|
class InvoiceItemSelector extends StatefulWidget {
|
||||||
const InvoiceItemSelector({this.state, this.onItemsSelected});
|
const InvoiceItemSelector({
|
||||||
|
@required this.productMap,
|
||||||
|
this.onItemsSelected,
|
||||||
|
});
|
||||||
|
|
||||||
final AppState state;
|
final BuiltMap<int, ProductEntity> productMap;
|
||||||
final Function(List<InvoiceItemEntity>) onItemsSelected;
|
final Function(List<InvoiceItemEntity>) onItemsSelected;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -35,7 +41,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector> {
|
||||||
final List<InvoiceItemEntity> items = [];
|
final List<InvoiceItemEntity> items = [];
|
||||||
|
|
||||||
_selectedIds.forEach((entityId) {
|
_selectedIds.forEach((entityId) {
|
||||||
final product = widget.state.productState.map[entityId];
|
final product = widget.productMap[entityId];
|
||||||
items.add(product.asInvoiceItem);
|
items.add(product.asInvoiceItem);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -130,22 +136,20 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _entityList() {
|
Widget _entityList() {
|
||||||
final state = widget.state.selectedCompanyState.productState;
|
final matches = memoizedProductList(widget.productMap).where((entityId) {
|
||||||
final matches = state.list
|
final entity = widget.productMap[entityId];
|
||||||
.where((entityId) {
|
return entity.isActive && entity.matchesSearch(_filter);
|
||||||
final entity = state.map[entityId];
|
}).toList();
|
||||||
return entity.isActive && entity.matchesSearch(_filter);
|
|
||||||
})
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
matches.sort((idA, idB) => state.map[idA].compareTo(state.map[idB]));
|
matches.sort((idA, idB) =>
|
||||||
|
widget.productMap[idA].compareTo(widget.productMap[idB]));
|
||||||
|
|
||||||
return ListView.builder(
|
return ListView.builder(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
itemCount: matches.length,
|
itemCount: matches.length,
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
final int entityId = matches[index];
|
final int entityId = matches[index];
|
||||||
final entity = state.map[entityId];
|
final entity = widget.productMap[entityId];
|
||||||
final String subtitle = entity.matchesSearchValue(_filter);
|
final String subtitle = entity.matchesSearchValue(_filter);
|
||||||
return ListTile(
|
return ListTile(
|
||||||
dense: true,
|
dense: true,
|
||||||
|
|
@ -158,7 +162,10 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector> {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(entity.listDisplayName),
|
child: Text(entity.listDisplayName),
|
||||||
),
|
),
|
||||||
//Text(entity.listDisplayAmount),
|
entity.listDisplayAmount != null
|
||||||
|
? Text(formatNumber(entity.listDisplayAmount, context,
|
||||||
|
formatNumberType: entity.listDisplayAmountType))
|
||||||
|
: Container(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
subtitle: subtitle != null ? Text(subtitle, maxLines: 2) : null,
|
subtitle: subtitle != null ? Text(subtitle, maxLines: 2) : null,
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ class ProductListVM {
|
||||||
}
|
}
|
||||||
|
|
||||||
return ProductListVM(
|
return ProductListVM(
|
||||||
productList: memoizedProductList(store.state.productState.map, store.state.productState.list, store.state.productListState),
|
productList: memoizedFilteredProductList(store.state.productState.map, store.state.productState.list, store.state.productListState),
|
||||||
productMap: store.state.productState.map,
|
productMap: store.state.productState.map,
|
||||||
isLoading: store.state.isLoading,
|
isLoading: store.state.isLoading,
|
||||||
isLoaded: store.state.productState.isLoaded,
|
isLoaded: store.state.productState.isLoaded,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue