Support for templates

This commit is contained in:
Hillel Coren 2023-11-22 15:18:03 +02:00
parent 1b20ab8174
commit 81119d5f37
1 changed files with 57 additions and 36 deletions

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/main_app.dart';
import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; import 'package:invoiceninja_flutter/redux/task/task_actions.dart';
import 'package:invoiceninja_flutter/redux/task_status/task_status_selectors.dart'; import 'package:invoiceninja_flutter/redux/task_status/task_status_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/forms/design_picker.dart'; import 'package:invoiceninja_flutter/ui/app/forms/design_picker.dart';
import 'package:invoiceninja_flutter/utils/files.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart';
@ -639,7 +640,7 @@ class _RunTemplateDialogState extends State<RunTemplateDialog> {
final credentials = state.credentials; final credentials = state.credentials;
final url = '${credentials.url}/templates/preview/$jobHash'; final url = '${credentials.url}/templates/preview/$jobHash';
while (_data == null) { while (_data == null && mounted) {
await Future.delayed(Duration(seconds: 3)); await Future.delayed(Duration(seconds: 3));
try { try {
@ -669,15 +670,35 @@ class _RunTemplateDialogState extends State<RunTemplateDialog> {
}, },
child: Text(localization.close.toUpperCase()), child: Text(localization.close.toUpperCase()),
), ),
if (_data != null) ...[
TextButton( TextButton(
onPressed: _designId.isEmpty onPressed: () {
setState(() {
_data = null;
});
},
child: Text(
localization.reset.toUpperCase(),
),
),
TextButton(
child: Text(localization.download.toUpperCase()),
onPressed: () {
final design = state.designState.map[_designId]!;
saveDownloadedFile(_data!, design.name);
},
),
] else
TextButton(
onPressed: _designId.isEmpty || _isLoading
? null ? null
: () { : () {
final credentials = state.credentials; final credentials = state.credentials;
final url = final url =
'${credentials.url}/${widget.entityType.pluralApiValue}/bulk'; '${credentials.url}/${widget.entityType.pluralApiValue}/bulk';
final data = { final data = {
'ids': widget.entities.map((entity) => entity.id).toList(), 'ids':
widget.entities.map((entity) => entity.id).toList(),
'entity': widget.entityType.apiValue, 'entity': widget.entityType.apiValue,
'template_id': _designId, 'template_id': _designId,
'send_email': _sendEmail, 'send_email': _sendEmail,