From 83aa9481bcbb08f91ae89689da47c45db5025d85 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Thu, 18 Jul 2019 20:22:39 +0300 Subject: [PATCH] Documents --- lib/redux/document/document_selectors.dart | 2 +- lib/ui/app/document_grid.dart | 9 ++++---- lib/ui/expense/view/expense_view.dart | 2 +- .../expense/view/expense_view_documents.dart | 21 +++++++++---------- lib/ui/expense/view/expense_view_vm.dart | 11 ++++++++++ 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/lib/redux/document/document_selectors.dart b/lib/redux/document/document_selectors.dart index 07e5a2d34..dcd2a9a0e 100644 --- a/lib/redux/document/document_selectors.dart +++ b/lib/redux/document/document_selectors.dart @@ -87,5 +87,5 @@ List documentsSelector(BuiltMap documentMap, return documentA.compareTo(documentB, DocumentFields.name, true); }); - return list; + return list.toList(); } diff --git a/lib/ui/app/document_grid.dart b/lib/ui/app/document_grid.dart index 5541dde00..8ebf34871 100644 --- a/lib/ui/app/document_grid.dart +++ b/lib/ui/app/document_grid.dart @@ -11,9 +11,10 @@ import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class DocumentGrid extends StatelessWidget { - const DocumentGrid(this.documents); + const DocumentGrid({@required this.documents, @required this.onFileUpload}); final List documents; + final Function(String) onFileUpload; @override Widget build(BuildContext context) { @@ -33,8 +34,7 @@ class DocumentGrid extends StatelessWidget { onPressed: () async { final image = await ImagePicker.pickImage(source: ImageSource.camera); - print('image: ${image.path}'); - //viewModel.onUpdateImage(context, type, image.path); + onFileUpload(image.path); }, ), ), @@ -48,8 +48,7 @@ class DocumentGrid extends StatelessWidget { onPressed: () async { final image = await ImagePicker.pickImage( source: ImageSource.gallery); - print('image: ${image.path}'); - //viewModel.onUpdateImage(context, type, image.path); + onFileUpload(image.path); }, ), ), diff --git a/lib/ui/expense/view/expense_view.dart b/lib/ui/expense/view/expense_view.dart index 658e35ced..c46d2b047 100644 --- a/lib/ui/expense/view/expense_view.dart +++ b/lib/ui/expense/view/expense_view.dart @@ -110,7 +110,7 @@ class _CustomTabBarViewState extends State { ), RefreshIndicator( onRefresh: () => viewModel.onRefreshed(context), - child: ExpenseViewDocuments(expense: viewModel.expense), + child: ExpenseViewDocuments(viewModel: viewModel, expense: viewModel.expense), ), ], ); diff --git a/lib/ui/expense/view/expense_view_documents.dart b/lib/ui/expense/view/expense_view_documents.dart index ade55c0b6..d211c771f 100644 --- a/lib/ui/expense/view/expense_view_documents.dart +++ b/lib/ui/expense/view/expense_view_documents.dart @@ -4,26 +4,25 @@ import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; import 'package:invoiceninja_flutter/ui/app/document_grid.dart'; +import 'package:invoiceninja_flutter/ui/expense/view/expense_view_vm.dart'; -class ExpenseViewDocuments extends StatefulWidget { - const ExpenseViewDocuments({this.expense}); +class ExpenseViewDocuments extends StatelessWidget { + const ExpenseViewDocuments( + {@required this.expense, @required this.viewModel}); + final ExpenseViewVM viewModel; final ExpenseEntity expense; - @override - _ExpenseViewDocumentsState createState() => _ExpenseViewDocumentsState(); -} - -class _ExpenseViewDocumentsState extends State { @override Widget build(BuildContext context) { final state = StoreProvider.of(context).state; - final expense = widget.expense; final documentState = state.documentState; final documents = memoizedDocumentsSelector( - documentState.map, documentState.list, expense) - .toList(); + documentState.map, documentState.list, expense); - return DocumentGrid(documents); + return DocumentGrid( + documents: documents, + onFileUpload: (path) => viewModel.onFileUpload(context, path), + ); } } diff --git a/lib/ui/expense/view/expense_view_vm.dart b/lib/ui/expense/view/expense_view_vm.dart index 19512a10d..9bc374ece 100644 --- a/lib/ui/expense/view/expense_view_vm.dart +++ b/lib/ui/expense/view/expense_view_vm.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; +import 'package:invoiceninja_flutter/redux/document/document_actions.dart'; import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; @@ -47,6 +48,7 @@ class ExpenseViewVM { @required this.onEditPressed, @required this.onBackPressed, @required this.onRefreshed, + @required this.onFileUpload, @required this.isSaving, @required this.isLoading, @required this.isDirty, @@ -140,6 +142,14 @@ class ExpenseViewVM { }, onEntityAction: (BuildContext context, EntityAction action) => handleExpenseAction(context, expense, action), + onFileUpload: (BuildContext context, String path) { + print('image: $path'); + final document = DocumentEntity().rebuild((b) => b + ..expenseId = expense.id + ..path = path); + store.dispatch(SaveDocumentRequest( + document: document, completer: snackBarCompleter(context, 'test'))); + }, ); } @@ -151,6 +161,7 @@ class ExpenseViewVM { final Function(BuildContext) onEditPressed; final Function onBackPressed; final Function(BuildContext) onRefreshed; + final Function(BuildContext, String) onFileUpload; final bool isSaving; final bool isLoading; final bool isDirty;