From ec79f7c0552d6713d35ca6c0c6cd6a0122798f2c Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 19 Jan 2021 21:49:58 +0200 Subject: [PATCH] Update models --- lib/data/models/group_model.dart | 2 +- lib/data/repositories/group_repository.dart | 17 +++++++++++++ lib/data/repositories/product_repository.dart | 1 - lib/redux/group/group_middleware.dart | 25 +++++++++++++++++++ lib/ui/group/view/group_view.dart | 6 +++-- 5 files changed, 47 insertions(+), 4 deletions(-) diff --git a/lib/data/models/group_model.dart b/lib/data/models/group_model.dart index 21057d84f..9fac72cdd 100644 --- a/lib/data/models/group_model.dart +++ b/lib/data/models/group_model.dart @@ -172,7 +172,7 @@ abstract class GroupEntity extends Object FormatNumberType get listDisplayAmountType => null; // ignore: unused_element - static void _initializeBuilder(CompanyEntityBuilder builder) => + static void _initializeBuilder(GroupEntityBuilder builder) => builder..documents.replace(BuiltList()); static Serializer get serializer => _$groupEntitySerializer; diff --git a/lib/data/repositories/group_repository.dart b/lib/data/repositories/group_repository.dart index ccef0673b..f8f0ca216 100644 --- a/lib/data/repositories/group_repository.dart +++ b/lib/data/repositories/group_repository.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:core'; import 'package:built_collection/built_collection.dart'; +import 'package:http/http.dart'; import 'package:invoiceninja_flutter/data/models/group_model.dart'; import 'package:invoiceninja_flutter/data/models/serializers.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; @@ -68,4 +69,20 @@ class GroupRepository { return groupResponse.data; } + + Future uploadDocument(Credentials credentials, BaseEntity entity, + MultipartFile multipartFile) async { + final fields = { + '_method': 'put', + }; + + final dynamic response = await webClient.post( + '${credentials.url}/groups/${entity.id}', credentials.token, + data: fields, multipartFile: multipartFile); + + final GroupItemResponse groupResponse = + serializers.deserializeWith(GroupItemResponse.serializer, response); + + return groupResponse.data; + } } diff --git a/lib/data/repositories/product_repository.dart b/lib/data/repositories/product_repository.dart index dc47b90f4..7d7b8abb7 100644 --- a/lib/data/repositories/product_repository.dart +++ b/lib/data/repositories/product_repository.dart @@ -82,7 +82,6 @@ class ProductRepository { '_method': 'put', }; - // TODO remove this include final dynamic response = await webClient.post( '${credentials.url}/products/${entity.id}', credentials.token, data: fields, multipartFile: multipartFile); diff --git a/lib/redux/group/group_middleware.dart b/lib/redux/group/group_middleware.dart index 14097df83..911d5e89d 100644 --- a/lib/redux/group/group_middleware.dart +++ b/lib/redux/group/group_middleware.dart @@ -234,3 +234,28 @@ Middleware _loadGroups(GroupRepository repository) { next(action); }; } + +Middleware _saveDocument(GroupRepository repository) { + return (Store store, dynamic dynamicAction, NextDispatcher next) { + final action = dynamicAction as SaveGroupDocumentRequest; + if (store.state.isEnterprisePlan) { + repository + .uploadDocument( + store.state.credentials, action.group, action.multipartFile) + .then((group) { + store.dispatch(SaveGroupSuccess(group)); + action.completer.complete(null); + }).catchError((Object error) { + print(error); + store.dispatch(SaveGroupDocumentFailure(error)); + action.completer.completeError(error); + }); + } else { + const error = 'Uploading documents requires an enterprise plan'; + store.dispatch(SaveGroupDocumentFailure(error)); + action.completer.completeError(error); + } + + next(action); + }; +} diff --git a/lib/ui/group/view/group_view.dart b/lib/ui/group/view/group_view.dart index 38ef0d70e..6d868b5ea 100644 --- a/lib/ui/group/view/group_view.dart +++ b/lib/ui/group/view/group_view.dart @@ -106,8 +106,10 @@ class _GroupViewState extends State ), DocumentGrid( documents: documents.toList(), - //onUploadDocument: (path) => viewModel.onUploadDocument(context, path), - //onDeleteDocument: (document, password) => viewModel.onDeleteDocument(context, document, password), + onUploadDocument: (path) => + viewModel.onUploadDocument(context, path), + onDeleteDocument: (document, password) => + viewModel.onDeleteDocument(context, document, password), ), ], ),