// Dart imports: import 'dart:convert'; import 'dart:core'; // Package imports: import 'package:built_collection/built_collection.dart'; // Project imports: import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/serializers.dart'; import 'package:invoiceninja_flutter/data/web_client.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; class DocumentRepository { const DocumentRepository({ this.webClient = const WebClient(), }); final WebClient webClient; Future loadItem( Credentials credentials, String entityId) async { final dynamic response = await webClient.get( '${credentials.url}/documents/$entityId', credentials.token); final DocumentItemResponse documentResponse = serializers.deserializeWith(DocumentItemResponse.serializer, response); return documentResponse.data; } Future> loadList(Credentials credentials) async { final url = credentials.url + '/documents?'; final dynamic response = await webClient.get(url, credentials.token); final DocumentListResponse documentResponse = serializers.deserializeWith(DocumentListResponse.serializer, response); return documentResponse.data; } Future> bulkAction( Credentials credentials, List ids, EntityAction action) async { if (ids.length > kMaxEntitiesPerBulkAction && action.applyMaxLimit) { ids = ids.sublist(0, kMaxEntitiesPerBulkAction); } final url = credentials.url + '/documents/bulk?per_page=$kMaxEntitiesPerBulkAction'; final dynamic response = await webClient.post(url, credentials.token, data: json.encode({'ids': ids, 'action': action.toApiParam()})); final DocumentListResponse documentResponse = serializers.deserializeWith(DocumentListResponse.serializer, response); return documentResponse.data.toList(); } Future delete(Credentials credentials, String documentId, String password, String idToken) async { await webClient.delete( '${credentials.url}/documents/$documentId', credentials.token, password: password, idToken: idToken, ); return true; } }