Documents

This commit is contained in:
Hillel Coren 2019-07-18 20:22:39 +03:00
parent 07ced3f8cd
commit 83aa9481bc
5 changed files with 27 additions and 18 deletions

View File

@ -87,5 +87,5 @@ List<int> documentsSelector(BuiltMap<int, DocumentEntity> documentMap,
return documentA.compareTo(documentB, DocumentFields.name, true); return documentA.compareTo(documentB, DocumentFields.name, true);
}); });
return list; return list.toList();
} }

View File

@ -11,9 +11,10 @@ import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class DocumentGrid extends StatelessWidget { class DocumentGrid extends StatelessWidget {
const DocumentGrid(this.documents); const DocumentGrid({@required this.documents, @required this.onFileUpload});
final List<int> documents; final List<int> documents;
final Function(String) onFileUpload;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -33,8 +34,7 @@ class DocumentGrid extends StatelessWidget {
onPressed: () async { onPressed: () async {
final image = final image =
await ImagePicker.pickImage(source: ImageSource.camera); await ImagePicker.pickImage(source: ImageSource.camera);
print('image: ${image.path}'); onFileUpload(image.path);
//viewModel.onUpdateImage(context, type, image.path);
}, },
), ),
), ),
@ -48,8 +48,7 @@ class DocumentGrid extends StatelessWidget {
onPressed: () async { onPressed: () async {
final image = await ImagePicker.pickImage( final image = await ImagePicker.pickImage(
source: ImageSource.gallery); source: ImageSource.gallery);
print('image: ${image.path}'); onFileUpload(image.path);
//viewModel.onUpdateImage(context, type, image.path);
}, },
), ),
), ),

View File

@ -110,7 +110,7 @@ class _CustomTabBarViewState extends State<CustomTabBarView> {
), ),
RefreshIndicator( RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context), onRefresh: () => viewModel.onRefreshed(context),
child: ExpenseViewDocuments(expense: viewModel.expense), child: ExpenseViewDocuments(viewModel: viewModel, expense: viewModel.expense),
), ),
], ],
); );

View File

@ -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/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/document_grid.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 { class ExpenseViewDocuments extends StatelessWidget {
const ExpenseViewDocuments({this.expense}); const ExpenseViewDocuments(
{@required this.expense, @required this.viewModel});
final ExpenseViewVM viewModel;
final ExpenseEntity expense; final ExpenseEntity expense;
@override
_ExpenseViewDocumentsState createState() => _ExpenseViewDocumentsState();
}
class _ExpenseViewDocumentsState extends State<ExpenseViewDocuments> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final state = StoreProvider.of<AppState>(context).state; final state = StoreProvider.of<AppState>(context).state;
final expense = widget.expense;
final documentState = state.documentState; final documentState = state.documentState;
final documents = memoizedDocumentsSelector( final documents = memoizedDocumentsSelector(
documentState.map, documentState.list, expense) documentState.map, documentState.list, expense);
.toList();
return DocumentGrid(documents); return DocumentGrid(
documents: documents,
onFileUpload: (path) => viewModel.onFileUpload(context, path),
);
} }
} }

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; 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/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart'; import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
@ -47,6 +48,7 @@ class ExpenseViewVM {
@required this.onEditPressed, @required this.onEditPressed,
@required this.onBackPressed, @required this.onBackPressed,
@required this.onRefreshed, @required this.onRefreshed,
@required this.onFileUpload,
@required this.isSaving, @required this.isSaving,
@required this.isLoading, @required this.isLoading,
@required this.isDirty, @required this.isDirty,
@ -140,6 +142,14 @@ class ExpenseViewVM {
}, },
onEntityAction: (BuildContext context, EntityAction action) => onEntityAction: (BuildContext context, EntityAction action) =>
handleExpenseAction(context, expense, 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(BuildContext) onEditPressed;
final Function onBackPressed; final Function onBackPressed;
final Function(BuildContext) onRefreshed; final Function(BuildContext) onRefreshed;
final Function(BuildContext, String) onFileUpload;
final bool isSaving; final bool isSaving;
final bool isLoading; final bool isLoading;
final bool isDirty; final bool isDirty;