From 81d3fed9b8f1dba68faaeb7aaf8e352f98442435 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 19 Nov 2023 16:25:50 +0200 Subject: [PATCH] Add run_template action --- lib/redux/client/client_actions.dart | 9 ++++ lib/utils/dialogs.dart | 67 ++++++++++++++++++++++++++++ lib/utils/icons.dart | 2 +- 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/lib/redux/client/client_actions.dart b/lib/redux/client/client_actions.dart index 781b35e0b..6057f5002 100644 --- a/lib/redux/client/client_actions.dart +++ b/lib/redux/client/client_actions.dart @@ -540,6 +540,15 @@ void handleClientAction(BuildContext? context, List clients, ), ); break; + case EntityAction.runTemplate: + showDialog( + context: context, + builder: (context) => RunTemplateDialog( + entityType: EntityType.client, + entities: clients, + ), + ); + break; default: print('## Error: action $action not handled in client_actions'); } diff --git a/lib/utils/dialogs.dart b/lib/utils/dialogs.dart index 5bc4ef317..d56c15ee8 100644 --- a/lib/utils/dialogs.dart +++ b/lib/utils/dialogs.dart @@ -7,6 +7,7 @@ import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/main_app.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/ui/app/forms/design_picker.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; @@ -606,3 +607,69 @@ void addToInvoiceDialog({ ); }); } + +class RunTemplateDialog extends StatefulWidget { + const RunTemplateDialog({ + super.key, + required this.entityType, + required this.entities, + }); + + final EntityType entityType; + final List entities; + + @override + State createState() => _RunTemplateDialogState(); +} + +class _RunTemplateDialogState extends State { + String _designId = ''; + + @override + Widget build(BuildContext context) { + final localization = AppLocalization.of(context)!; + + return AlertDialog( + title: Text(localization.runTemplate), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: Text(localization.close.toUpperCase()), + ), + TextButton( + onPressed: () { + // + }, + child: Text(localization.start.toUpperCase()), + ), + ], + content: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + DesignPicker( + entityType: widget.entityType, + label: localization.template, + onSelected: (design) { + _designId = design?.id ?? ''; + }, + ), + SizedBox(height: 16), + Text( + localization.lookup(widget.entities.length == 1 + ? widget.entityType.snakeCase + : widget.entityType.plural), + style: Theme.of(context).textTheme.bodySmall, + ), + SizedBox(height: 8), + ...widget.entities + .map((entity) => Text(entity.listDisplayName)) + .toList(), + ], + ), + ), + ); + } +} diff --git a/lib/utils/icons.dart b/lib/utils/icons.dart index 1e27a3381..b1feced21 100644 --- a/lib/utils/icons.dart +++ b/lib/utils/icons.dart @@ -130,7 +130,7 @@ IconData? getEntityActionIcon(EntityAction? entityAction) { case EntityAction.unlink: return MdiIcons.pipeDisconnected; case EntityAction.runTemplate: - return MdiIcons.arrowRightBoldCircleOutline; + return MdiIcons.arrowRightCircleOutline; default: return null; }