Changeset View
Changeset View
Standalone View
Standalone View
lib/shared/messages/change-settings-message-spec.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import { pushTypes, type MessageSpec } from './message-spec.js'; | import { | ||||
pushTypes, | |||||
type MessageSpec, | |||||
type RobotextParams, | |||||
} from './message-spec.js'; | |||||
import { joinResult } from './utils.js'; | import { joinResult } from './utils.js'; | ||||
import { messageTypes } from '../../types/message-types.js'; | import { messageTypes } from '../../types/message-types.js'; | ||||
import type { | import type { | ||||
MessageInfo, | MessageInfo, | ||||
ClientDBMessageInfo, | ClientDBMessageInfo, | ||||
} from '../../types/message-types.js'; | } from '../../types/message-types.js'; | ||||
import type { | import type { | ||||
ChangeSettingsMessageData, | ChangeSettingsMessageData, | ||||
▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | > = Object.freeze({ | ||||
rawMessageInfoFromMessageData( | rawMessageInfoFromMessageData( | ||||
messageData: ChangeSettingsMessageData, | messageData: ChangeSettingsMessageData, | ||||
id: ?string, | id: ?string, | ||||
): RawChangeSettingsMessageInfo { | ): RawChangeSettingsMessageInfo { | ||||
invariant(id, 'RawChangeSettingsMessageInfo needs id'); | invariant(id, 'RawChangeSettingsMessageInfo needs id'); | ||||
return { ...messageData, id }; | return { ...messageData, id }; | ||||
}, | }, | ||||
robotext(messageInfo: ChangeSettingsMessageInfo): EntityText { | robotext( | ||||
messageInfo: ChangeSettingsMessageInfo, | |||||
params: RobotextParams, | |||||
): EntityText { | |||||
const creator = ET.user({ userInfo: messageInfo.creator }); | const creator = ET.user({ userInfo: messageInfo.creator }); | ||||
const thread = ET.thread({ | |||||
display: 'alwaysDisplayShortName', | |||||
threadID: messageInfo.threadID, | |||||
threadType: params.threadInfo?.type, | |||||
parentThreadID: params.threadInfo?.parentThreadID, | |||||
possessive: true, | |||||
}); | |||||
if ( | if ( | ||||
(messageInfo.field === 'name' || messageInfo.field === 'description') && | (messageInfo.field === 'name' || messageInfo.field === 'description') && | ||||
messageInfo.value.toString() === '' | messageInfo.value.toString() === '' | ||||
) { | ) { | ||||
return ET`${creator} cleared ${ET.thread({ | return ET`${creator} cleared ${thread} ${messageInfo.field}`; | ||||
display: 'alwaysDisplayShortName', | |||||
threadID: messageInfo.threadID, | |||||
possessive: true, | |||||
})} ${messageInfo.field}`; | |||||
} | } | ||||
let value; | let value; | ||||
if ( | if ( | ||||
messageInfo.field === 'color' && | messageInfo.field === 'color' && | ||||
messageInfo.value.toString().match(validHexColorRegex) | messageInfo.value.toString().match(validHexColorRegex) | ||||
) { | ) { | ||||
value = ET.color({ hex: `#${messageInfo.value}` }); | value = ET.color({ hex: `#${messageInfo.value}` }); | ||||
} else if (messageInfo.field === 'type') { | } else if (messageInfo.field === 'type') { | ||||
invariant( | invariant( | ||||
typeof messageInfo.value === 'number', | typeof messageInfo.value === 'number', | ||||
'messageInfo.value should be number for thread type change ', | 'messageInfo.value should be number for thread type change ', | ||||
); | ); | ||||
const newThreadType = assertThreadType(messageInfo.value); | const newThreadType = assertThreadType(messageInfo.value); | ||||
value = threadLabel(newThreadType); | value = threadLabel(newThreadType); | ||||
} else { | } else { | ||||
value = messageInfo.value.toString(); | value = messageInfo.value.toString(); | ||||
} | } | ||||
return ET`${creator} updated ${ET.thread({ | return ET`${creator} updated ${thread} ${messageInfo.field} to "${value}"`; | ||||
display: 'alwaysDisplayShortName', | |||||
threadID: messageInfo.threadID, | |||||
possessive: true, | |||||
})} ${messageInfo.field} to "${value}"`; | |||||
}, | }, | ||||
async notificationTexts( | async notificationTexts( | ||||
messageInfos: $ReadOnlyArray<MessageInfo>, | messageInfos: $ReadOnlyArray<MessageInfo>, | ||||
threadInfo: ThreadInfo, | threadInfo: ThreadInfo, | ||||
): Promise<NotifTexts> { | ): Promise<NotifTexts> { | ||||
const mostRecentMessageInfo = messageInfos[0]; | const mostRecentMessageInfo = messageInfos[0]; | ||||
invariant( | invariant( | ||||
Show All 24 Lines |