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

View File

@ -1,7 +1,9 @@
import 'package:flutter/material.dart'; 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/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.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/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/transaction/view/transaction_view_vm.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart'; import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -53,7 +55,10 @@ class _TransactionViewState extends State<TransactionView> {
), ),
), ),
ListDivider(), ListDivider(),
Expanded(child: _MatchInvoices()), Expanded(
child: _MatchInvoices(
viewModel: viewModel,
)),
], ],
), ),
); );
@ -61,7 +66,12 @@ class _TransactionViewState extends State<TransactionView> {
} }
class _MatchInvoices extends StatefulWidget { 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 @override
State<_MatchInvoices> createState() => __MatchInvoicesState(); State<_MatchInvoices> createState() => __MatchInvoicesState();
@ -70,12 +80,23 @@ class _MatchInvoices extends StatefulWidget {
class __MatchInvoicesState extends State<_MatchInvoices> { class __MatchInvoicesState extends State<_MatchInvoices> {
TextEditingController _filterController; TextEditingController _filterController;
FocusNode _focusNode; FocusNode _focusNode;
List<InvoiceEntity> _invoices;
String _filter;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_filterController = TextEditingController(); _filterController = TextEditingController();
_focusNode = FocusNode(); _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 @override
@ -111,9 +132,15 @@ class __MatchInvoicesState extends State<_MatchInvoices> {
), ),
ListDivider(), ListDivider(),
Expanded( Expanded(
child: ListView.builder( child: ListView.separated(
itemCount: 1, separatorBuilder: (context, index) => ListDivider(),
itemBuilder: (BuildContext context, int index) => SizedBox(), itemCount: _invoices.length,
itemBuilder: (BuildContext context, int index) {
return InvoiceListItem(
invoice: _invoices[index],
forceCheckbox: true,
);
},
)), )),
], ],
); );