Transactions

This commit is contained in:
Hillel Coren 2022-09-20 17:13:24 +03:00
parent 6d3c906b67
commit 0dc6dc711e
2 changed files with 48 additions and 12 deletions

View File

@ -23,11 +23,15 @@ class InvoiceListItem extends StatelessWidget {
@required this.invoice,
this.filter,
this.showCheckbox = true,
this.forceCheckbox = false,
this.forceChecked = false,
});
final InvoiceEntity invoice;
final String filter;
final bool showCheckbox;
final bool forceCheckbox;
final bool forceChecked;
@override
Widget build(BuildContext context) {
@ -37,8 +41,11 @@ class InvoiceListItem extends StatelessWidget {
final uiState = state.uiState;
final invoiceUIState = uiState.invoiceUIState;
final listUIState = state.getUIState(invoice.entityType).listUIState;
final isInMultiselect = showCheckbox && listUIState.isInMultiselect();
final isChecked = isInMultiselect && listUIState.isSelected(invoice.id);
final isInMultiselect =
forceCheckbox || (showCheckbox && listUIState.isInMultiselect());
final isChecked = forceCheckbox
? forceChecked
: isInMultiselect && listUIState.isSelected(invoice.id);
final textStyle = TextStyle(fontSize: 16);
final localization = AppLocalization.of(context);
final filterMatch = filter != null && filter.isNotEmpty
@ -69,11 +76,13 @@ class InvoiceListItem extends StatelessWidget {
}
return DismissibleEntity(
isSelected: isDesktop(context) &&
invoice.id ==
(uiState.isEditing
? invoiceUIState.editing.id
: invoiceUIState.selectedId),
isSelected: forceCheckbox
? forceChecked
: isDesktop(context) &&
invoice.id ==
(uiState.isEditing
? invoiceUIState.editing.id
: invoiceUIState.selectedId),
showCheckbox: showCheckbox,
userCompany: state.userCompany,
entity: invoice,

View File

@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/invoice_model.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/search_text.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_list_item.dart';
import 'package:invoiceninja_flutter/ui/transaction/view/transaction_view_vm.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -53,7 +55,10 @@ class _TransactionViewState extends State<TransactionView> {
),
),
ListDivider(),
Expanded(child: _MatchInvoices()),
Expanded(
child: _MatchInvoices(
viewModel: viewModel,
)),
],
),
);
@ -61,7 +66,12 @@ class _TransactionViewState extends State<TransactionView> {
}
class _MatchInvoices extends StatefulWidget {
const _MatchInvoices({Key key}) : super(key: key);
const _MatchInvoices({
Key key,
@required this.viewModel,
}) : super(key: key);
final TransactionViewVM viewModel;
@override
State<_MatchInvoices> createState() => __MatchInvoicesState();
@ -70,12 +80,23 @@ class _MatchInvoices extends StatefulWidget {
class __MatchInvoicesState extends State<_MatchInvoices> {
TextEditingController _filterController;
FocusNode _focusNode;
List<InvoiceEntity> _invoices;
String _filter;
@override
void initState() {
super.initState();
_filterController = TextEditingController();
_focusNode = FocusNode();
updateInvoiceList();
}
void updateInvoiceList() {
final invoiceState = widget.viewModel.state.invoiceState;
_invoices = invoiceState.map.values.toList();
_invoices
.sort((invoiceA, invoiceB) => invoiceB.date.compareTo(invoiceA.date));
}
@override
@ -111,9 +132,15 @@ class __MatchInvoicesState extends State<_MatchInvoices> {
),
ListDivider(),
Expanded(
child: ListView.builder(
itemCount: 1,
itemBuilder: (BuildContext context, int index) => SizedBox(),
child: ListView.separated(
separatorBuilder: (context, index) => ListDivider(),
itemCount: _invoices.length,
itemBuilder: (BuildContext context, int index) {
return InvoiceListItem(
invoice: _invoices[index],
forceCheckbox: true,
);
},
)),
],
);