Code refactor
This commit is contained in:
parent
7252bf81b5
commit
0ac19faa35
|
|
@ -57,8 +57,10 @@ class InvoiceEditContacts extends StatelessWidget {
|
||||||
return ScrollableListView(
|
return ScrollableListView(
|
||||||
children: vendorContacts.map((contact) {
|
children: vendorContacts.map((contact) {
|
||||||
final invitation = invoice.getInvitationForVendorContact(contact);
|
final invitation = invoice.getInvitationForVendorContact(contact);
|
||||||
return _VendorContactListTile(
|
|
||||||
vendorContact: contact,
|
return _ContactListTile(
|
||||||
|
fullName: contact.fullName,
|
||||||
|
email: contact.email,
|
||||||
invoice: invoice,
|
invoice: invoice,
|
||||||
invitation: invitation,
|
invitation: invitation,
|
||||||
onTap: () => invitation == null
|
onTap: () => invitation == null
|
||||||
|
|
@ -92,8 +94,9 @@ class InvoiceEditContacts extends StatelessWidget {
|
||||||
showScrollbar: true,
|
showScrollbar: true,
|
||||||
children: clientContacts.map((contact) {
|
children: clientContacts.map((contact) {
|
||||||
final invitation = invoice.getInvitationForClientContact(contact);
|
final invitation = invoice.getInvitationForClientContact(contact);
|
||||||
return _ClientContactListTile(
|
return _ContactListTile(
|
||||||
clientContact: contact,
|
fullName: contact.fullName,
|
||||||
|
email: contact.email,
|
||||||
invoice: invoice,
|
invoice: invoice,
|
||||||
invitation: invitation,
|
invitation: invitation,
|
||||||
onTap: () => invitation == null
|
onTap: () => invitation == null
|
||||||
|
|
@ -106,16 +109,18 @@ class InvoiceEditContacts extends StatelessWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ClientContactListTile extends StatelessWidget {
|
class _ContactListTile extends StatelessWidget {
|
||||||
const _ClientContactListTile({
|
const _ContactListTile({
|
||||||
required this.clientContact,
|
required this.fullName,
|
||||||
|
required this.email,
|
||||||
required this.invoice,
|
required this.invoice,
|
||||||
this.invitation,
|
this.invitation,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final String fullName;
|
||||||
|
final String email;
|
||||||
final InvoiceEntity invoice;
|
final InvoiceEntity invoice;
|
||||||
final ClientContactEntity clientContact;
|
|
||||||
final InvitationEntity? invitation;
|
final InvitationEntity? invitation;
|
||||||
final Function? onTap;
|
final Function? onTap;
|
||||||
|
|
||||||
|
|
@ -157,113 +162,16 @@ class _ClientContactListTile extends StatelessWidget {
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
clientContact.fullName.isNotEmpty
|
fullName.isNotEmpty
|
||||||
? clientContact.fullName
|
? fullName
|
||||||
: AppLocalization.of(context)!.blankContact,
|
: AppLocalization.of(context)!.blankContact,
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
),
|
),
|
||||||
if (clientContact.email.isNotEmpty) ...[
|
if (email.isNotEmpty) ...[
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(top: 4),
|
padding: const EdgeInsets.only(top: 4),
|
||||||
child: Text(
|
child: Text(
|
||||||
clientContact.email,
|
email,
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
if ((invitation?.emailStatus ?? '').isNotEmpty)
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 2),
|
|
||||||
child: Text(
|
|
||||||
localization.lookup(invitation!.latestEmailStatus) +
|
|
||||||
' • ' +
|
|
||||||
formatDate(
|
|
||||||
invitation!.latestEmailStatusDate, context),
|
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
if ((invitation?.emailError ?? '').isNotEmpty &&
|
|
||||||
invitation?.emailStatus !=
|
|
||||||
InvitationEntity.EMAIL_STATUS_DELIVERED)
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 8),
|
|
||||||
child: Text(
|
|
||||||
invitation!.emailError,
|
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 8),
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
if (!store.state.prefState.showPdfPreviewSideBySide) invitationButton,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class _VendorContactListTile extends StatelessWidget {
|
|
||||||
const _VendorContactListTile({
|
|
||||||
required this.vendorContact,
|
|
||||||
required this.invoice,
|
|
||||||
this.invitation,
|
|
||||||
this.onTap,
|
|
||||||
});
|
|
||||||
|
|
||||||
final InvoiceEntity invoice;
|
|
||||||
final VendorContactEntity vendorContact;
|
|
||||||
final InvitationEntity? invitation;
|
|
||||||
final Function? onTap;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
final localization = AppLocalization.of(context)!;
|
|
||||||
final store = StoreProvider.of<AppState>(context);
|
|
||||||
final invitationButton = (invitation?.link ?? '').isNotEmpty
|
|
||||||
? IconButton(
|
|
||||||
tooltip: localization.copyLink,
|
|
||||||
icon: Icon(Icons.copy),
|
|
||||||
onPressed: () {
|
|
||||||
Clipboard.setData(ClipboardData(text: invitation!.link));
|
|
||||||
showToast(localization.copiedToClipboard.replaceFirst(
|
|
||||||
':value', invitation!.link.substring(0, 40) + '...'));
|
|
||||||
},
|
|
||||||
)
|
|
||||||
: SizedBox();
|
|
||||||
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.all(10),
|
|
||||||
child: Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Column(
|
|
||||||
children: [
|
|
||||||
Checkbox(
|
|
||||||
activeColor: Theme.of(context).colorScheme.secondary,
|
|
||||||
value: invitation != null,
|
|
||||||
onChanged: (value) => onTap!(),
|
|
||||||
),
|
|
||||||
if (store.state.prefState.showPdfPreviewSideBySide)
|
|
||||||
invitationButton,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(width: 8),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
vendorContact.fullName.isNotEmpty
|
|
||||||
? vendorContact.fullName
|
|
||||||
: AppLocalization.of(context)!.blankContact,
|
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
|
||||||
),
|
|
||||||
if (vendorContact.email.isNotEmpty) ...[
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 4),
|
|
||||||
child: Text(
|
|
||||||
vendorContact.email,
|
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue