feat: Add bounce and complaint filter to activity feed
This commit is contained in:
@@ -480,6 +480,21 @@ export class ActivityService {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Email complaint
|
||||||
|
if (email.complainedAt && (!types || types.includes(ActivityType.EMAIL_COMPLAINT))) {
|
||||||
|
activities.push({
|
||||||
|
id: `${email.id}_complaint`,
|
||||||
|
type: ActivityType.EMAIL_COMPLAINT,
|
||||||
|
timestamp: email.complainedAt,
|
||||||
|
contactEmail: email.contact.email,
|
||||||
|
contactId: email.contactId,
|
||||||
|
metadata: {
|
||||||
|
...baseMetadata,
|
||||||
|
error: email.error,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return activities;
|
return activities;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import {
|
|||||||
Eye,
|
Eye,
|
||||||
MousePointerClick,
|
MousePointerClick,
|
||||||
Send,
|
Send,
|
||||||
|
ShieldAlert,
|
||||||
Workflow,
|
Workflow,
|
||||||
XCircle,
|
XCircle,
|
||||||
Zap,
|
Zap,
|
||||||
@@ -95,7 +96,14 @@ function getUpcomingTime(date: Date): string {
|
|||||||
* Check if an activity is an email activity
|
* Check if an activity is an email activity
|
||||||
*/
|
*/
|
||||||
function isEmailActivity(type: string): boolean {
|
function isEmailActivity(type: string): boolean {
|
||||||
return ['email.sent', 'email.delivered', 'email.opened', 'email.clicked', 'email.bounced'].includes(type);
|
return [
|
||||||
|
'email.sent',
|
||||||
|
'email.delivered',
|
||||||
|
'email.opened',
|
||||||
|
'email.clicked',
|
||||||
|
'email.bounced',
|
||||||
|
'email.complaint',
|
||||||
|
].includes(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ActivityItemProps {
|
interface ActivityItemProps {
|
||||||
@@ -226,6 +234,23 @@ function getActivityConfig(activity: Activity): ActivityConfig {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
case 'email.complaint':
|
||||||
|
return {
|
||||||
|
icon: ShieldAlert,
|
||||||
|
color: 'text-red-600',
|
||||||
|
bgColor: 'bg-red-100',
|
||||||
|
title: (typeof metadata.subject === 'string' ? metadata.subject : undefined) || 'Spam complaint',
|
||||||
|
description: metadata.campaignName
|
||||||
|
? `Campaign: ${String(metadata.campaignName)}`
|
||||||
|
: metadata.workflowName
|
||||||
|
? `Workflow: ${String(metadata.workflowName)}`
|
||||||
|
: 'Recipient marked as spam',
|
||||||
|
badge: {
|
||||||
|
label: 'Complaint',
|
||||||
|
variant: 'destructive',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
case 'workflow.started':
|
case 'workflow.started':
|
||||||
return {
|
return {
|
||||||
icon: Workflow,
|
icon: Workflow,
|
||||||
|
|||||||
@@ -119,12 +119,14 @@ export default function ActivityPage() {
|
|||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="ALL">All Activity Types</SelectItem>
|
<SelectItem value="ALL">All Activity Types</SelectItem>
|
||||||
<SelectItem value="event.triggered">Events</SelectItem>
|
<SelectItem value="event.triggered">Events</SelectItem>
|
||||||
<SelectItem value="email.sent,email.delivered,email.opened,email.clicked,email.bounced">
|
<SelectItem value="email.sent,email.delivered,email.opened,email.clicked,email.bounced,email.complaint">
|
||||||
Emails
|
Emails
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
<SelectItem value="email.sent">Emails Sent</SelectItem>
|
<SelectItem value="email.sent">Emails Sent</SelectItem>
|
||||||
<SelectItem value="email.opened">Emails Opened</SelectItem>
|
<SelectItem value="email.opened">Emails Opened</SelectItem>
|
||||||
<SelectItem value="email.clicked">Emails Clicked</SelectItem>
|
<SelectItem value="email.clicked">Emails Clicked</SelectItem>
|
||||||
|
<SelectItem value="email.bounced">Emails Bounced</SelectItem>
|
||||||
|
<SelectItem value="email.complaint">Email Complaints</SelectItem>
|
||||||
<SelectItem value="workflow.started,workflow.completed">Workflows</SelectItem>
|
<SelectItem value="workflow.started,workflow.completed">Workflows</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ export enum ActivityType {
|
|||||||
EMAIL_OPENED = 'email.opened',
|
EMAIL_OPENED = 'email.opened',
|
||||||
EMAIL_CLICKED = 'email.clicked',
|
EMAIL_CLICKED = 'email.clicked',
|
||||||
EMAIL_BOUNCED = 'email.bounced',
|
EMAIL_BOUNCED = 'email.bounced',
|
||||||
|
EMAIL_COMPLAINT = 'email.complaint',
|
||||||
CAMPAIGN_SENT = 'campaign.sent',
|
CAMPAIGN_SENT = 'campaign.sent',
|
||||||
CAMPAIGN_SCHEDULED = 'campaign.scheduled',
|
CAMPAIGN_SCHEDULED = 'campaign.scheduled',
|
||||||
WORKFLOW_STARTED = 'workflow.started',
|
WORKFLOW_STARTED = 'workflow.started',
|
||||||
|
|||||||
Reference in New Issue
Block a user