From 4dcd5acabfaca4be3f0016f6e31c0b51f533210c Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 23 Oct 2023 18:35:03 +0300 Subject: [PATCH] Show email status/errors --- .../invoice/edit/invoice_edit_contacts.dart | 69 +++++++++++++++---- .../invoice/view/invoice_view_contacts.dart | 2 +- 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/lib/ui/invoice/edit/invoice_edit_contacts.dart b/lib/ui/invoice/edit/invoice_edit_contacts.dart index 65c19778b..a13fb0389 100644 --- a/lib/ui/invoice/edit/invoice_edit_contacts.dart +++ b/lib/ui/invoice/edit/invoice_edit_contacts.dart @@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart'; +import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import '../../../redux/app/app_state.dart'; @@ -121,11 +122,11 @@ class _ClientContactListTile extends StatelessWidget { @override Widget build(BuildContext context) { - final localization = AppLocalization.of(context); + final localization = AppLocalization.of(context)!; final store = StoreProvider.of(context); final invitationButton = (invitation?.link ?? '').isNotEmpty ? IconButton( - tooltip: localization!.copyLink, + tooltip: localization.copyLink, icon: Icon(Icons.copy), onPressed: () { Clipboard.setData(ClipboardData(text: invitation!.link)); @@ -162,11 +163,33 @@ class _ClientContactListTile extends StatelessWidget { : AppLocalization.of(context)!.blankContact, style: Theme.of(context).textTheme.titleMedium, ), - if (clientContact.email.isNotEmpty) - Text( - clientContact.email, - style: Theme.of(context).textTheme.bodySmall, + if (clientContact.email.isNotEmpty) ...[ + Padding( + padding: const EdgeInsets.only(top: 4), + child: Text( + clientContact.email, + style: Theme.of(context).textTheme.bodySmall, + ), ), + if ((invitation?.emailStatus ?? '').isNotEmpty) + Padding( + padding: const EdgeInsets.only(top: 2), + child: Text( + localization.lookup(invitation!.emailStatus) + + ' • ' + + formatDate(invitation!.sentDate, context), + style: Theme.of(context).textTheme.bodySmall, + ), + ), + if ((invitation?.emailError ?? '').isNotEmpty) + Padding( + padding: const EdgeInsets.only(top: 8), + child: Text( + invitation!.emailError, + style: Theme.of(context).textTheme.bodySmall, + ), + ), + ] ], ), ), @@ -192,11 +215,11 @@ class _VendorContactListTile extends StatelessWidget { @override Widget build(BuildContext context) { - final localization = AppLocalization.of(context); + final localization = AppLocalization.of(context)!; final store = StoreProvider.of(context); final invitationButton = (invitation?.link ?? '').isNotEmpty ? IconButton( - tooltip: localization!.copyLink, + tooltip: localization.copyLink, icon: Icon(Icons.copy), onPressed: () { Clipboard.setData(ClipboardData(text: invitation!.link)); @@ -233,11 +256,33 @@ class _VendorContactListTile extends StatelessWidget { : AppLocalization.of(context)!.blankContact, style: Theme.of(context).textTheme.titleMedium, ), - if (vendorContact.email.isNotEmpty) - Text( - vendorContact.email, - style: Theme.of(context).textTheme.bodySmall, + if (vendorContact.email.isNotEmpty) ...[ + Padding( + padding: const EdgeInsets.only(top: 4), + child: Text( + vendorContact.email, + style: Theme.of(context).textTheme.bodySmall, + ), ), + if ((invitation?.emailStatus ?? '').isNotEmpty) + Padding( + padding: const EdgeInsets.only(top: 2), + child: Text( + localization.lookup(invitation!.emailStatus) + + ' • ' + + formatDate(invitation!.sentDate, context), + style: Theme.of(context).textTheme.bodySmall, + ), + ), + if ((invitation?.emailError ?? '').isNotEmpty) + Padding( + padding: const EdgeInsets.only(top: 8), + child: Text( + invitation!.emailError, + style: Theme.of(context).textTheme.bodySmall, + ), + ), + ], ], ), ), diff --git a/lib/ui/invoice/view/invoice_view_contacts.dart b/lib/ui/invoice/view/invoice_view_contacts.dart index 7a2eb44ac..f1dd49937 100644 --- a/lib/ui/invoice/view/invoice_view_contacts.dart +++ b/lib/ui/invoice/view/invoice_view_contacts.dart @@ -127,7 +127,7 @@ class _InvitationListTile extends StatelessWidget { formatDate(invitation.viewedDate, context, showTime: true), ), ), - if (invitation.emailStatus.isNotEmpty) + if (invitation.emailError.isNotEmpty) CopyToClipboard( value: invitation.emailError, child: Padding(