diff --git a/lib/shared/messages/create-entry-message-spec.js b/lib/shared/messages/create-entry-message-spec.js --- a/lib/shared/messages/create-entry-message-spec.js +++ b/lib/shared/messages/create-entry-message-spec.js @@ -17,12 +17,8 @@ import type { RelativeUserInfo } from '../../types/user-types'; import { prettyDate } from '../../utils/date-utils'; import { ET, type EntityText } from '../../utils/entity-text'; -import { stringForUser } from '../user-utils'; -import { - pushTypes, - type MessageSpec, - type NotificationTextsParams, -} from './message-spec'; +import { notifTextsForEntryCreationOrEdit } from '../notif-utils'; +import { pushTypes, type MessageSpec } from './message-spec'; import { joinResult } from './utils'; export const createEntryMessageSpec: MessageSpec< @@ -114,46 +110,8 @@ async notificationTexts( messageInfos: $ReadOnlyArray, threadInfo: ThreadInfo, - params: NotificationTextsParams, ): Promise { - const hasCreateEntry = messageInfos.some( - messageInfo => messageInfo.type === messageTypes.CREATE_ENTRY, - ); - const messageInfo = messageInfos[0]; - if (!hasCreateEntry) { - invariant( - messageInfo.type === messageTypes.EDIT_ENTRY, - 'messageInfo should be messageTypes.EDIT_ENTRY!', - ); - const body = - `updated the text of an event in ` + - `${params.notifThreadName(threadInfo)} scheduled for ` + - `${prettyDate(messageInfo.date)}: "${messageInfo.text}"`; - const prefix = stringForUser(messageInfo.creator); - const merged = `${prefix} ${body}`; - return { - merged, - title: threadInfo.uiName, - body, - prefix, - }; - } - invariant( - messageInfo.type === messageTypes.CREATE_ENTRY || - messageInfo.type === messageTypes.EDIT_ENTRY, - 'messageInfo should be messageTypes.CREATE_ENTRY/EDIT_ENTRY!', - ); - const prefix = stringForUser(messageInfo.creator); - const body = - `created an event in ${params.notifThreadName(threadInfo)} ` + - `scheduled for ${prettyDate(messageInfo.date)}: "${messageInfo.text}"`; - const merged = `${prefix} ${body}`; - return { - merged, - title: threadInfo.uiName, - body, - prefix, - }; + return notifTextsForEntryCreationOrEdit(messageInfos, threadInfo); }, notificationCollapseKey(rawMessageInfo: RawCreateEntryMessageInfo): string { diff --git a/lib/shared/messages/edit-entry-message-spec.js b/lib/shared/messages/edit-entry-message-spec.js --- a/lib/shared/messages/edit-entry-message-spec.js +++ b/lib/shared/messages/edit-entry-message-spec.js @@ -17,12 +17,8 @@ import type { RelativeUserInfo } from '../../types/user-types'; import { prettyDate } from '../../utils/date-utils'; import { ET, type EntityText } from '../../utils/entity-text'; -import { stringForUser } from '../user-utils'; -import { - pushTypes, - type MessageSpec, - type NotificationTextsParams, -} from './message-spec'; +import { notifTextsForEntryCreationOrEdit } from '../notif-utils'; +import { pushTypes, type MessageSpec } from './message-spec'; import { joinResult } from './utils'; export const editEntryMessageSpec: MessageSpec< @@ -114,46 +110,8 @@ async notificationTexts( messageInfos: $ReadOnlyArray, threadInfo: ThreadInfo, - params: NotificationTextsParams, ): Promise { - const hasCreateEntry = messageInfos.some( - messageInfo => messageInfo.type === messageTypes.CREATE_ENTRY, - ); - const messageInfo = messageInfos[0]; - if (!hasCreateEntry) { - invariant( - messageInfo.type === messageTypes.EDIT_ENTRY, - 'messageInfo should be messageTypes.EDIT_ENTRY!', - ); - const body = - `updated the text of an event in ` + - `${params.notifThreadName(threadInfo)} scheduled for ` + - `${prettyDate(messageInfo.date)}: "${messageInfo.text}"`; - const prefix = stringForUser(messageInfo.creator); - const merged = `${prefix} ${body}`; - return { - merged, - title: threadInfo.uiName, - body, - prefix, - }; - } - invariant( - messageInfo.type === messageTypes.CREATE_ENTRY || - messageInfo.type === messageTypes.EDIT_ENTRY, - 'messageInfo should be messageTypes.CREATE_ENTRY/EDIT_ENTRY!', - ); - const prefix = stringForUser(messageInfo.creator); - const body = - `created an event in ${params.notifThreadName(threadInfo)} ` + - `scheduled for ${prettyDate(messageInfo.date)}: "${messageInfo.text}"`; - const merged = `${prefix} ${body}`; - return { - merged, - title: threadInfo.uiName, - body, - prefix, - }; + return notifTextsForEntryCreationOrEdit(messageInfos, threadInfo); }, notificationCollapseKey(rawMessageInfo: RawEditEntryMessageInfo): string { diff --git a/lib/shared/notif-utils.js b/lib/shared/notif-utils.js --- a/lib/shared/notif-utils.js +++ b/lib/shared/notif-utils.js @@ -7,10 +7,12 @@ type RawMessageInfo, type RobotextMessageInfo, type MessageType, + messageTypes, } from '../types/message-types'; -import type { ResolvedNotifTexts } from '../types/notif-types'; +import type { NotifTexts, ResolvedNotifTexts } from '../types/notif-types'; import type { ThreadInfo, ThreadType } from '../types/thread-types'; import type { RelativeUserInfo } from '../types/user-types'; +import { prettyDate } from '../utils/date-utils'; import type { GetENSNames } from '../utils/ens-helpers'; import { ET, @@ -44,6 +46,52 @@ return { merged, body, title, prefix }; } +function notifTextsForEntryCreationOrEdit( + messageInfos: $ReadOnlyArray, + threadInfo: ThreadInfo, +): NotifTexts { + const hasCreateEntry = messageInfos.some( + messageInfo => messageInfo.type === messageTypes.CREATE_ENTRY, + ); + const messageInfo = messageInfos[0]; + + const thread = ET.thread({ display: 'shortName', threadInfo }); + const creator = ET.user({ userInfo: messageInfo.creator }); + const prefix = ET`${creator}`; + + if (!hasCreateEntry) { + invariant( + messageInfo.type === messageTypes.EDIT_ENTRY, + 'messageInfo should be messageTypes.EDIT_ENTRY!', + ); + const date = prettyDate(messageInfo.date); + let body = ET`updated the text of an event in ${thread}`; + body = ET`${body} scheduled for ${date}: "${messageInfo.text}"`; + const merged = ET`${prefix} ${body}`; + return { + merged, + title: threadInfo.uiName, + body, + prefix, + }; + } + invariant( + messageInfo.type === messageTypes.CREATE_ENTRY || + messageInfo.type === messageTypes.EDIT_ENTRY, + 'messageInfo should be messageTypes.CREATE_ENTRY/EDIT_ENTRY!', + ); + const date = prettyDate(messageInfo.date); + let body = ET`created an event in ${thread}`; + body = ET`${body} scheduled for ${date}: "${messageInfo.text}"`; + const merged = ET`${prefix} ${body}`; + return { + merged, + title: threadInfo.uiName, + body, + prefix, + }; +} + const notifTextForSubthreadCreation = ( creator: RelativeUserInfo, threadType: ThreadType, @@ -191,6 +239,7 @@ export { notifRobotextForMessageInfo, notifTextsForMessageInfo, + notifTextsForEntryCreationOrEdit, notifCollapseKeyForRawMessageInfo, mergePrefixIntoBody, };