sceyt-chat-react-uikit 1.7.8-beta.11 → 1.7.8-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,12 @@
1
1
  /// <reference types="react" />
2
- export default function FormatMessagePlugin({ editorState, setMessageBodyAttributes, setMessageText, messageToEdit }: any): JSX.Element | null;
2
+ import { IMessage, IMember } from '../../../types';
3
+ export default function FormatMessagePlugin({ editorState, setMessageBodyAttributes, setMessageText, setMentionedMember, messageToEdit, activeChannelMembers, contactsMap, getFromContacts }: {
4
+ editorState: any;
5
+ setMessageBodyAttributes: (data: any) => void;
6
+ setMessageText: (newMessageText: string) => void;
7
+ setMentionedMember: (mentionedMember: any) => void;
8
+ messageToEdit?: IMessage;
9
+ activeChannelMembers: IMember[];
10
+ contactsMap: any;
11
+ getFromContacts: boolean;
12
+ }): JSX.Element | null;
package/index.js CHANGED
@@ -40904,26 +40904,122 @@ function EditMessagePlugin(_ref) {
40904
40904
  return null;
40905
40905
  }
40906
40906
 
40907
- function useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, messageToEdit) {
40908
- function $insertDataTransferForPlainText(dataTransfer, selection) {
40909
- var text = dataTransfer.getData('text/plain') || dataTransfer.getData('text/uri-list');
40910
- if (text != null) {
40911
- selection.insertRawText(text);
40907
+ function useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, setMentionedMember, messageToEdit, activeChannelMembers, contactsMap, getFromContacts) {
40908
+ if (activeChannelMembers === void 0) {
40909
+ activeChannelMembers = [];
40910
+ }
40911
+ if (contactsMap === void 0) {
40912
+ contactsMap = {};
40913
+ }
40914
+ if (getFromContacts === void 0) {
40915
+ getFromContacts = false;
40916
+ }
40917
+ function processMentionsInPastedText(pastedText, activeChannelMembers, contactsMap, getFromContacts, setMentionedMember, selection) {
40918
+ if (!pastedText) return;
40919
+ var contacts = getFromContacts ? [].concat(Object.values(contactsMap), activeChannelMembers) : activeChannelMembers;
40920
+ var mentionPatterns = [];
40921
+ contacts.forEach(function (contactOrMember) {
40922
+ var contactFromMap = contactsMap[contactOrMember.id];
40923
+ var contact = getFromContacts && contactFromMap ? contactFromMap : undefined;
40924
+ var member = contact ? undefined : contactOrMember;
40925
+ var fullDisplayName = makeUsername(contact, member, getFromContacts, false);
40926
+ if (fullDisplayName && fullDisplayName !== 'Deleted user') {
40927
+ mentionPatterns.push({
40928
+ pattern: "@" + fullDisplayName,
40929
+ contact: contactOrMember
40930
+ });
40931
+ }
40932
+ });
40933
+ mentionPatterns.sort(function (a, b) {
40934
+ return b.pattern.length - a.pattern.length;
40935
+ });
40936
+ var matches = [];
40937
+ var usedRanges = [];
40938
+ mentionPatterns.forEach(function (_ref) {
40939
+ var pattern = _ref.pattern,
40940
+ contact = _ref.contact;
40941
+ var searchIndex = 0;
40942
+ var _loop = function _loop() {
40943
+ var index = pastedText.indexOf(pattern, searchIndex);
40944
+ if (index === -1) return 1;
40945
+ var isOverlapping = usedRanges.some(function (range) {
40946
+ return index < range.end && index + pattern.length > range.start;
40947
+ });
40948
+ if (!isOverlapping) {
40949
+ var charBefore = index > 0 ? pastedText[index - 1] : undefined;
40950
+ var isValidStart = charBefore === undefined || charBefore === ' ' || charBefore === '\n' || charBefore === '\r';
40951
+ var charAfter = pastedText[index + pattern.length];
40952
+ var isValidEnd = charAfter === undefined || charAfter === ' ' || charAfter === '\n' || charAfter === '\r';
40953
+ if (isValidStart && isValidEnd) {
40954
+ matches.push({
40955
+ start: index,
40956
+ end: index + pattern.length,
40957
+ contact: contact,
40958
+ pattern: pattern
40959
+ });
40960
+ usedRanges.push({
40961
+ start: index,
40962
+ end: index + pattern.length
40963
+ });
40964
+ }
40965
+ }
40966
+ searchIndex = index + 1;
40967
+ };
40968
+ while (true) {
40969
+ if (_loop()) break;
40970
+ }
40971
+ });
40972
+ matches.sort(function (a, b) {
40973
+ return a.start - b.start;
40974
+ });
40975
+ var nodes = [];
40976
+ var currentIndex = 0;
40977
+ matches.forEach(function (_ref2) {
40978
+ var start = _ref2.start,
40979
+ end = _ref2.end,
40980
+ contact = _ref2.contact,
40981
+ pattern = _ref2.pattern;
40982
+ if (start > currentIndex) {
40983
+ var textBefore = pastedText.substring(currentIndex, start);
40984
+ if (textBefore) {
40985
+ nodes.push(lexical.$createTextNode(textBefore));
40986
+ }
40987
+ }
40988
+ setMentionedMember(contact);
40989
+ var mentionNode = $createMentionNode(_extends({}, contact, {
40990
+ name: pattern
40991
+ }));
40992
+ nodes.push(mentionNode);
40993
+ currentIndex = end;
40994
+ });
40995
+ if (currentIndex < pastedText.length) {
40996
+ var remainingText = pastedText.substring(currentIndex);
40997
+ if (remainingText) {
40998
+ nodes.push(lexical.$createTextNode(remainingText));
40999
+ }
41000
+ }
41001
+ if (matches.length === 0) {
41002
+ nodes.push(lexical.$createTextNode(pastedText));
41003
+ }
41004
+ if (nodes.length > 0) {
41005
+ selection.insertNodes(nodes);
40912
41006
  }
40913
41007
  }
40914
41008
  var handlePast = React.useCallback(function (e) {
40915
- var pastedTex = e.clipboardData.getData('text/plain');
40916
- if (pastedTex) {
41009
+ if (!('clipboardData' in e) || !e.clipboardData) {
41010
+ return false;
41011
+ }
41012
+ var pastedText = e.clipboardData.getData('text/plain');
41013
+ if (pastedText) {
40917
41014
  editor.update(function () {
40918
41015
  var selection = lexical.$getSelection();
40919
- var _event = event,
40920
- clipboardData = _event.clipboardData;
40921
- if (clipboardData != null && lexical.$isRangeSelection(selection)) {
40922
- $insertDataTransferForPlainText(clipboardData, selection);
41016
+ if (lexical.$isRangeSelection(selection)) {
41017
+ processMentionsInPastedText(pastedText, activeChannelMembers, contactsMap, getFromContacts, setMentionedMember, selection);
40923
41018
  }
40924
41019
  });
40925
41020
  }
40926
- }, [editor]);
41021
+ return true;
41022
+ }, [editor, contactsMap, setMentionedMember, getFromContacts, activeChannelMembers]);
40927
41023
  var onDelete = React.useCallback(function (event) {
40928
41024
  event.preventDefault();
40929
41025
  editor.update(function () {
@@ -41037,14 +41133,18 @@ function useFormatMessage(editor, editorState, setMessageBodyAttributes, setMess
41037
41133
  }
41038
41134
  }, [editor, editorState]);
41039
41135
  }
41040
- function FormatMessagePlugin(_ref) {
41041
- var editorState = _ref.editorState,
41042
- setMessageBodyAttributes = _ref.setMessageBodyAttributes,
41043
- setMessageText = _ref.setMessageText,
41044
- messageToEdit = _ref.messageToEdit;
41136
+ function FormatMessagePlugin(_ref3) {
41137
+ var editorState = _ref3.editorState,
41138
+ setMessageBodyAttributes = _ref3.setMessageBodyAttributes,
41139
+ setMessageText = _ref3.setMessageText,
41140
+ setMentionedMember = _ref3.setMentionedMember,
41141
+ messageToEdit = _ref3.messageToEdit,
41142
+ activeChannelMembers = _ref3.activeChannelMembers,
41143
+ contactsMap = _ref3.contactsMap,
41144
+ getFromContacts = _ref3.getFromContacts;
41045
41145
  var _useLexicalComposerCo = LexicalComposerContext.useLexicalComposerContext(),
41046
41146
  editor = _useLexicalComposerCo[0];
41047
- useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, messageToEdit);
41147
+ useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, setMentionedMember, messageToEdit, activeChannelMembers, contactsMap, getFromContacts);
41048
41148
  return null;
41049
41149
  }
41050
41150
 
@@ -44196,7 +44296,11 @@ var SendMessageInput = function SendMessageInput(_ref3) {
44196
44296
  editorState: realEditorState,
44197
44297
  setMessageBodyAttributes: setMessageBodyAttributes,
44198
44298
  setMessageText: messageToEdit ? setEditMessageText : setMessageText,
44199
- messageToEdit: messageToEdit
44299
+ messageToEdit: messageToEdit,
44300
+ activeChannelMembers: activeChannelMembers,
44301
+ contactsMap: contactsMap,
44302
+ getFromContacts: getFromContacts,
44303
+ setMentionedMember: handleSetMentionMember
44200
44304
  }), /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isEmojisOpened && (/*#__PURE__*/React__default.createElement(EmojisPopup$1, {
44201
44305
  handleEmojiPopupToggle: handleEmojiPopupToggle,
44202
44306
  rightSide: emojisInRightSide,
package/index.modern.js CHANGED
@@ -40903,26 +40903,122 @@ function EditMessagePlugin(_ref) {
40903
40903
  return null;
40904
40904
  }
40905
40905
 
40906
- function useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, messageToEdit) {
40907
- function $insertDataTransferForPlainText(dataTransfer, selection) {
40908
- var text = dataTransfer.getData('text/plain') || dataTransfer.getData('text/uri-list');
40909
- if (text != null) {
40910
- selection.insertRawText(text);
40906
+ function useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, setMentionedMember, messageToEdit, activeChannelMembers, contactsMap, getFromContacts) {
40907
+ if (activeChannelMembers === void 0) {
40908
+ activeChannelMembers = [];
40909
+ }
40910
+ if (contactsMap === void 0) {
40911
+ contactsMap = {};
40912
+ }
40913
+ if (getFromContacts === void 0) {
40914
+ getFromContacts = false;
40915
+ }
40916
+ function processMentionsInPastedText(pastedText, activeChannelMembers, contactsMap, getFromContacts, setMentionedMember, selection) {
40917
+ if (!pastedText) return;
40918
+ var contacts = getFromContacts ? [].concat(Object.values(contactsMap), activeChannelMembers) : activeChannelMembers;
40919
+ var mentionPatterns = [];
40920
+ contacts.forEach(function (contactOrMember) {
40921
+ var contactFromMap = contactsMap[contactOrMember.id];
40922
+ var contact = getFromContacts && contactFromMap ? contactFromMap : undefined;
40923
+ var member = contact ? undefined : contactOrMember;
40924
+ var fullDisplayName = makeUsername(contact, member, getFromContacts, false);
40925
+ if (fullDisplayName && fullDisplayName !== 'Deleted user') {
40926
+ mentionPatterns.push({
40927
+ pattern: "@" + fullDisplayName,
40928
+ contact: contactOrMember
40929
+ });
40930
+ }
40931
+ });
40932
+ mentionPatterns.sort(function (a, b) {
40933
+ return b.pattern.length - a.pattern.length;
40934
+ });
40935
+ var matches = [];
40936
+ var usedRanges = [];
40937
+ mentionPatterns.forEach(function (_ref) {
40938
+ var pattern = _ref.pattern,
40939
+ contact = _ref.contact;
40940
+ var searchIndex = 0;
40941
+ var _loop = function _loop() {
40942
+ var index = pastedText.indexOf(pattern, searchIndex);
40943
+ if (index === -1) return 1;
40944
+ var isOverlapping = usedRanges.some(function (range) {
40945
+ return index < range.end && index + pattern.length > range.start;
40946
+ });
40947
+ if (!isOverlapping) {
40948
+ var charBefore = index > 0 ? pastedText[index - 1] : undefined;
40949
+ var isValidStart = charBefore === undefined || charBefore === ' ' || charBefore === '\n' || charBefore === '\r';
40950
+ var charAfter = pastedText[index + pattern.length];
40951
+ var isValidEnd = charAfter === undefined || charAfter === ' ' || charAfter === '\n' || charAfter === '\r';
40952
+ if (isValidStart && isValidEnd) {
40953
+ matches.push({
40954
+ start: index,
40955
+ end: index + pattern.length,
40956
+ contact: contact,
40957
+ pattern: pattern
40958
+ });
40959
+ usedRanges.push({
40960
+ start: index,
40961
+ end: index + pattern.length
40962
+ });
40963
+ }
40964
+ }
40965
+ searchIndex = index + 1;
40966
+ };
40967
+ while (true) {
40968
+ if (_loop()) break;
40969
+ }
40970
+ });
40971
+ matches.sort(function (a, b) {
40972
+ return a.start - b.start;
40973
+ });
40974
+ var nodes = [];
40975
+ var currentIndex = 0;
40976
+ matches.forEach(function (_ref2) {
40977
+ var start = _ref2.start,
40978
+ end = _ref2.end,
40979
+ contact = _ref2.contact,
40980
+ pattern = _ref2.pattern;
40981
+ if (start > currentIndex) {
40982
+ var textBefore = pastedText.substring(currentIndex, start);
40983
+ if (textBefore) {
40984
+ nodes.push($createTextNode(textBefore));
40985
+ }
40986
+ }
40987
+ setMentionedMember(contact);
40988
+ var mentionNode = $createMentionNode(_extends({}, contact, {
40989
+ name: pattern
40990
+ }));
40991
+ nodes.push(mentionNode);
40992
+ currentIndex = end;
40993
+ });
40994
+ if (currentIndex < pastedText.length) {
40995
+ var remainingText = pastedText.substring(currentIndex);
40996
+ if (remainingText) {
40997
+ nodes.push($createTextNode(remainingText));
40998
+ }
40999
+ }
41000
+ if (matches.length === 0) {
41001
+ nodes.push($createTextNode(pastedText));
41002
+ }
41003
+ if (nodes.length > 0) {
41004
+ selection.insertNodes(nodes);
40911
41005
  }
40912
41006
  }
40913
41007
  var handlePast = useCallback(function (e) {
40914
- var pastedTex = e.clipboardData.getData('text/plain');
40915
- if (pastedTex) {
41008
+ if (!('clipboardData' in e) || !e.clipboardData) {
41009
+ return false;
41010
+ }
41011
+ var pastedText = e.clipboardData.getData('text/plain');
41012
+ if (pastedText) {
40916
41013
  editor.update(function () {
40917
41014
  var selection = $getSelection();
40918
- var _event = event,
40919
- clipboardData = _event.clipboardData;
40920
- if (clipboardData != null && $isRangeSelection(selection)) {
40921
- $insertDataTransferForPlainText(clipboardData, selection);
41015
+ if ($isRangeSelection(selection)) {
41016
+ processMentionsInPastedText(pastedText, activeChannelMembers, contactsMap, getFromContacts, setMentionedMember, selection);
40922
41017
  }
40923
41018
  });
40924
41019
  }
40925
- }, [editor]);
41020
+ return true;
41021
+ }, [editor, contactsMap, setMentionedMember, getFromContacts, activeChannelMembers]);
40926
41022
  var onDelete = useCallback(function (event) {
40927
41023
  event.preventDefault();
40928
41024
  editor.update(function () {
@@ -41036,14 +41132,18 @@ function useFormatMessage(editor, editorState, setMessageBodyAttributes, setMess
41036
41132
  }
41037
41133
  }, [editor, editorState]);
41038
41134
  }
41039
- function FormatMessagePlugin(_ref) {
41040
- var editorState = _ref.editorState,
41041
- setMessageBodyAttributes = _ref.setMessageBodyAttributes,
41042
- setMessageText = _ref.setMessageText,
41043
- messageToEdit = _ref.messageToEdit;
41135
+ function FormatMessagePlugin(_ref3) {
41136
+ var editorState = _ref3.editorState,
41137
+ setMessageBodyAttributes = _ref3.setMessageBodyAttributes,
41138
+ setMessageText = _ref3.setMessageText,
41139
+ setMentionedMember = _ref3.setMentionedMember,
41140
+ messageToEdit = _ref3.messageToEdit,
41141
+ activeChannelMembers = _ref3.activeChannelMembers,
41142
+ contactsMap = _ref3.contactsMap,
41143
+ getFromContacts = _ref3.getFromContacts;
41044
41144
  var _useLexicalComposerCo = useLexicalComposerContext(),
41045
41145
  editor = _useLexicalComposerCo[0];
41046
- useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, messageToEdit);
41146
+ useFormatMessage(editor, editorState, setMessageBodyAttributes, setMessageText, setMentionedMember, messageToEdit, activeChannelMembers, contactsMap, getFromContacts);
41047
41147
  return null;
41048
41148
  }
41049
41149
 
@@ -44195,7 +44295,11 @@ var SendMessageInput = function SendMessageInput(_ref3) {
44195
44295
  editorState: realEditorState,
44196
44296
  setMessageBodyAttributes: setMessageBodyAttributes,
44197
44297
  setMessageText: messageToEdit ? setEditMessageText : setMessageText,
44198
- messageToEdit: messageToEdit
44298
+ messageToEdit: messageToEdit,
44299
+ activeChannelMembers: activeChannelMembers,
44300
+ contactsMap: contactsMap,
44301
+ getFromContacts: getFromContacts,
44302
+ setMentionedMember: handleSetMentionMember
44199
44303
  }), /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isEmojisOpened && (/*#__PURE__*/React__default.createElement(EmojisPopup$1, {
44200
44304
  handleEmojiPopupToggle: handleEmojiPopupToggle,
44201
44305
  rightSide: emojisInRightSide,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sceyt-chat-react-uikit",
3
- "version": "1.7.8-beta.11",
3
+ "version": "1.7.8-beta.12",
4
4
  "description": "Interactive React UI Components for Sceyt Chat.",
5
5
  "author": "Sceyt",
6
6
  "license": "MIT",