import React from 'react';
import { defineMessages, injectIntl } from 'react-intl';
import { createContainer } from 'meteor/react-meteor-data';
import Chat from './component';
import ChatService from './service';
const CHAT_CONFIG = Meteor.settings.public.chat;
const PUBLIC_CHAT_KEY = CHAT_CONFIG.public_id;
const CHAT_CLEAR = CHAT_CONFIG.system_messages_keys.chat_clear;
const intlMessages = defineMessages({
[CHAT_CLEAR]: {
id: 'app.chat.clearPublicChatMessage',
description: 'message of when clear the public chat',
},
titlePublic: {
id: 'app.chat.titlePublic',
description: 'Public chat title',
},
titlePrivate: {
id: 'app.chat.titlePrivate',
description: 'Private chat title',
},
partnerDisconnected: {
id: 'app.chat.partnerDisconnected',
description: 'System chat message when the private chat partnet disconnect from the meeting',
},
});
const ChatContainer = props =>
(
{props.children}
);
export default injectIntl(createContainer(({ params, intl }) => {
const chatID = params.chatID || PUBLIC_CHAT_KEY;
let messages = [];
const isChatLocked = ChatService.isChatLocked(chatID);
let title = intl.formatMessage(intlMessages.titlePublic);
let chatName = title;
if (chatID === PUBLIC_CHAT_KEY) {
messages = ChatService.reduceAndMapMessages((ChatService.getPublicMessages()));
} else {
messages = ChatService.getPrivateMessages(chatID);
}
const user = ChatService.getUser(chatID, '{{NAME}}');
let partnerIsLoggedOut = false;
messages = messages.map((message) => {
if (message.sender) return message;
return {
...message,
content: message.content.map(content => ({
...content,
text: content.text in intlMessages ?
`${intl.formatMessage(intlMessages[content.text])}` : content.text,
})),
};
});
if (user) {
partnerIsLoggedOut = !user.isOnline;
if (messages && chatID !== PUBLIC_CHAT_KEY) {
const chatUser = ChatService.getUser(chatID, '{{NAME}}');
title = intl.formatMessage(intlMessages.titlePrivate, { 0: chatUser.name });
chatName = chatUser.name;
}
}
const scrollPosition = ChatService.getScrollPosition(chatID);
const hasUnreadMessages = ChatService.hasUnreadMessages(chatID);
const lastReadMessageTime = ChatService.lastReadMessageTime(chatID);
return {
chatID,
chatName,
title,
messages,
lastReadMessageTime,
hasUnreadMessages,
partnerIsLoggedOut,
isChatLocked,
scrollPosition,
minMessageLength: CHAT_CONFIG.min_message_length,
maxMessageLength: CHAT_CONFIG.max_message_length,
actions: {
handleClosePrivateChat: chatId => ChatService.closePrivateChat(chatId),
handleSendMessage: (message) => {
ChatService.updateScrollPosition(chatID, null);
return ChatService.sendMessage(chatID, message);
},
handleScrollUpdate: position => ChatService.updateScrollPosition(chatID, position),
handleReadMessage: timestamp => ChatService.updateUnreadMessage(chatID, timestamp),
},
};
}, ChatContainer));