63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import moment from 'moment';
|
|
|
|
import parseUrls from './parseUrls';
|
|
import type { IAttachment, IMessage, IThreadResult } from '../../../definitions';
|
|
|
|
type TMsg = IMessage & IAttachment;
|
|
|
|
function normalizeAttachments(msg: TMsg) {
|
|
if (typeof msg.attachments !== typeof [] || !msg.attachments || !msg.attachments.length) {
|
|
msg.attachments = [];
|
|
}
|
|
|
|
msg.attachments = msg.attachments
|
|
.filter(att => !!att)
|
|
.map(att => {
|
|
att.fields = att.fields || [];
|
|
if (att.ts) {
|
|
att.ts = moment(att.ts).toDate();
|
|
}
|
|
att = normalizeAttachments(att as TMsg);
|
|
return att;
|
|
});
|
|
return msg;
|
|
}
|
|
|
|
export default (msg: any): IMessage | IThreadResult | null => {
|
|
if (!msg) {
|
|
return null;
|
|
}
|
|
msg = normalizeAttachments(msg as TMsg);
|
|
msg.reactions = msg.reactions || [];
|
|
msg.unread = msg.unread || false;
|
|
// TODO: api problems
|
|
// if (Array.isArray(msg.reactions)) {
|
|
// msg.reactions = msg.reactions.map((value, key) => ({ emoji: key, usernames: value.usernames.map(username => ({ value: username })) }));
|
|
// } else {
|
|
// msg.reactions = Object.keys(msg.reactions).map(key => ({ emoji: key, usernames: msg.reactions[key].usernames.map(username => ({ value: username })) }));
|
|
// }
|
|
|
|
if (!Array.isArray(msg.reactions)) {
|
|
msg.reactions = Object.keys(msg.reactions).map(key => ({
|
|
_id: `${msg._id}${key}`,
|
|
emoji: key,
|
|
usernames: msg.reactions ? msg.reactions[key].usernames : [],
|
|
names: msg.reactions ? msg.reactions[key].names : []
|
|
}));
|
|
}
|
|
if (msg.translations && Object.keys(msg.translations).length) {
|
|
msg.translations = Object.keys(msg.translations).map(key => ({
|
|
_id: `${msg._id}${key}`,
|
|
language: key,
|
|
value: msg.translations ? msg.translations[key] : ''
|
|
}));
|
|
msg.autoTranslate = true;
|
|
}
|
|
msg.urls = msg.urls ? parseUrls(msg.urls) : [];
|
|
msg._updatedAt = new Date();
|
|
// loadHistory returns msg.starred as object
|
|
// stream-room-msgs returns msg.starred as an array
|
|
msg.starred = msg.starred && (Array.isArray(msg.starred) ? msg.starred.length > 0 : !!msg.starred);
|
|
return msg;
|
|
};
|