import { ActivityType, } from '../activity/interfaces' import { IActivityGroup, IClickTrackActivityGroup, IOpenTrackActivityGroup, IVisitActivityGroup, } from '../activityGroups/interfaces' import { IDomainObj } from '../settings/interfaces' import { indexOf } from 'lodash' const toClickNotification = (activityGroup: IClickTrackActivityGroup) => { return `Clicked ${activityGroup.activity[0].click.linkText} from ${activityGroup.emailSubject}` } const toOpenNotification = (activityGroup: IOpenTrackActivityGroup) => { return `Opened ${activityGroup.emailSubject}` } const toPageViewNotification = (activityGroup: IVisitActivityGroup) => { return `Viewed page ${activityGroup.activity[0].event.attributes.title || activityGroup.activity[0].event.attributes.url}` } export const toSingleNotification = (activityGroup: IActivityGroup) => { switch (activityGroup.type) { case ActivityType.CLICK: return toClickNotification(activityGroup as IClickTrackActivityGroup) case ActivityType.OPEN: return toOpenNotification(activityGroup as IOpenTrackActivityGroup) case ActivityType.PAGE_VIEW: return toPageViewNotification(activityGroup as IVisitActivityGroup) } } export const toNotification = (activities: IActivityGroup[]) => { let notifications = activities.map(toSingleNotification) if (notifications.length > 2) { notifications = [notifications[0], `... and ${notifications.length - 1} more events`] } return notifications.join('\n') } export const findGmailId = (activityGroups: IActivityGroup[]) => { const gmailIds = activityGroups .map((activityGroup) => { switch (activityGroup.type) { case ActivityType.CLICK: return (activityGroup as IClickTrackActivityGroup).gmailId case ActivityType.OPEN: return (activityGroup as IOpenTrackActivityGroup).gmailId } }) .filter(gmailId => !!gmailId) if (gmailIds.length > 0) { return gmailIds[0] } } export const emailOnMuteList = (email: string, muteList: string[]) => indexOf(muteList, email) >= 0 export const emailOnDomainMuteList = (email: string, muteList: IDomainObj[]) => !!muteList.find(({ domain }) => email.includes(domain))