import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items_desktop.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items_vm.dart'; import 'package:redux/redux.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; class QuoteEditItemsScreen extends StatelessWidget { const QuoteEditItemsScreen({ Key key, }) : super(key: key); @override Widget build(BuildContext context) { return StoreConnector( converter: (Store store) { return QuoteEditItemsVM.fromStore(store); }, builder: (context, viewModel) { if (viewModel.state.prefState.isDesktop) { return InvoiceEditItemsDesktop( viewModel: viewModel, ); } else { return InvoiceEditItems( viewModel: viewModel, ); } }, ); } } class QuoteEditItemsVM extends EntityEditItemsVM { QuoteEditItemsVM({ AppState state, CompanyEntity company, InvoiceEntity invoice, int invoiceItemIndex, Function addLineItem, Function deleteLineItem, Function(int) onRemoveInvoiceItemPressed, Function onDoneInvoiceItemPressed, Function(InvoiceItemEntity, int) onChangedInvoiceItem, }) : super( state: state, company: company, invoice: invoice, addLineItem: addLineItem, deleteLineItem: deleteLineItem, invoiceItemIndex: invoiceItemIndex, onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed, onDoneInvoiceItemPressed: onDoneInvoiceItemPressed, onChangedInvoiceItem: onChangedInvoiceItem, ); factory QuoteEditItemsVM.fromStore(Store store) { final AppState state = store.state; final quote = state.quoteUIState.editing; return QuoteEditItemsVM( state: state, company: state.company, invoice: quote, invoiceItemIndex: state.quoteUIState.editingItemIndex, onRemoveInvoiceItemPressed: (index) => store.dispatch(DeleteQuoteItem(index)), onDoneInvoiceItemPressed: () => store.dispatch(EditQuoteItem()), onChangedInvoiceItem: (quoteItem, index) { if (index == quote.lineItems.length) { store.dispatch(AddQuoteItem(quoteItem: quoteItem)); } else { store.dispatch(UpdateQuoteItem(quoteItem: quoteItem, index: index)); } }); } }