Change to dropdown with copy/open/reactivate
This commit is contained in:
parent
0d7b1f3b2c
commit
d7713a9c68
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue