stream-chat-react-native-core 4.13.0-beta.3 → 4.13.1-beta.2
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.
- package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessage.js +16 -4
- package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessage.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -3
- package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageNew.js +2 -0
- package/lib/commonjs/mock-builders/event/messageNew.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelList/hooks/listeners/useNewMessage.js +16 -4
- package/lib/module/components/ChannelList/hooks/listeners/useNewMessage.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -3
- package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
- package/lib/module/mock-builders/event/messageNew.js +2 -0
- package/lib/module/mock-builders/event/messageNew.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/package.json +1 -1
- package/src/components/ChannelList/__tests__/ChannelList.test.js +28 -0
- package/src/components/ChannelList/hooks/listeners/useNewMessage.ts +19 -5
- package/src/components/Message/MessageSimple/MessageTextContainer.tsx +22 -2
- package/src/mock-builders/event/messageNew.js +2 -0
- package/src/version.json +1 -1
|
@@ -23,11 +23,23 @@ var useNewMessage = function useNewMessage(_ref) {
|
|
|
23
23
|
(0, _react.useEffect)(function () {
|
|
24
24
|
var handleEvent = function handleEvent(event) {
|
|
25
25
|
setChannels(function (channels) {
|
|
26
|
-
if (!lockChannelOrder && event.cid) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
cid: event.cid
|
|
26
|
+
if (!lockChannelOrder && event.cid && event.channel_type && event.channel_id) {
|
|
27
|
+
var targetChannelIndex = channels.findIndex(function (c) {
|
|
28
|
+
return c.cid === event.cid;
|
|
30
29
|
});
|
|
30
|
+
|
|
31
|
+
if (targetChannelIndex >= 0) {
|
|
32
|
+
return (0, _utils.moveChannelUp)({
|
|
33
|
+
channels: channels,
|
|
34
|
+
cid: event.cid
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var channel = client.channel(event.channel_type, event.channel_id);
|
|
39
|
+
|
|
40
|
+
if (channel.initialized) {
|
|
41
|
+
return [channel].concat((0, _toConsumableArray2["default"])(channels));
|
|
42
|
+
}
|
|
31
43
|
}
|
|
32
44
|
|
|
33
45
|
return (0, _toConsumableArray2["default"])(channels);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useNewMessage.ts"],"names":["useNewMessage","lockChannelOrder","setChannels","client","handleEvent","event","channels","cid","on","off"],"mappings":";;;;;;;;;AAAA;;AAIA;;AAGA;;AAQO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,OAKS;AAAA,MAFpCC,gBAEoC,QAFpCA,gBAEoC;AAAA,MADpCC,WACoC,QADpCA,WACoC;;AACpC,wBAAmB,kCAAnB;AAAA,MAAQC,MAAR,mBAAQA,MAAR;;AAEA,wBAAU,YAAM;AACd,QAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAsC;AACxDH,MAAAA,WAAW,CAAC,UAACI,QAAD,EAAc;AACxB,YAAI,CAACL,gBAAD,IAAqBI,KAAK,CAACE,
|
|
1
|
+
{"version":3,"sources":["useNewMessage.ts"],"names":["useNewMessage","lockChannelOrder","setChannels","client","handleEvent","event","channels","cid","channel_type","channel_id","targetChannelIndex","findIndex","c","channel","initialized","on","off"],"mappings":";;;;;;;;;AAAA;;AAIA;;AAGA;;AAQO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,OAKS;AAAA,MAFpCC,gBAEoC,QAFpCA,gBAEoC;AAAA,MADpCC,WACoC,QADpCA,WACoC;;AACpC,wBAAmB,kCAAnB;AAAA,MAAQC,MAAR,mBAAQA,MAAR;;AAEA,wBAAU,YAAM;AACd,QAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAsC;AACxDH,MAAAA,WAAW,CAAC,UAACI,QAAD,EAAc;AACxB,YAAI,CAACL,gBAAD,IAAqBI,KAAK,CAACE,GAA3B,IAAkCF,KAAK,CAACG,YAAxC,IAAwDH,KAAK,CAACI,UAAlE,EAA8E;AAC5E,cAAMC,kBAAkB,GAAGJ,QAAQ,CAACK,SAAT,CAAmB,UAACC,CAAD;AAAA,mBAAOA,CAAC,CAACL,GAAF,KAAUF,KAAK,CAACE,GAAvB;AAAA,WAAnB,CAA3B;;AAEA,cAAIG,kBAAkB,IAAI,CAA1B,EAA6B;AAC3B,mBAAO,0BAAkC;AACvCJ,cAAAA,QAAQ,EAARA,QADuC;AAEvCC,cAAAA,GAAG,EAAEF,KAAK,CAACE;AAF4B,aAAlC,CAAP;AAID;;AAKD,cAAMM,OAAO,GAAGV,MAAM,CAACU,OAAP,CAAeR,KAAK,CAACG,YAArB,EAAmCH,KAAK,CAACI,UAAzC,CAAhB;;AAEA,cAAII,OAAO,CAACC,WAAZ,EAAyB;AACvB,oBAAQD,OAAR,6CAAoBP,QAApB;AACD;AACF;;AAED,mDAAWA,QAAX;AACD,OAtBU,CAAX;AAuBD,KAxBD;;AA0BAH,IAAAA,MAAM,CAACY,EAAP,CAAU,aAAV,EAAyBX,WAAzB;AACA,WAAO;AAAA,aAAMD,MAAM,CAACa,GAAP,CAAW,aAAX,EAA0BZ,WAA1B,CAAN;AAAA,KAAP;AACD,GA7BD,EA6BG,EA7BH;AA8BD,CAtCM","sourcesContent":["import { useEffect } from 'react';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport { useChatContext } from '../../../../contexts/chatContext/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\nimport { moveChannelUp } from '../../utils';\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n lockChannelOrder: boolean;\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>;\n };\n\nexport const useNewMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n lockChannelOrder,\n setChannels,\n}: Parameters<StreamChatGenerics>) => {\n const { client } = useChatContext<StreamChatGenerics>();\n\n useEffect(() => {\n const handleEvent = (event: Event<StreamChatGenerics>) => {\n setChannels((channels) => {\n if (!lockChannelOrder && event.cid && event.channel_type && event.channel_id) {\n const targetChannelIndex = channels.findIndex((c) => c.cid === event.cid);\n\n if (targetChannelIndex >= 0) {\n return moveChannelUp<StreamChatGenerics>({\n channels,\n cid: event.cid,\n });\n }\n\n // If channel doesn't exist in existing list, check in activeChannels as well.\n // It may happen that channel was hidden using channel.hide(). In that case\n // We remove it from `channels` state, but its still being watched and exists in client.activeChannels.\n const channel = client.channel(event.channel_type, event.channel_id);\n\n if (channel.initialized) {\n return [channel, ...channels];\n }\n }\n\n return [...channels];\n });\n };\n\n client.on('message.new', handleEvent);\n return () => client.off('message.new', handleEvent);\n }, []);\n};\n"]}
|
|
@@ -95,9 +95,11 @@ var MessageTextContainerWithContext = function MessageTextContainerWithContext(p
|
|
|
95
95
|
var areEqual = function areEqual(prevProps, nextProps) {
|
|
96
96
|
var _prevMessage$mentione, _nextMessage$mentione, _nextMessage$mentione2, _prevMessage$mentione2, _nextMessage$mentione3;
|
|
97
97
|
|
|
98
|
-
var
|
|
98
|
+
var prevMarkdownStyles = prevProps.markdownStyles,
|
|
99
|
+
prevMessage = prevProps.message,
|
|
99
100
|
prevOnlyEmojis = prevProps.onlyEmojis;
|
|
100
|
-
var
|
|
101
|
+
var nextMarkdownStyles = nextProps.markdownStyles,
|
|
102
|
+
nextMessage = nextProps.message,
|
|
101
103
|
nextOnlyEmojis = nextProps.onlyEmojis;
|
|
102
104
|
var messageTextEqual = prevMessage.text === nextMessage.text;
|
|
103
105
|
if (!messageTextEqual) return false;
|
|
@@ -105,6 +107,8 @@ var areEqual = function areEqual(prevProps, nextProps) {
|
|
|
105
107
|
if (!onlyEmojisEqual) return false;
|
|
106
108
|
var mentionedUsersEqual = ((_prevMessage$mentione = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione.length) === ((_nextMessage$mentione = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione.length) && (((_nextMessage$mentione2 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione2.length) === 0 || ((_prevMessage$mentione2 = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione2.length) && ((_nextMessage$mentione3 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione3.length) && prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name);
|
|
107
109
|
if (!mentionedUsersEqual) return false;
|
|
110
|
+
var markdownStylesEqual = prevMarkdownStyles === nextMarkdownStyles || Object.keys(prevMarkdownStyles || {}).length === 0 && Object.keys(nextMarkdownStyles || {}).length === 0 || JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);
|
|
111
|
+
if (!markdownStylesEqual) return false;
|
|
108
112
|
return true;
|
|
109
113
|
};
|
|
110
114
|
|
|
@@ -136,7 +140,7 @@ var MessageTextContainer = function MessageTextContainer(props) {
|
|
|
136
140
|
__self: _this,
|
|
137
141
|
__source: {
|
|
138
142
|
fileName: _jsxFileName,
|
|
139
|
-
lineNumber:
|
|
143
|
+
lineNumber: 180,
|
|
140
144
|
columnNumber: 5
|
|
141
145
|
}
|
|
142
146
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMessage","prevOnlyEmojis","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const { message: prevMessage, onlyEmojis: prevOnlyEmojis } = prevProps;\n const { message: nextMessage, onlyEmojis: nextOnlyEmojis } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
1
|
+
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMarkdownStyles","prevMessage","prevOnlyEmojis","nextMarkdownStyles","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","markdownStylesEqual","Object","keys","JSON","stringify","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n markdownStyles: prevMarkdownStyles,\n message: prevMessage,\n onlyEmojis: prevOnlyEmojis,\n } = prevProps;\n const {\n markdownStyles: nextMarkdownStyles,\n message: nextMessage,\n onlyEmojis: nextOnlyEmojis,\n } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n // stringify could be an expensive operation, so lets rule out the obvious\n // possibilities first such as different object reference or empty objects etc.\n // Also keeping markdown equality check at the last to make sure other less\n // expensive equality checks get executed first and markdown check will be skipped if returned\n // false from previous checks.\n const markdownStylesEqual =\n prevMarkdownStyles === nextMarkdownStyles ||\n (Object.keys(prevMarkdownStyles || {}).length === 0 &&\n Object.keys(nextMarkdownStyles || {}).length === 0) ||\n JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);\n if (!markdownStylesEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
@@ -7,6 +7,8 @@ var _default = function _default(client, newMessage) {
|
|
|
7
7
|
var channel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
8
8
|
client.dispatchEvent({
|
|
9
9
|
channel: channel,
|
|
10
|
+
channel_id: channel.id,
|
|
11
|
+
channel_type: channel.type,
|
|
10
12
|
cid: channel.cid,
|
|
11
13
|
message: newMessage,
|
|
12
14
|
type: 'message.new'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["messageNew.js"],"names":["client","newMessage","channel","dispatchEvent","
|
|
1
|
+
{"version":3,"sources":["messageNew.js"],"names":["client","newMessage","channel","dispatchEvent","channel_id","id","channel_type","type","cid","message"],"mappings":";;;;;eAAe,kBAACA,MAAD,EAASC,UAAT,EAAsC;AAAA,MAAjBC,OAAiB,uEAAP,EAAO;AACnDF,EAAAA,MAAM,CAACG,aAAP,CAAqB;AACnBD,IAAAA,OAAO,EAAPA,OADmB;AAEnBE,IAAAA,UAAU,EAAEF,OAAO,CAACG,EAFD;AAGnBC,IAAAA,YAAY,EAAEJ,OAAO,CAACK,IAHH;AAInBC,IAAAA,GAAG,EAAEN,OAAO,CAACM,GAJM;AAKnBC,IAAAA,OAAO,EAAER,UALU;AAMnBM,IAAAA,IAAI,EAAE;AANa,GAArB;AAQD,C","sourcesContent":["export default (client, newMessage, channel = {}) => {\n client.dispatchEvent({\n channel,\n channel_id: channel.id,\n channel_type: channel.type,\n cid: channel.cid,\n message: newMessage,\n type: 'message.new',\n });\n};\n"]}
|
|
@@ -23,11 +23,23 @@ var useNewMessage = function useNewMessage(_ref) {
|
|
|
23
23
|
(0, _react.useEffect)(function () {
|
|
24
24
|
var handleEvent = function handleEvent(event) {
|
|
25
25
|
setChannels(function (channels) {
|
|
26
|
-
if (!lockChannelOrder && event.cid) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
cid: event.cid
|
|
26
|
+
if (!lockChannelOrder && event.cid && event.channel_type && event.channel_id) {
|
|
27
|
+
var targetChannelIndex = channels.findIndex(function (c) {
|
|
28
|
+
return c.cid === event.cid;
|
|
30
29
|
});
|
|
30
|
+
|
|
31
|
+
if (targetChannelIndex >= 0) {
|
|
32
|
+
return (0, _utils.moveChannelUp)({
|
|
33
|
+
channels: channels,
|
|
34
|
+
cid: event.cid
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var channel = client.channel(event.channel_type, event.channel_id);
|
|
39
|
+
|
|
40
|
+
if (channel.initialized) {
|
|
41
|
+
return [channel].concat((0, _toConsumableArray2["default"])(channels));
|
|
42
|
+
}
|
|
31
43
|
}
|
|
32
44
|
|
|
33
45
|
return (0, _toConsumableArray2["default"])(channels);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useNewMessage.ts"],"names":["useNewMessage","lockChannelOrder","setChannels","client","handleEvent","event","channels","cid","on","off"],"mappings":";;;;;;;;;AAAA;;AAIA;;AAGA;;AAQO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,OAKS;AAAA,MAFpCC,gBAEoC,QAFpCA,gBAEoC;AAAA,MADpCC,WACoC,QADpCA,WACoC;;AACpC,wBAAmB,kCAAnB;AAAA,MAAQC,MAAR,mBAAQA,MAAR;;AAEA,wBAAU,YAAM;AACd,QAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAsC;AACxDH,MAAAA,WAAW,CAAC,UAACI,QAAD,EAAc;AACxB,YAAI,CAACL,gBAAD,IAAqBI,KAAK,CAACE,
|
|
1
|
+
{"version":3,"sources":["useNewMessage.ts"],"names":["useNewMessage","lockChannelOrder","setChannels","client","handleEvent","event","channels","cid","channel_type","channel_id","targetChannelIndex","findIndex","c","channel","initialized","on","off"],"mappings":";;;;;;;;;AAAA;;AAIA;;AAGA;;AAQO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,OAKS;AAAA,MAFpCC,gBAEoC,QAFpCA,gBAEoC;AAAA,MADpCC,WACoC,QADpCA,WACoC;;AACpC,wBAAmB,kCAAnB;AAAA,MAAQC,MAAR,mBAAQA,MAAR;;AAEA,wBAAU,YAAM;AACd,QAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAsC;AACxDH,MAAAA,WAAW,CAAC,UAACI,QAAD,EAAc;AACxB,YAAI,CAACL,gBAAD,IAAqBI,KAAK,CAACE,GAA3B,IAAkCF,KAAK,CAACG,YAAxC,IAAwDH,KAAK,CAACI,UAAlE,EAA8E;AAC5E,cAAMC,kBAAkB,GAAGJ,QAAQ,CAACK,SAAT,CAAmB,UAACC,CAAD;AAAA,mBAAOA,CAAC,CAACL,GAAF,KAAUF,KAAK,CAACE,GAAvB;AAAA,WAAnB,CAA3B;;AAEA,cAAIG,kBAAkB,IAAI,CAA1B,EAA6B;AAC3B,mBAAO,0BAAkC;AACvCJ,cAAAA,QAAQ,EAARA,QADuC;AAEvCC,cAAAA,GAAG,EAAEF,KAAK,CAACE;AAF4B,aAAlC,CAAP;AAID;;AAKD,cAAMM,OAAO,GAAGV,MAAM,CAACU,OAAP,CAAeR,KAAK,CAACG,YAArB,EAAmCH,KAAK,CAACI,UAAzC,CAAhB;;AAEA,cAAII,OAAO,CAACC,WAAZ,EAAyB;AACvB,oBAAQD,OAAR,6CAAoBP,QAApB;AACD;AACF;;AAED,mDAAWA,QAAX;AACD,OAtBU,CAAX;AAuBD,KAxBD;;AA0BAH,IAAAA,MAAM,CAACY,EAAP,CAAU,aAAV,EAAyBX,WAAzB;AACA,WAAO;AAAA,aAAMD,MAAM,CAACa,GAAP,CAAW,aAAX,EAA0BZ,WAA1B,CAAN;AAAA,KAAP;AACD,GA7BD,EA6BG,EA7BH;AA8BD,CAtCM","sourcesContent":["import { useEffect } from 'react';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport { useChatContext } from '../../../../contexts/chatContext/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\nimport { moveChannelUp } from '../../utils';\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n lockChannelOrder: boolean;\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>;\n };\n\nexport const useNewMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n lockChannelOrder,\n setChannels,\n}: Parameters<StreamChatGenerics>) => {\n const { client } = useChatContext<StreamChatGenerics>();\n\n useEffect(() => {\n const handleEvent = (event: Event<StreamChatGenerics>) => {\n setChannels((channels) => {\n if (!lockChannelOrder && event.cid && event.channel_type && event.channel_id) {\n const targetChannelIndex = channels.findIndex((c) => c.cid === event.cid);\n\n if (targetChannelIndex >= 0) {\n return moveChannelUp<StreamChatGenerics>({\n channels,\n cid: event.cid,\n });\n }\n\n // If channel doesn't exist in existing list, check in activeChannels as well.\n // It may happen that channel was hidden using channel.hide(). In that case\n // We remove it from `channels` state, but its still being watched and exists in client.activeChannels.\n const channel = client.channel(event.channel_type, event.channel_id);\n\n if (channel.initialized) {\n return [channel, ...channels];\n }\n }\n\n return [...channels];\n });\n };\n\n client.on('message.new', handleEvent);\n return () => client.off('message.new', handleEvent);\n }, []);\n};\n"]}
|
|
@@ -95,9 +95,11 @@ var MessageTextContainerWithContext = function MessageTextContainerWithContext(p
|
|
|
95
95
|
var areEqual = function areEqual(prevProps, nextProps) {
|
|
96
96
|
var _prevMessage$mentione, _nextMessage$mentione, _nextMessage$mentione2, _prevMessage$mentione2, _nextMessage$mentione3;
|
|
97
97
|
|
|
98
|
-
var
|
|
98
|
+
var prevMarkdownStyles = prevProps.markdownStyles,
|
|
99
|
+
prevMessage = prevProps.message,
|
|
99
100
|
prevOnlyEmojis = prevProps.onlyEmojis;
|
|
100
|
-
var
|
|
101
|
+
var nextMarkdownStyles = nextProps.markdownStyles,
|
|
102
|
+
nextMessage = nextProps.message,
|
|
101
103
|
nextOnlyEmojis = nextProps.onlyEmojis;
|
|
102
104
|
var messageTextEqual = prevMessage.text === nextMessage.text;
|
|
103
105
|
if (!messageTextEqual) return false;
|
|
@@ -105,6 +107,8 @@ var areEqual = function areEqual(prevProps, nextProps) {
|
|
|
105
107
|
if (!onlyEmojisEqual) return false;
|
|
106
108
|
var mentionedUsersEqual = ((_prevMessage$mentione = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione.length) === ((_nextMessage$mentione = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione.length) && (((_nextMessage$mentione2 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione2.length) === 0 || ((_prevMessage$mentione2 = prevMessage.mentioned_users) == null ? void 0 : _prevMessage$mentione2.length) && ((_nextMessage$mentione3 = nextMessage.mentioned_users) == null ? void 0 : _nextMessage$mentione3.length) && prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name);
|
|
107
109
|
if (!mentionedUsersEqual) return false;
|
|
110
|
+
var markdownStylesEqual = prevMarkdownStyles === nextMarkdownStyles || Object.keys(prevMarkdownStyles || {}).length === 0 && Object.keys(nextMarkdownStyles || {}).length === 0 || JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);
|
|
111
|
+
if (!markdownStylesEqual) return false;
|
|
108
112
|
return true;
|
|
109
113
|
};
|
|
110
114
|
|
|
@@ -136,7 +140,7 @@ var MessageTextContainer = function MessageTextContainer(props) {
|
|
|
136
140
|
__self: _this,
|
|
137
141
|
__source: {
|
|
138
142
|
fileName: _jsxFileName,
|
|
139
|
-
lineNumber:
|
|
143
|
+
lineNumber: 180,
|
|
140
144
|
columnNumber: 5
|
|
141
145
|
}
|
|
142
146
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMessage","prevOnlyEmojis","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const { message: prevMessage, onlyEmojis: prevOnlyEmojis } = prevProps;\n const { message: nextMessage, onlyEmojis: nextOnlyEmojis } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
1
|
+
{"version":3,"sources":["MessageTextContainer.tsx"],"names":["styles","StyleSheet","create","textContainer","maxWidth","paddingHorizontal","MessageTextContainerWithContext","props","theme","markdownRules","markdownStyles","markdownStylesProp","message","messageOverlay","MessageText","messageTextNumberOfLines","onLongPress","onlyEmojis","onPress","preventPress","stylesProp","colors","messageSimple","content","markdown","onlyEmojiMarkdown","translatedMessage","text","renderText","areEqual","prevProps","nextProps","prevMarkdownStyles","prevMessage","prevOnlyEmojis","nextMarkdownStyles","nextMessage","nextOnlyEmojis","messageTextEqual","onlyEmojisEqual","mentionedUsersEqual","mentioned_users","length","name","markdownStylesEqual","Object","keys","JSON","stringify","MemoizedMessageTextContainer","React","memo","MessageTextContainer","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport { renderText, RenderTextParams } from './utils/renderText';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\n\nimport type { MarkdownStyle, Theme } from '../../../contexts/themeContext/utils/theme';\nimport { useTranslatedMessage } from '../../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\nconst styles = StyleSheet.create({\n textContainer: { maxWidth: 250, paddingHorizontal: 16 },\n});\n\nexport type MessageTextProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTextContainerProps<StreamChatGenerics> & {\n renderText: (params: RenderTextParams<StreamChatGenerics>) => JSX.Element | null;\n theme: { theme: Theme };\n};\n\nexport type MessageTextContainerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageContextValue<StreamChatGenerics>,\n 'message' | 'onLongPress' | 'onlyEmojis' | 'onPress' | 'preventPress'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'markdownRules' | 'MessageText'> & {\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n styles?: Partial<{\n textContainer: StyleProp<ViewStyle>;\n }>;\n };\n\nconst MessageTextContainerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const theme = useTheme();\n\n const {\n markdownRules,\n markdownStyles: markdownStylesProp = {},\n message,\n messageOverlay,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n styles: stylesProp = {},\n } = props;\n\n const {\n theme: {\n colors,\n messageSimple: {\n content: {\n markdown,\n textContainer: { onlyEmojiMarkdown, ...textContainer },\n },\n },\n },\n } = theme;\n\n const translatedMessage = useTranslatedMessage<StreamChatGenerics>(\n message,\n ) as MessageType<StreamChatGenerics>;\n\n if (!message.text) return null;\n\n const markdownStyles = { ...markdown, ...markdownStylesProp };\n\n return (\n <View\n style={[styles.textContainer, textContainer, stylesProp.textContainer]}\n testID='message-text-container'\n >\n {MessageText ? (\n <MessageText {...props} renderText={renderText} theme={theme} />\n ) : (\n renderText<StreamChatGenerics>({\n colors,\n markdownRules,\n markdownStyles: {\n ...markdownStyles,\n ...(onlyEmojis ? onlyEmojiMarkdown : {}),\n },\n message: translatedMessage,\n messageOverlay,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n })\n )}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n markdownStyles: prevMarkdownStyles,\n message: prevMessage,\n onlyEmojis: prevOnlyEmojis,\n } = prevProps;\n const {\n markdownStyles: nextMarkdownStyles,\n message: nextMessage,\n onlyEmojis: nextOnlyEmojis,\n } = nextProps;\n\n const messageTextEqual = prevMessage.text === nextMessage.text;\n if (!messageTextEqual) return false;\n\n const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;\n if (!onlyEmojisEqual) return false;\n\n const mentionedUsersEqual =\n prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length &&\n (nextMessage.mentioned_users?.length === 0 ||\n (prevMessage.mentioned_users?.length &&\n nextMessage.mentioned_users?.length &&\n prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));\n if (!mentionedUsersEqual) return false;\n\n // stringify could be an expensive operation, so lets rule out the obvious\n // possibilities first such as different object reference or empty objects etc.\n // Also keeping markdown equality check at the last to make sure other less\n // expensive equality checks get executed first and markdown check will be skipped if returned\n // false from previous checks.\n const markdownStylesEqual =\n prevMarkdownStyles === nextMarkdownStyles ||\n (Object.keys(prevMarkdownStyles || {}).length === 0 &&\n Object.keys(nextMarkdownStyles || {}).length === 0) ||\n JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);\n if (!markdownStylesEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageTextContainer = React.memo(\n MessageTextContainerWithContext,\n areEqual,\n) as typeof MessageTextContainerWithContext;\n\nexport type MessageTextContainerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageTextContainerPropsWithContext<StreamChatGenerics>>;\n\nexport const MessageTextContainer = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageTextContainerProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onlyEmojis, onPress, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { markdownRules, MessageText } = useMessagesContext<StreamChatGenerics>();\n const { messageTextNumberOfLines } = props;\n\n return (\n <MemoizedMessageTextContainer\n {...{\n markdownRules,\n message,\n MessageText,\n messageTextNumberOfLines,\n onLongPress,\n onlyEmojis,\n onPress,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nMessageTextContainer.displayName = 'MessageTextContainer{messageSimple{content}}';\n"]}
|
|
@@ -7,6 +7,8 @@ var _default = function _default(client, newMessage) {
|
|
|
7
7
|
var channel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
8
8
|
client.dispatchEvent({
|
|
9
9
|
channel: channel,
|
|
10
|
+
channel_id: channel.id,
|
|
11
|
+
channel_type: channel.type,
|
|
10
12
|
cid: channel.cid,
|
|
11
13
|
message: newMessage,
|
|
12
14
|
type: 'message.new'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["messageNew.js"],"names":["client","newMessage","channel","dispatchEvent","
|
|
1
|
+
{"version":3,"sources":["messageNew.js"],"names":["client","newMessage","channel","dispatchEvent","channel_id","id","channel_type","type","cid","message"],"mappings":";;;;;eAAe,kBAACA,MAAD,EAASC,UAAT,EAAsC;AAAA,MAAjBC,OAAiB,uEAAP,EAAO;AACnDF,EAAAA,MAAM,CAACG,aAAP,CAAqB;AACnBD,IAAAA,OAAO,EAAPA,OADmB;AAEnBE,IAAAA,UAAU,EAAEF,OAAO,CAACG,EAFD;AAGnBC,IAAAA,YAAY,EAAEJ,OAAO,CAACK,IAHH;AAInBC,IAAAA,GAAG,EAAEN,OAAO,CAACM,GAJM;AAKnBC,IAAAA,OAAO,EAAER,UALU;AAMnBM,IAAAA,IAAI,EAAE;AANa,GAArB;AAQD,C","sourcesContent":["export default (client, newMessage, channel = {}) => {\n client.dispatchEvent({\n channel,\n channel_id: channel.id,\n channel_type: channel.type,\n cid: channel.cid,\n message: newMessage,\n type: 'message.new',\n });\n};\n"]}
|
package/lib/module/version.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stream-chat-react-native-core",
|
|
3
3
|
"description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
|
|
4
|
-
"version": "4.13.
|
|
4
|
+
"version": "4.13.1-beta.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -246,6 +246,34 @@ describe('ChannelList', () => {
|
|
|
246
246
|
});
|
|
247
247
|
});
|
|
248
248
|
|
|
249
|
+
it('should add channel to top if channel is hidden from the list', async () => {
|
|
250
|
+
const { getAllByRole, getByTestId, getByText } = render(
|
|
251
|
+
<Chat client={chatClient}>
|
|
252
|
+
<ChannelList {...props} />
|
|
253
|
+
</Chat>,
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
await waitFor(() => expect(getByTestId('channel-list')).toBeTruthy());
|
|
257
|
+
act(() => dispatchChannelHiddenEvent(chatClient, testChannel3.channel));
|
|
258
|
+
|
|
259
|
+
const newItems = getAllByRole('list-item');
|
|
260
|
+
await waitFor(() => {
|
|
261
|
+
expect(newItems).toHaveLength(2);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
const newMessage = sendNewMessageOnChannel3();
|
|
265
|
+
|
|
266
|
+
await waitFor(() => {
|
|
267
|
+
expect(getByText(newMessage.text)).toBeTruthy();
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
const items = getAllByRole('list-item');
|
|
271
|
+
|
|
272
|
+
await waitFor(() => {
|
|
273
|
+
expect(within(items[0]).getByText(newMessage.text)).toBeTruthy();
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
|
|
249
277
|
it('should not alter order if `lockChannelOrder` prop is true', async () => {
|
|
250
278
|
const { getAllByRole, getByTestId, getByText } = render(
|
|
251
279
|
<Chat client={chatClient}>
|
|
@@ -24,12 +24,26 @@ export const useNewMessage = <
|
|
|
24
24
|
useEffect(() => {
|
|
25
25
|
const handleEvent = (event: Event<StreamChatGenerics>) => {
|
|
26
26
|
setChannels((channels) => {
|
|
27
|
-
if (!lockChannelOrder && event.cid) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
if (!lockChannelOrder && event.cid && event.channel_type && event.channel_id) {
|
|
28
|
+
const targetChannelIndex = channels.findIndex((c) => c.cid === event.cid);
|
|
29
|
+
|
|
30
|
+
if (targetChannelIndex >= 0) {
|
|
31
|
+
return moveChannelUp<StreamChatGenerics>({
|
|
32
|
+
channels,
|
|
33
|
+
cid: event.cid,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// If channel doesn't exist in existing list, check in activeChannels as well.
|
|
38
|
+
// It may happen that channel was hidden using channel.hide(). In that case
|
|
39
|
+
// We remove it from `channels` state, but its still being watched and exists in client.activeChannels.
|
|
40
|
+
const channel = client.channel(event.channel_type, event.channel_id);
|
|
41
|
+
|
|
42
|
+
if (channel.initialized) {
|
|
43
|
+
return [channel, ...channels];
|
|
44
|
+
}
|
|
32
45
|
}
|
|
46
|
+
|
|
33
47
|
return [...channels];
|
|
34
48
|
});
|
|
35
49
|
};
|
|
@@ -117,8 +117,16 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
|
|
|
117
117
|
prevProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,
|
|
118
118
|
nextProps: MessageTextContainerPropsWithContext<StreamChatGenerics>,
|
|
119
119
|
) => {
|
|
120
|
-
const {
|
|
121
|
-
|
|
120
|
+
const {
|
|
121
|
+
markdownStyles: prevMarkdownStyles,
|
|
122
|
+
message: prevMessage,
|
|
123
|
+
onlyEmojis: prevOnlyEmojis,
|
|
124
|
+
} = prevProps;
|
|
125
|
+
const {
|
|
126
|
+
markdownStyles: nextMarkdownStyles,
|
|
127
|
+
message: nextMessage,
|
|
128
|
+
onlyEmojis: nextOnlyEmojis,
|
|
129
|
+
} = nextProps;
|
|
122
130
|
|
|
123
131
|
const messageTextEqual = prevMessage.text === nextMessage.text;
|
|
124
132
|
if (!messageTextEqual) return false;
|
|
@@ -134,6 +142,18 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
|
|
|
134
142
|
prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name));
|
|
135
143
|
if (!mentionedUsersEqual) return false;
|
|
136
144
|
|
|
145
|
+
// stringify could be an expensive operation, so lets rule out the obvious
|
|
146
|
+
// possibilities first such as different object reference or empty objects etc.
|
|
147
|
+
// Also keeping markdown equality check at the last to make sure other less
|
|
148
|
+
// expensive equality checks get executed first and markdown check will be skipped if returned
|
|
149
|
+
// false from previous checks.
|
|
150
|
+
const markdownStylesEqual =
|
|
151
|
+
prevMarkdownStyles === nextMarkdownStyles ||
|
|
152
|
+
(Object.keys(prevMarkdownStyles || {}).length === 0 &&
|
|
153
|
+
Object.keys(nextMarkdownStyles || {}).length === 0) ||
|
|
154
|
+
JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles);
|
|
155
|
+
if (!markdownStylesEqual) return false;
|
|
156
|
+
|
|
137
157
|
return true;
|
|
138
158
|
};
|
|
139
159
|
|
package/src/version.json
CHANGED