cometchat-react-ui-kit2
Version:
CometChat UI Kit for React App
821 lines (778 loc) • 36.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CometChatMessageComposer = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _chat = require("@cometchat-pro/chat");
var _ = require("../..");
var _2 = require("..");
var _CometChatMessageHelper = require("../CometChatMessageHelper");
var _CometChatMessageConstants = require("../CometChatMessageConstants");
var _hooks = require("./hooks");
var _style = require("./style");
var _MessagePreviewConfiguration = require("../CometChatMessagePreview/MessagePreviewConfiguration");
var _EmojiKeyboardConfiguration = require("../CometChatEmojiKeyboard/EmojiKeyboardConfiguration");
var _CreatePollConfiguration = require("../CometChatCreatePoll/CreatePollConfiguration");
var _StickerKeyboardConfiguration = require("../CometChatStickerKeyboard/StickerKeyboardConfiguration");
var _Shared = require("../../Shared");
var _addCircleFilled = _interopRequireDefault(require("./resources/add-circle-filled.svg"));
var _emoji = _interopRequireDefault(require("./resources/emoji.svg"));
var _sendMessage = _interopRequireDefault(require("./resources/send-message.svg"));
var _closeCircle = _interopRequireDefault(require("./resources/close-circle.svg"));
var _heart = _interopRequireDefault(require("./resources/heart.png"));
var _delete = _interopRequireDefault(require("./resources/delete.svg"));
var _this = void 0;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
/**
*
* CometChatMessageComposer component part of messages component it's takes user input text,image,video etc,after pressing send button
* it's append messages in message list, with additonal CometChat SDK conversation object.
*
* @version 1.0.0
* @author CometChatTeam
* @copyright © 2022 CometChat Inc.
*
*/
var CometChatMessageComposer = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
var _React$useState = _react["default"].useState(null),
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
chatWith = _React$useState2[0],
setChatWith = _React$useState2[1];
var _React$useState3 = _react["default"].useState(null),
_React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
chatWithId = _React$useState4[0],
setChatWithId = _React$useState4[1];
var _React$useState5 = _react["default"].useState(""),
_React$useState6 = (0, _slicedToArray2["default"])(_React$useState5, 2),
messageInput = _React$useState6[0],
setMessageInput = _React$useState6[1];
var _React$useState7 = _react["default"].useState(false),
_React$useState8 = (0, _slicedToArray2["default"])(_React$useState7, 2),
viewAttachButton = _React$useState8[0],
setViewAttachButton = _React$useState8[1];
var _React$useState9 = _react["default"].useState(false),
_React$useState10 = (0, _slicedToArray2["default"])(_React$useState9, 2),
viewSticker = _React$useState10[0],
setViewSticker = _React$useState10[1];
var _React$useState11 = _react["default"].useState(null),
_React$useState12 = (0, _slicedToArray2["default"])(_React$useState11, 2),
viewStickerTray = _React$useState12[0],
setViewStickerTray = _React$useState12[1];
var _React$useState13 = _react["default"].useState({}),
_React$useState14 = (0, _slicedToArray2["default"])(_React$useState13, 2),
viewActionSheet = _React$useState14[0],
setViewActionSheet = _React$useState14[1];
var _React$useState15 = _react["default"].useState([]),
_React$useState16 = (0, _slicedToArray2["default"])(_React$useState15, 2),
actionSheetItems = _React$useState16[0],
setActionSheetItems = _React$useState16[1];
var _React$useState17 = _react["default"].useState(false),
_React$useState18 = (0, _slicedToArray2["default"])(_React$useState17, 2),
viewCreatePoll = _React$useState18[0],
setViewCreatePoll = _React$useState18[1];
var _React$useState19 = _react["default"].useState({}),
_React$useState20 = (0, _slicedToArray2["default"])(_React$useState19, 2),
viewEmojiTray = _React$useState20[0],
setViewEmojiTray = _React$useState20[1];
var _React$useState21 = _react["default"].useState(null),
_React$useState22 = (0, _slicedToArray2["default"])(_React$useState21, 2),
messagePreview = _React$useState22[0],
setMessagePreview = _React$useState22[1];
var _React$useState23 = _react["default"].useState(true),
_React$useState24 = (0, _slicedToArray2["default"])(_React$useState23, 2),
viewInputField = _React$useState24[0],
setViewInputField = _React$useState24[1];
var stickerTemplate = _react["default"].useRef(null);
var loggedInUser = _react["default"].useRef(null);
var isTyping = null;
var liveReactionTimeout = 0;
var disabledState = false;
var messageInputRef = _react["default"].useRef(null);
var fileInputRef = _react["default"].useRef(null);
var chatRef = _react["default"].useRef(chatWith);
var user = props.user,
group = props.group,
hideAttachment = props.hideAttachment,
attachmentIconURL = props.attachmentIconURL,
stickerCloseIconURL = props.stickerCloseIconURL,
placeholderText = props.placeholderText,
hideLiveReaction = props.hideLiveReaction,
liveReactionIconURL = props.liveReactionIconURL,
hideEmoji = props.hideEmoji,
emojiIconURL = props.emojiIconURL,
showSendButton = props.showSendButton,
sendButtonIconURL = props.sendButtonIconURL,
onSendButtonClick = props.onSendButtonClick,
messageTypes = props.messageTypes,
excludeMessageTypes = props.excludeMessageTypes,
enableTypingIndicator = props.enableTypingIndicator,
enableSoundForMessage = props.enableSoundForMessage,
customOutgoingMessageSound = props.customOutgoingMessageSound,
style = props.style,
messagePreviewConfiguration = props.messagePreviewConfiguration,
emojiKeyboardConfiguration = props.emojiKeyboardConfiguration,
stickerKeyboardConfiguration = props.stickerKeyboardConfiguration,
createPollConfiguration = props.createPollConfiguration,
actionSheetConfiguration = props.actionSheetConfiguration,
theme = props.theme;
var _theme = new _.CometChatTheme(theme !== null && theme !== void 0 ? theme : {});
/**,
* Event callbacks
*/
_react["default"].useImperativeHandle(ref, function () {
return {
previewMessageForEdit: previewMessage
};
});
var draftMessage = function draftMessage() {};
var previewMessage = function previewMessage(message) {
setMessagePreview({
message: message,
mode: _.ConversationOptionConstants.edit
});
setMessageInput(message.text);
var element = messageInputRef.current;
var messageText = message.text;
//xss extensions data
var xssData = (0, _2.getExtensionsData)(message, _.MetadataConstants.extensions.xssFilter);
if (xssData && xssData.hasOwnProperty(_.ExtensionConstants.sanitizedText) && xssData.hasOwnProperty(_.ExtensionConstants.hasXSS) && xssData.hasXSS === _.ExtensionConstants.yes) {
messageText = xssData.sanitized_text;
}
element.focus();
element.textContent = "";
pasteHtmlAtCaret(messageText, false);
};
var playAudio = function playAudio() {
if (customOutgoingMessageSound) {
_.CometChatSoundManager.play(_.CometChatSoundManager.Sound.outgoingMessage, customOutgoingMessageSound);
} else {
_.CometChatSoundManager.play(_.CometChatSoundManager.Sound.outgoingMessage);
}
};
var closeMessagePreview = function closeMessagePreview() {
setMessagePreview(null);
setMessageInput("");
messageInputRef.current.textContent = "";
};
var sendMessageOnEnter = function sendMessageOnEnter(event) {
if (event.keyCode === 13 && !event.shiftKey) {
event.preventDefault();
sendTextMessage();
}
};
/** send text message */
var sendTextMessage = function sendTextMessage() {
setViewEmojiTray(false);
if (!messageInput.trim().length) {
return false;
}
if (messagePreview && messagePreview.mode === _.ConversationOptionConstants.edit) {
editMessage(messagePreview.message);
return false;
}
var textMessage = new _chat.CometChat.TextMessage(chatWithId, messageInput, chatWith);
textMessage.setSender(loggedInUser.current);
textMessage.setReceiver(chatWith);
textMessage.setText(messageInput);
textMessage.setSentAt((0, _CometChatMessageHelper.getUnixTimestamp)());
textMessage.setMuid(String((0, _CometChatMessageHelper.getUnixTimestamp)()));
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageSent, {
message: textMessage,
status: _CometChatMessageConstants.messageStatus.inprogress
});
if (enableSoundForMessage) playAudio();
setMessageInput("");
messageInputRef.current.textContent = "";
_chat.CometChat.sendMessage(textMessage).then(function (message) {
var messageObject = _objectSpread({}, message);
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageSent, {
message: messageObject,
status: _CometChatMessageConstants.messageStatus.success
});
})["catch"](function (error) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageError, {
message: textMessage,
error: error
});
});
if (onSendButtonClick) {
onSendButtonClick();
}
};
/** send media message */
var sendMediaMessage = function sendMediaMessage(messageInput, messageType) {
setViewActionSheet(false);
var mediaMessage = new _chat.CometChat.MediaMessage(chatWithId, messageInput, messageType, chatWith);
mediaMessage.setSender(loggedInUser.current);
mediaMessage.setReceiver(chatWith);
mediaMessage.setType(messageType);
mediaMessage.setMetadata((0, _defineProperty2["default"])({}, _.MetadataConstants.file, messageInput));
mediaMessage.setSentAt((0, _CometChatMessageHelper.getUnixTimestamp)());
mediaMessage.setMuid(String((0, _CometChatMessageHelper.getUnixTimestamp)()));
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageSent, {
message: mediaMessage,
status: _CometChatMessageConstants.messageStatus.inprogress
});
if (enableSoundForMessage) playAudio();
_chat.CometChat.sendMessage(mediaMessage).then(function (message) {
var messageObject = _objectSpread({}, message);
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageSent, {
message: messageObject,
status: _CometChatMessageConstants.messageStatus.success
});
})["catch"](function (error) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageError, {
message: mediaMessage,
error: error
});
});
};
/** send sticker */
var sendSticker = function sendSticker(stickerMessage) {
var customData = {
sticker_url: stickerMessage.stickerUrl,
sticker_name: stickerMessage.stickerName
};
var customMessage = new _chat.CometChat.CustomMessage(chatWithId, chatWith, _2.CometChatCustomMessageTypes.sticker, customData);
customMessage.setSender(loggedInUser.current);
customMessage.setReceiver(chatWith);
customMessage.setMetadata({
incrementUnreadCount: true
});
customMessage.setSentAt((0, _CometChatMessageHelper.getUnixTimestamp)());
customMessage.setMuid(String((0, _CometChatMessageHelper.getUnixTimestamp)()));
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageSent, {
message: customMessage,
status: _CometChatMessageConstants.messageStatus.inprogress
});
if (enableSoundForMessage) playAudio();
_chat.CometChat.sendCustomMessage(customMessage).then(function (message) {
var messageObject = _objectSpread({}, message);
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageSent, {
message: messageObject,
status: _CometChatMessageConstants.messageStatus.success
});
})["catch"](function (error) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageError, {
message: customMessage,
error: error
});
});
};
/** edit message */
var editMessage = function editMessage(message) {
endTyping(null, null);
var messageText = messageInput.trim();
var textMessage = new _chat.CometChat.TextMessage(chatWithId, messageText, chatWith);
textMessage.setId(messagePreview.message.id);
setMessageInput("");
messageInputRef.current.textContent = "";
if (enableSoundForMessage) playAudio();
setMessagePreview(null);
_chat.CometChat.editMessage(textMessage).then(function (editedMessage) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageEdit, {
message: editedMessage,
status: _CometChatMessageConstants.messageStatus.success
});
})["catch"](function (error) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageError, {
message: textMessage,
error: error
});
});
};
var startTyping = function startTyping(endTypingTimeout, typingMetadata) {
//if typing is disabled
if (!enableTypingIndicator) {
return false;
}
//if typing is in progress
if (isTyping) {
return false;
}
var typingInterval = endTypingTimeout || 5000;
var metadata = typingMetadata || undefined;
var typingNotification = new _chat.CometChat.TypingIndicator(chatWithId, chatWith, metadata);
_chat.CometChat.startTyping(typingNotification);
isTyping = setTimeout(function () {
endTyping(null, typingMetadata);
}, typingInterval);
};
var endTyping = function endTyping(event, typingMetadata) {
if (event) {
event.persist();
}
if (!enableTypingIndicator) {
return false;
}
var metadata = typingMetadata || undefined;
var typingNotification = new _chat.CometChat.TypingIndicator(chatWithId, chatWith, metadata);
_chat.CometChat.endTyping(typingNotification);
clearTimeout(isTyping);
isTyping = null;
};
var fileInputHandler = function fileInputHandler(event) {
setViewActionSheet(false);
if (!fileInputRef.current) {
return false;
}
fileInputRef.current.click();
};
/** fileInputChangeHandler */
var fileInputChangeHandler = function fileInputChangeHandler(event) {
setViewActionSheet(false);
var uploadedFile = event.target.files["0"];
var fileNameType = uploadedFile.type.split("/");
var reader = new FileReader();
reader.addEventListener("load", function (event) {
var newFile = new File([reader.result], uploadedFile.name, uploadedFile);
switch (fileNameType[0]) {
case "image":
sendMediaMessage(newFile, _.MessageTypeConstants.image);
break;
case "video":
sendMediaMessage(newFile, _.MessageTypeConstants.video);
break;
case "audio":
sendMediaMessage(newFile, _.MessageTypeConstants.audio);
break;
case "file":
sendMediaMessage(newFile, _.MessageTypeConstants.file);
break;
default:
sendMediaMessage(newFile, _.MessageTypeConstants.file);
break;
}
fileInputRef.current.value = "";
}, false);
reader.readAsArrayBuffer(uploadedFile);
};
/** closeCreatePoll */
var closeCreatePoll = function closeCreatePoll() {
setViewCreatePoll(false);
};
/** onPollSubmit */
var onPollSubmit = function onPollSubmit() {
setViewCreatePoll(false);
};
/** openCreatePoll */
var openCreatePoll = function openCreatePoll() {
setViewActionSheet(false);
setViewCreatePoll(true);
};
/** share collaborative document */
var shareCollaborativeDocument = function shareCollaborativeDocument() {
setViewActionSheet(false);
_chat.CometChat.callExtension(_.ExtensionConstants.document, _.ExtensionConstants.post, _.ExtensionURLs.document, {
receiver: chatRef.current.chatWithId,
receiverType: chatRef.current.chatWith
})["catch"](function (error) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageError, error);
});
};
/** share collaborative whitevoard */
var shareCollaborativeWhiteboard = function shareCollaborativeWhiteboard() {
setViewActionSheet(false);
_chat.CometChat.callExtension(_.ExtensionConstants.whiteboard, _.ExtensionConstants.post, _.ExtensionURLs.whiteboard, {
receiver: chatRef.current.chatWithId,
receiverType: chatRef.current.chatWith
})["catch"](function (error) {
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onMessageError, error);
});
};
/** handleInputEvent */
var handleInputEvent = function handleInputEvent(event) {
startTyping();
var elem = event.currentTarget;
var messageInput = elem.textContent.trim();
if (!messageInput.length) {
event.currentTarget.textContent = messageInput;
}
setMessageInput(elem.innerText);
};
/** inputChangeHandler */
var inputChangeHandler = function inputChangeHandler(event) {
setTimeout(handleInputEvent(event), 500);
};
/** composer sticker iconClickHandler */
var toggleStickersTray = function toggleStickersTray() {
setViewStickerTray(function (prevViewStickerOption) {
return !prevViewStickerOption;
});
};
var pasteHtmlAtCaret = function pasteHtmlAtCaret(html, selectPastedContent) {
var sel, range;
var chatWindow = window;
if (chatWindow.getSelection) {
// IE9 and non-IE
sel = chatWindow.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
// Range.createContextualFragment() would be useful here but is
// only relatively recently standardized and is not supported in
// some browsers (IE9, for one)
var el = document.createElement("div");
el.innerText = html;
var frag = document.createDocumentFragment(),
node,
lastNode;
while (node = el.firstChild) {
lastNode = frag.appendChild(node);
}
var firstNode = frag.firstChild;
range.insertNode(frag);
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
if (selectPastedContent) {
range.setStartBefore(firstNode);
} else {
range.collapse(true);
}
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if ((sel = document.selection) && sel.type !== "Control") {
// IE < 9
var originalRange = sel.createRange();
originalRange.collapse(true);
sel.createRange().pasteHTML(html);
if (selectPastedContent) {
range = sel.createRange();
range.setEndPoint("StartToStart", originalRange);
range.select();
}
}
};
/** select emoji from emojikeyboard */
var onEmojiSelect = function onEmojiSelect(emojiObject) {
var element = messageInputRef.current;
element.focus();
element.innerText = "";
pasteHtmlAtCaret(messageInput + emojiObject, false);
setMessageInput(element.innerText);
};
/** composer pluse button onClickHandler */
var attachmentClickHandler = function attachmentClickHandler(event) {
setViewActionSheet(function (old) {
return {
actionSheet: !old.actionSheet,
event: event
};
});
};
/** composer emoji onClickHandler */
var emojiClickHandler = function emojiClickHandler(event) {
setViewEmojiTray(function (old) {
return {
emojiTrayPreview: !old.emojiTrayPreview,
event: event
};
});
};
/** composer sticker onClickHandler */
var stickerClickHandler = function stickerClickHandler() {
if (stickerTemplate.current.actionCallback) {
stickerTemplate.current.actionCallback();
} else {
toggleStickersTray();
}
};
/** if already live reaction in progress */
var shareLiveReaction = function shareLiveReaction() {
if (liveReactionTimeout) {
return false;
}
/** fetching the metadata type from constants */
var data = {
type: _.MetadataConstants.liveReaction,
reaction: liveReactionIconURL || _heart["default"]
};
/*** send transient message */
var transientMessage = new _chat.CometChat.TransientMessage(chatWithId, chatWith, data);
_chat.CometChat.sendTransientMessage(transientMessage);
/** set timeout till the next share */
liveReactionTimeout = setTimeout(clearTimeout(liveReactionTimeout), _2.messageConstants.liveReactionTimeout);
/** emit event to share live reaction */
var payload = {
reaction: liveReactionIconURL || _heart["default"]
};
_2.CometChatMessageEvents.emit(_2.CometChatMessageEvents.onLiveReaction, payload);
};
/** attach/composr pluse icon */
var attachOption = function attachOption() {
return viewAttachButton ? /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.stickyAttachButtonStyle)(),
className: "attachment__icon",
onClick: attachmentClickHandler.bind(_this),
title: (0, _.localize)("ATTACH")
}, /*#__PURE__*/_react["default"].createElement("i", {
style: (0, _style.attchButtonIconStyle)(style, attachmentIconURL, _theme)
})) : null;
};
/**CreatePollConfiguration */
var _actionSheetConfiguration = actionSheetConfiguration !== null && actionSheetConfiguration !== void 0 ? actionSheetConfiguration : new _Shared.ActionSheetConfiguration({});
/** action sheet render under tooltip */
var actionSheetBoard = function actionSheetBoard() {
var _viewActionSheet$even, _viewActionSheet$even2, _actionSheetConfigura;
return viewActionSheet.actionSheet ? /*#__PURE__*/_react["default"].createElement(_.CometChatPopover, {
position: "top",
x: viewActionSheet === null || viewActionSheet === void 0 ? void 0 : (_viewActionSheet$even = viewActionSheet.event) === null || _viewActionSheet$even === void 0 ? void 0 : _viewActionSheet$even.clientX,
y: viewActionSheet === null || viewActionSheet === void 0 ? void 0 : (_viewActionSheet$even2 = viewActionSheet.event) === null || _viewActionSheet$even2 === void 0 ? void 0 : _viewActionSheet$even2.clientY,
style: (0, _style.actionSheetPopoverStyle)(_theme)
}, /*#__PURE__*/_react["default"].createElement(_.CometChatActionSheet, {
title: (0, _.localize)("ADD_TO_CHAT"),
layoutModeIconURL: (_actionSheetConfigura = _actionSheetConfiguration === null || _actionSheetConfiguration === void 0 ? void 0 : _actionSheetConfiguration.roundedPlus) !== null && _actionSheetConfigura !== void 0 ? _actionSheetConfigura : _addCircleFilled["default"],
theme: _theme,
style: (0, _style.actionSheetStyle)(_theme),
actions: actionSheetItems
})) : null;
};
/**CreatePollConfiguration */
var _createPollConfiguration = createPollConfiguration !== null && createPollConfiguration !== void 0 ? createPollConfiguration : new _CreatePollConfiguration.CreatePollConfiguration({});
var title = (0, _.localize)("CREATE_POLL");
var questionPlaceholderText = (0, _.localize)("QUESTION");
var answerPlaceholderText = (0, _.localize)("ANSWER");
var addAnswerText = (0, _.localize)("ADD_ANSWER");
var answerHelpText = (0, _.localize)("SET_THE_ANSWERS");
/** createpoll */
var createPoll = function createPoll() {
return viewCreatePoll ? /*#__PURE__*/_react["default"].createElement(_.CometChatPopover, {
withBackDrop: viewCreatePoll ? true : false,
style: (0, _style.popoverForCreatePollStyle)(_theme, _createPollConfiguration)
}, /*#__PURE__*/_react["default"].createElement(_2.CometChatCreatePoll, {
closeIconURL: _createPollConfiguration.closeIconURL || _closeCircle["default"],
title: title,
addAnswerIconURL: _createPollConfiguration.addAnswerIconURL || _addCircleFilled["default"],
createPollButtonText: (0, _.localize)("SEND"),
deleteIconURL: _createPollConfiguration.deleteIconURL || _delete["default"],
defaultAnswers: 2,
theme: _theme,
style: (0, _style.createPollStyle)(_theme, _createPollConfiguration),
questionPlaceholderText: questionPlaceholderText,
addAnswerText: addAnswerText,
answerPlaceholderText: answerPlaceholderText,
answerHelpText: answerHelpText,
user: user,
group: group,
onClose: _createPollConfiguration.onClose || closeCreatePoll,
onCreatePoll: _createPollConfiguration.onCreatePoll || onPollSubmit
})) : null;
};
/** sticker button */
var stickerButton = function stickerButton() {
var _stickerTemplate$curr;
return viewSticker ? /*#__PURE__*/_react["default"].createElement("div", {
title: (0, _.localize)("STICKER"),
style: (0, _style.stickerBtnStyle)(),
className: "button__sticker",
onClick: stickerClickHandler
}, /*#__PURE__*/_react["default"].createElement("i", {
style: (0, _style.stickerBtnIconStyle)(style, viewStickerTray ? stickerCloseIconURL : stickerTemplate === null || stickerTemplate === void 0 ? void 0 : (_stickerTemplate$curr = stickerTemplate.current) === null || _stickerTemplate$curr === void 0 ? void 0 : _stickerTemplate$curr.icon, _theme)
})) : null;
};
/** messagePreviewConfiguration */
var _messagePreviewConfiguration = messagePreviewConfiguration || new _MessagePreviewConfiguration.MessagePreviewConfiguration({});
/** message preview */
var previewTray = function previewTray() {
var _messagePreview$messa;
return messagePreview ? /*#__PURE__*/_react["default"].createElement(_2.CometChatMessagePreview, {
messagePreviewTitle: _messagePreviewConfiguration.messagePreviewTitle || (0, _.localize)("MESSAGE_EDIT"),
messagePreviewSubtitle: _messagePreviewConfiguration.messagePreviewSubtitle || (messagePreview === null || messagePreview === void 0 ? void 0 : (_messagePreview$messa = messagePreview.message) === null || _messagePreview$messa === void 0 ? void 0 : _messagePreview$messa.text),
closeIconURL: _messagePreviewConfiguration.closeIconURL || _closeCircle["default"],
onCloseClick: _messagePreviewConfiguration.onCloseClick || closeMessagePreview.bind(_this),
theme: _theme,
style: (0, _style.messagePreviewStyle)(_theme, _messagePreviewConfiguration)
}) : null;
};
/**StickerKeyboardConfiguration */
var _stickerKeyboardConfiguration = stickerKeyboardConfiguration !== null && stickerKeyboardConfiguration !== void 0 ? stickerKeyboardConfiguration : new _StickerKeyboardConfiguration.StickerKeyboardConfiguration({});
/** sticker board */
var stickerTray = function stickerTray() {
return viewStickerTray ? /*#__PURE__*/_react["default"].createElement(_2.CometChatStickerKeyboard, {
onClick: sendSticker.bind(_this),
onClose: _stickerKeyboardConfiguration.onClose || toggleStickersTray,
emptyText: (0, _.localize)("NO_STICKERS_FOUND"),
errorText: (0, _.localize)("SOMETHING_WRONG"),
loadingText: (0, _.localize)("LOADING"),
theme: _theme,
style: (0, _style.stickerKeyboardStyle)(_theme, _stickerKeyboardConfiguration)
}) : null;
};
/** emoji icon */
var emojiButton = function emojiButton() {
return !hideEmoji ? /*#__PURE__*/_react["default"].createElement("div", {
title: (0, _.localize)("EMOJI"),
style: (0, _style.emojiButtonStyle)(),
className: "button__emoji",
onClick: emojiClickHandler.bind(_this)
}, /*#__PURE__*/_react["default"].createElement("i", {
style: (0, _style.emojiBtnIconStyle)(style, emojiIconURL, _theme)
})) : null;
};
/** EmojiKeyboardConfiguration */
var _emojiKeyboardConfiguration = emojiKeyboardConfiguration || new _EmojiKeyboardConfiguration.EmojiKeyboardConfiguration({});
/** emoji board */
var emojiBoard = function emojiBoard() {
if (viewEmojiTray.emojiTrayPreview) {
var _viewEmojiTray$event, _viewEmojiTray$event2;
return /*#__PURE__*/_react["default"].createElement(_.CometChatPopover, {
position: "top",
x: viewEmojiTray === null || viewEmojiTray === void 0 ? void 0 : (_viewEmojiTray$event = viewEmojiTray.event) === null || _viewEmojiTray$event === void 0 ? void 0 : _viewEmojiTray$event.clientX,
y: viewEmojiTray === null || viewEmojiTray === void 0 ? void 0 : (_viewEmojiTray$event2 = viewEmojiTray.event) === null || _viewEmojiTray$event2 === void 0 ? void 0 : _viewEmojiTray$event2.clientY,
style: (0, _style.emojiBoardPopoverStyle)(_theme, _emojiKeyboardConfiguration)
}, /*#__PURE__*/_react["default"].createElement(_2.CometChatEmojiKeyboard, {
theme: _theme,
style: (0, _style.emojiKeyBoardStyle)(_theme, _emojiKeyboardConfiguration),
onClick: (_emojiKeyboardConfiguration === null || _emojiKeyboardConfiguration === void 0 ? void 0 : _emojiKeyboardConfiguration.onClick) || onEmojiSelect.bind(_this)
}));
} else {
return null;
}
};
/** live reaction button */
var liveReactionButton = function liveReactionButton() {
var _messageInputRef$curr;
if (!hideLiveReaction && !(messageInputRef !== null && messageInputRef !== void 0 && (_messageInputRef$curr = messageInputRef.current) !== null && _messageInputRef$curr !== void 0 && _messageInputRef$curr.innerText)) {
return /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.reactionBtnStyle)(),
className: "button__reactions",
onClick: shareLiveReaction.bind(_this)
}, /*#__PURE__*/_react["default"].createElement("img", {
src: liveReactionIconURL,
alt: liveReactionIconURL,
title: (0, _.localize)("LIVE_REACTION"),
style: (0, _style.reactionBtnIconStyle)()
}));
}
return null;
};
/** send button */
var sendButton = function sendButton() {
return messageInput !== null && messageInput !== void 0 && messageInput.length && showSendButton ? /*#__PURE__*/_react["default"].createElement("div", {
title: (0, _.localize)("SEND_MESSAGE"),
style: (0, _style.sendButtonStyle)(),
className: "button__send",
onClick: sendTextMessage
}, /*#__PURE__*/_react["default"].createElement("i", {
style: (0, _style.sendBtnIconStyle)(style, sendButtonIconURL, _theme)
})) : null;
};
/**message input field*/
var inputField = function inputField() {
return viewInputField ? /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.messageInputStyle)(style, disabledState, _theme),
className: "input__message-input",
contentEditable: "true",
placeholder: placeholderText,
dir: _.CometChatLocalize.getDir(),
onInput: inputChangeHandler,
onBlur: endTyping.bind(_this),
onKeyDown: sendMessageOnEnter,
ref: messageInputRef
}) : null;
};
(0, _hooks.Hooks)(props, loggedInUser, setChatWith, setChatWithId, chatRef, setViewSticker, stickerTemplate, setActionSheetItems, setViewInputField, setViewAttachButton, openCreatePoll, fileInputHandler, shareCollaborativeDocument, shareCollaborativeWhiteboard, sendSticker);
return /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.chatComposerStyle)(style, _theme),
className: "chat__composer"
}, previewTray(), stickerTray(), emojiBoard(), actionSheetBoard(), /*#__PURE__*/_react["default"].createElement("input", {
type: "file",
ref: fileInputRef,
style: (0, _style.fileInputStyle)(),
onChange: fileInputChangeHandler
}), /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.composerInputStyle)(style),
className: "composer__input"
}, /*#__PURE__*/_react["default"].createElement("div", {
tabIndex: "-1",
style: (0, _style.inputInnerStyle)(style, _theme),
className: "input__inner"
}, inputField(), /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.inputStickyStyle)(disabledState, attachOption(), _theme),
className: "input__sticky"
}, attachOption(), /*#__PURE__*/_react["default"].createElement("div", {
className: "input__sticky__buttons",
style: (0, _style.stickyButtonStyle)()
}, stickerButton(), emojiButton(), liveReactionButton(), sendButton())))), createPoll());
});
exports.CometChatMessageComposer = CometChatMessageComposer;
CometChatMessageComposer.defaultProps = {
user: null,
group: null,
style: _objectSpread(_objectSpread({}, new _Shared.BaseStyles({
width: "100%",
height: "auto",
background: "rgb(255, 255, 255)",
border: "1px solid rgb(234, 234, 234)",
borderRadius: "8px",
activeBackground: ""
})), {}, {
placeholderTextFont: "400 15px Inter, sans-serif",
placeholderTextColor: "rgba(20, 20, 20,0.6)",
attachmentIconTint: "rgba(20, 20, 20, 0.46)",
sendButtonIconTint: "#39f",
inputBackground: "",
inputTextFont: "",
inputTextColor: "",
emojiIconTint: "rgba(20, 20, 20, 0.46)",
stickerIconTint: "rgba(20, 20, 20, 0.46)",
stickerCloseIconTint: ""
}),
attachmentIconURL: _addCircleFilled["default"],
stickerCloseIconURL: "",
placeholderText: (0, _.localize)("ENTER_YOUR_MESSAGE_HERE"),
hideAttachment: false,
liveReactionIconURL: _heart["default"],
hideLiveReaction: false,
hideEmoji: false,
emojiIconURL: _emoji["default"],
showSendButton: true,
sendButtonIconURL: _sendMessage["default"],
messageTypes: null,
excludeMessageTypes: null,
onSendButtonClick: null,
enableTypingIndicator: true,
enableSoundForMessage: true,
customOutgoingMessageSound: null,
messagePreviewConfiguration: null,
emojiKeyboardConfiguration: null,
stickerKeyboardConfiguration: null,
createPollConfiguration: null,
actionSheetConfiguration: null
};
CometChatMessageComposer.propTypes = {
user: _propTypes["default"].instanceOf(_chat.CometChat.User),
group: _propTypes["default"].instanceOf(_chat.CometChat.Group),
hideAttachment: _propTypes["default"].bool,
attachmentIconURL: _propTypes["default"].string,
stickerCloseIconURL: _propTypes["default"].string,
placeholderText: _propTypes["default"].string,
hideLiveReaction: _propTypes["default"].bool,
liveReactionIconURL: _propTypes["default"].string,
hideEmoji: _propTypes["default"].bool,
emojiIconURL: _propTypes["default"].string,
showSendButton: _propTypes["default"].bool,
sendButtonIconURL: _propTypes["default"].string,
onSendButtonClick: _propTypes["default"].func,
messageTypes: _propTypes["default"].array,
excludeMessageTypes: _propTypes["default"].array,
enableTypingIndicator: _propTypes["default"].bool,
enableSoundForMessage: _propTypes["default"].bool,
customOutgoingMessageSound: _propTypes["default"].string,
style: _propTypes["default"].object,
messagePreviewConfiguration: _propTypes["default"].object,
emojiKeyboardConfiguration: _propTypes["default"].object,
stickerKeyboardConfiguration: _propTypes["default"].object,
createPollConfiguration: _propTypes["default"].object,
actionSheetConfiguration: _propTypes["default"].object,
theme: _propTypes["default"].object
};