Documents
This commit is contained in:
parent
07ced3f8cd
commit
83aa9481bc
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue