Change to dropdown with copy/open/reactivate

This commit is contained in:
Hillel Coren 2023-11-16 13:41:32 +02:00
parent 0d7b1f3b2c
commit d7713a9c68
2 changed files with 62 additions and 0 deletions

View File

@ -8,10 +8,12 @@ import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/icon_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 'package:url_launcher/url_launcher.dart';
class InvoiceEditContacts extends StatelessWidget {
const InvoiceEditContacts({
@ -61,6 +63,7 @@ class InvoiceEditContacts extends StatelessWidget {
return _ContactListTile(
fullName: contact.fullName,
email: contact.email,
hash: '',
invoice: invoice,
invitation: invitation,
onTap: () => invitation == null
@ -97,6 +100,7 @@ class InvoiceEditContacts extends StatelessWidget {
return _ContactListTile(
fullName: contact.fullName,
email: contact.email,
hash: client?.clientHash ?? '',
invoice: invoice,
invitation: invitation,
onTap: () => invitation == null
@ -114,12 +118,14 @@ class _ContactListTile extends StatelessWidget {
required this.fullName,
required this.email,
required this.invoice,
required this.hash,
this.invitation,
this.onTap,
});
final String fullName;
final String email;
final String hash;
final InvoiceEntity invoice;
final InvitationEntity? invitation;
final Function? onTap;
@ -128,6 +134,8 @@ class _ContactListTile extends StatelessWidget {
Widget build(BuildContext context) {
final localization = AppLocalization.of(context)!;
final store = StoreProvider.of<AppState>(context);
/*
final invitationButton = (invitation?.link ?? '').isNotEmpty
? IconButton(
tooltip: localization.copyLink,
@ -139,6 +147,55 @@ class _ContactListTile extends StatelessWidget {
},
)
: SizedBox();
*/
final invitationButton = (invitation?.link ?? '').isNotEmpty
? PopupMenuButton<String>(
icon: Icon(Icons.more_vert),
itemBuilder: (BuildContext context) {
return [
PopupMenuItem<String>(
child: IconText(
text: localization.viewPortal,
icon: Icons.open_in_new,
),
value: localization.viewPortal,
),
PopupMenuItem<String>(
child: IconText(
text: localization.copyLink,
icon: Icons.copy,
),
value: localization.copyLink,
),
PopupMenuItem<String>(
child: IconText(
text: localization.reactivateEmail,
icon: Icons.check_circle,
),
value: localization.reactivateEmail,
),
];
},
onSelected: (String action) {
var viewLinkWithHash = invitation!.silentLink;
if (!viewLinkWithHash.contains('?')) {
viewLinkWithHash += '?';
}
viewLinkWithHash += '&client_hash=$hash';
if (action == localization.viewPortal) {
launchUrl(Uri.parse(viewLinkWithHash));
} else if (action == localization.copyLink) {
Clipboard.setData(ClipboardData(text: invitation!.link));
showToast(
localization.copiedToClipboard.replaceFirst(':value ', ''));
} else if (action == localization.reactivateEmail) {
//
}
},
)
: SizedBox();
return Padding(
padding: const EdgeInsets.all(10),

View File

@ -18,6 +18,7 @@ mixin LocalizationsProvider on LocaleCodeAware {
static final Map<String, Map<String, String>> _localizedValues = {
'en': {
// STARTER: lang key - do not remove comment
'reactivate_email': 'Reactivate Email',
'template_help': 'Enable using the design as a template',
'delivery_note_design': 'Delivery Note Design',
'statement_design': 'Statement Design',
@ -109970,6 +109971,10 @@ mixin LocalizationsProvider on LocaleCodeAware {
_localizedValues[localeCode]!['template_help'] ??
_localizedValues['en']!['template_help']!;
String get reactivateEmail =>
_localizedValues[localeCode]!['reactivate_email'] ??
_localizedValues['en']!['reactivate_email']!;
// STARTER: lang field - do not remove comment
String lookup(String? key) {