TF-3651 Support mailto url from OpenPaas

This commit is contained in:
DatDang
2025-04-14 16:37:54 +07:00
committed by Dat H. Pham
parent 92a9fe88a5
commit f4fed57e8f
3 changed files with 35 additions and 0 deletions
@@ -33,6 +33,8 @@ extension EmailActionTypeExtension on EmailActionType {
case EmailActionType.editSendingEmail:
case EmailActionType.reopenComposerBrowser:
case EmailActionType.editAsNewEmail:
case EmailActionType.composeFromMailtoUri:
case EmailActionType.composeFromUnsubscribeMailtoLink:
return subject;
default:
return '';
+5
View File
@@ -204,6 +204,11 @@ abstract class RouteUtils {
mapMailto[paramSubject] = subject;
mapMailto[paramBody] = body;
} else if (parsedMailToUri?.path == "/$mailtoPrefix" || parsedMailToUri?.path == "/$mailtoPrefix/") {
final uriPrefixQueryParam = parsedMailToUri?.queryParameters[uriPrefix] ?? '';
final uriFromUriPrefixQueryParam = Uri.tryParse(uriPrefixQueryParam);
if (uriFromUriPrefixQueryParam?.queryParameters.isNotEmpty == true) {
return parseMapMailtoFromUri(mailtoUri?.split('?uri=').last);
}
final to = {
...?parsedMailToUri?.queryParameters[uriPrefix]?.split('$mailtoPrefix:').last.split(ADDRESS_SEPARATOR),
...?parsedMailToUri?.queryParameters[paramTo]?.split(ADDRESS_SEPARATOR)
+28
View File
@@ -224,5 +224,33 @@ void main() {
equals(body)
);
});
test(
'should parse url with mailto uri '
'when the query parameter belongs to the mailto uri',
() {
// arrange
const to = 'to@example.com';
const cc1 = 'cc1@example.com', cc2 = 'cc2@example.com';
const bcc1 = 'bcc1@example.com', bcc2 = 'bcc2@example.com';
const subject = 'Hello';
const body = 'Bye';
const mailtoUri = 'https://example.com/mailto/'
'?uri=mailto:$to'
'?subject=$subject'
'&cc=$cc1,$cc2'
'&bcc=$bcc1,$bcc2'
'&body=$body';
// act
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
// assert
expect(result[RouteUtils.paramMailtoAddress], equals(to));
expect(result[RouteUtils.paramCc], containsAll([cc1, cc2]));
expect(result[RouteUtils.paramBcc], containsAll([bcc1, bcc2]));
expect(result[RouteUtils.paramSubject], equals(subject));
expect(result[RouteUtils.paramBody], equals(body));
});
});
}