Implement reactivate email API call
This commit is contained in:
parent
fc24804211
commit
3357341605
|
|
@ -115,7 +115,7 @@ class InvoiceEditContacts extends StatelessWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ContactListTile extends StatelessWidget {
|
class _ContactListTile extends StatefulWidget {
|
||||||
const _ContactListTile({
|
const _ContactListTile({
|
||||||
required this.fullName,
|
required this.fullName,
|
||||||
required this.email,
|
required this.email,
|
||||||
|
|
@ -132,6 +132,13 @@ class _ContactListTile extends StatelessWidget {
|
||||||
final InvitationEntity? invitation;
|
final InvitationEntity? invitation;
|
||||||
final Function? onTap;
|
final Function? onTap;
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<_ContactListTile> createState() => _ContactListTileState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ContactListTileState extends State<_ContactListTile> {
|
||||||
|
bool _showEmailError = true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final localization = AppLocalization.of(context)!;
|
final localization = AppLocalization.of(context)!;
|
||||||
|
|
@ -152,7 +159,7 @@ class _ContactListTile extends StatelessWidget {
|
||||||
: SizedBox();
|
: SizedBox();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
final invitationButton = (invitation?.link ?? '').isNotEmpty
|
final invitationButton = (widget.invitation?.link ?? '').isNotEmpty
|
||||||
? PopupMenuButton<String>(
|
? PopupMenuButton<String>(
|
||||||
icon: Icon(Icons.more_vert),
|
icon: Icon(Icons.more_vert),
|
||||||
itemBuilder: (BuildContext context) {
|
itemBuilder: (BuildContext context) {
|
||||||
|
|
@ -174,16 +181,16 @@ class _ContactListTile extends StatelessWidget {
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
onSelected: (String action) {
|
onSelected: (String action) {
|
||||||
var viewLinkWithHash = invitation!.silentLink;
|
var viewLinkWithHash = widget.invitation!.silentLink;
|
||||||
if (!viewLinkWithHash.contains('?')) {
|
if (!viewLinkWithHash.contains('?')) {
|
||||||
viewLinkWithHash += '?';
|
viewLinkWithHash += '?';
|
||||||
}
|
}
|
||||||
viewLinkWithHash += '&client_hash=$hash';
|
viewLinkWithHash += '&client_hash=${widget.hash}';
|
||||||
|
|
||||||
if (action == localization.viewPortal) {
|
if (action == localization.viewPortal) {
|
||||||
launchUrl(Uri.parse(viewLinkWithHash));
|
launchUrl(Uri.parse(viewLinkWithHash));
|
||||||
} else if (action == localization.copyLink) {
|
} else if (action == localization.copyLink) {
|
||||||
Clipboard.setData(ClipboardData(text: invitation!.link));
|
Clipboard.setData(ClipboardData(text: widget.invitation!.link));
|
||||||
showToast(
|
showToast(
|
||||||
localization.copiedToClipboard.replaceFirst(':value ', ''));
|
localization.copiedToClipboard.replaceFirst(':value ', ''));
|
||||||
} else if (action == localization.reactivateEmail) {
|
} else if (action == localization.reactivateEmail) {
|
||||||
|
|
@ -202,8 +209,8 @@ class _ContactListTile extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
Checkbox(
|
Checkbox(
|
||||||
activeColor: Theme.of(context).colorScheme.secondary,
|
activeColor: Theme.of(context).colorScheme.secondary,
|
||||||
value: invitation != null,
|
value: widget.invitation != null,
|
||||||
onChanged: (value) => onTap!(),
|
onChanged: (value) => widget.onTap!(),
|
||||||
),
|
),
|
||||||
if (store.state.prefState.showPdfPreviewSideBySide)
|
if (store.state.prefState.showPdfPreviewSideBySide)
|
||||||
invitationButton,
|
invitationButton,
|
||||||
|
|
@ -215,33 +222,36 @@ class _ContactListTile extends StatelessWidget {
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
fullName.isNotEmpty
|
widget.fullName.isNotEmpty
|
||||||
? fullName
|
? widget.fullName
|
||||||
: AppLocalization.of(context)!.blankContact,
|
: AppLocalization.of(context)!.blankContact,
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
),
|
),
|
||||||
if (email.isNotEmpty) ...[
|
if (widget.email.isNotEmpty) ...[
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(top: 4),
|
padding: const EdgeInsets.only(top: 4),
|
||||||
child: Text(
|
child: Text(
|
||||||
email,
|
widget.email,
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if ((invitation?.emailStatus ?? '').isNotEmpty)
|
if ((widget.invitation?.emailStatus ?? '').isNotEmpty)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(top: 2),
|
padding: const EdgeInsets.only(top: 2),
|
||||||
child: Text(
|
child: Text(
|
||||||
localization.lookup(invitation!.latestEmailStatus) +
|
localization
|
||||||
|
.lookup(widget.invitation!.latestEmailStatus) +
|
||||||
' • ' +
|
' • ' +
|
||||||
formatDate(
|
formatDate(widget.invitation!.latestEmailStatusDate,
|
||||||
invitation!.latestEmailStatusDate, context),
|
context),
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if ((invitation?.emailError ?? '').isNotEmpty &&
|
if ((widget.invitation?.emailError ?? '').isNotEmpty &&
|
||||||
invitation?.emailStatus !=
|
widget.invitation?.emailStatus !=
|
||||||
InvitationEntity.EMAIL_STATUS_DELIVERED) ...[
|
InvitationEntity.EMAIL_STATUS_DELIVERED &&
|
||||||
|
_showEmailError) ...[
|
||||||
|
if (state.isHosted) ...[
|
||||||
SizedBox(height: 16),
|
SizedBox(height: 16),
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|
@ -249,19 +259,23 @@ class _ContactListTile extends StatelessWidget {
|
||||||
store.dispatch(StartSaving());
|
store.dispatch(StartSaving());
|
||||||
WebClient()
|
WebClient()
|
||||||
.post(
|
.post(
|
||||||
'${credentials.url}/reactivate_email/${invitation!.messageId}',
|
'${credentials.url}/reactivate_email/${widget.invitation!.messageId}',
|
||||||
credentials.token)
|
credentials.token)
|
||||||
.then((value) {
|
.then((value) {
|
||||||
store.dispatch(StopSaving());
|
store.dispatch(StopSaving());
|
||||||
showToast(localization.emailReactivated);
|
showToast(localization.emailReactivated);
|
||||||
|
setState(() {
|
||||||
|
_showEmailError = false;
|
||||||
|
});
|
||||||
}).catchError((error) {
|
}).catchError((error) {
|
||||||
store.dispatch(StopSaving());
|
store.dispatch(StopSaving());
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
child: Text(localization.reactivateEmail)),
|
child: Text(localization.reactivateEmail)),
|
||||||
|
],
|
||||||
SizedBox(height: 16),
|
SizedBox(height: 16),
|
||||||
Text(
|
Text(
|
||||||
invitation!.emailError,
|
widget.invitation!.emailError,
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue