stream-chat-react-native-core 5.12.0-beta.3 → 5.12.0

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.
Files changed (29) hide show
  1. package/lib/commonjs/components/Channel/Channel.js +40 -24
  2. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  3. package/lib/commonjs/components/Channel/hooks/useTargetedMessage.js +3 -3
  4. package/lib/commonjs/components/Channel/hooks/useTargetedMessage.js.map +1 -1
  5. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js +9 -2
  6. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
  7. package/lib/commonjs/components/MessageList/MessageList.js +84 -77
  8. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  9. package/lib/commonjs/components/MessageList/utils/getReadStates.js +9 -4
  10. package/lib/commonjs/components/MessageList/utils/getReadStates.js.map +1 -1
  11. package/lib/commonjs/version.json +1 -1
  12. package/lib/module/components/Channel/Channel.js +40 -24
  13. package/lib/module/components/Channel/Channel.js.map +1 -1
  14. package/lib/module/components/Channel/hooks/useTargetedMessage.js +3 -3
  15. package/lib/module/components/Channel/hooks/useTargetedMessage.js.map +1 -1
  16. package/lib/module/components/ChannelPreview/ChannelPreview.js +9 -2
  17. package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
  18. package/lib/module/components/MessageList/MessageList.js +84 -77
  19. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  20. package/lib/module/components/MessageList/utils/getReadStates.js +9 -4
  21. package/lib/module/components/MessageList/utils/getReadStates.js.map +1 -1
  22. package/lib/module/version.json +1 -1
  23. package/package.json +1 -1
  24. package/src/components/Channel/Channel.tsx +35 -15
  25. package/src/components/Channel/hooks/useTargetedMessage.ts +3 -3
  26. package/src/components/ChannelPreview/ChannelPreview.tsx +7 -0
  27. package/src/components/MessageList/MessageList.tsx +57 -56
  28. package/src/components/MessageList/utils/getReadStates.ts +3 -4
  29. package/src/version.json +1 -1
@@ -19,15 +19,15 @@ var useTargetedMessage = function useTargetedMessage(messageId) {
19
19
  clearTargetedMessageCall.current && clearTimeout(clearTargetedMessageCall.current);
20
20
  };
21
21
  }, []);
22
- var setTargetedMessageTimeout = function setTargetedMessageTimeout(messageId) {
22
+ var setTargetedMessageTimeoutRef = (0, _react.useRef)(function (messageId) {
23
23
  clearTargetedMessageCall.current && clearTimeout(clearTargetedMessageCall.current);
24
24
  clearTargetedMessageCall.current = setTimeout(function () {
25
25
  setTargetedMessage(undefined);
26
26
  }, 3000);
27
27
  setTargetedMessage(messageId);
28
- };
28
+ });
29
29
  return {
30
- setTargetedMessage: setTargetedMessageTimeout,
30
+ setTargetedMessage: setTargetedMessageTimeoutRef.current,
31
31
  targetedMessage: targetedMessage
32
32
  };
33
33
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","useTargetedMessage","messageId","clearTargetedMessageCall","useRef","_useState","useState","_useState2","_slicedToArray2","targetedMessage","setTargetedMessage","useEffect","current","setTimeout","undefined","clearTimeout","setTargetedMessageTimeout","exports"],"sources":["useTargetedMessage.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport const useTargetedMessage = (messageId?: string) => {\n const clearTargetedMessageCall = useRef<ReturnType<typeof setTimeout>>();\n const [targetedMessage, setTargetedMessage] = useState(messageId);\n\n useEffect(() => {\n clearTargetedMessageCall.current = setTimeout(() => {\n setTargetedMessage(undefined);\n }, 3000);\n\n return () => {\n clearTargetedMessageCall.current && clearTimeout(clearTargetedMessageCall.current);\n };\n }, []);\n\n const setTargetedMessageTimeout = (messageId: string) => {\n clearTargetedMessageCall.current && clearTimeout(clearTargetedMessageCall.current);\n\n clearTargetedMessageCall.current = setTimeout(() => {\n setTargetedMessage(undefined);\n }, 3000);\n\n setTargetedMessage(messageId);\n };\n\n return {\n setTargetedMessage: setTargetedMessageTimeout,\n targetedMessage,\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,SAAkB,EAAK;EACxD,IAAMC,wBAAwB,GAAG,IAAAC,aAAM,GAAiC;EACxE,IAAAC,SAAA,GAA8C,IAAAC,eAAQ,EAACJ,SAAS,CAAC;IAAAK,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAA1DI,eAAe,GAAAF,UAAA;IAAEG,kBAAkB,GAAAH,UAAA;EAE1C,IAAAI,gBAAS,EAAC,YAAM;IACdR,wBAAwB,CAACS,OAAO,GAAGC,UAAU,CAAC,YAAM;MAClDH,kBAAkB,CAACI,SAAS,CAAC;IAC/B,CAAC,EAAE,IAAI,CAAC;IAER,OAAO,YAAM;MACXX,wBAAwB,CAACS,OAAO,IAAIG,YAAY,CAACZ,wBAAwB,CAACS,OAAO,CAAC;IACpF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMI,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAId,SAAiB,EAAK;IACvDC,wBAAwB,CAACS,OAAO,IAAIG,YAAY,CAACZ,wBAAwB,CAACS,OAAO,CAAC;IAElFT,wBAAwB,CAACS,OAAO,GAAGC,UAAU,CAAC,YAAM;MAClDH,kBAAkB,CAACI,SAAS,CAAC;IAC/B,CAAC,EAAE,IAAI,CAAC;IAERJ,kBAAkB,CAACR,SAAS,CAAC;EAC/B,CAAC;EAED,OAAO;IACLQ,kBAAkB,EAAEM,yBAAyB;IAC7CP,eAAe,EAAfA;EACF,CAAC;AACH,CAAC;AAACQ,OAAA,CAAAhB,kBAAA,GAAAA,kBAAA"}
1
+ {"version":3,"names":["_react","require","useTargetedMessage","messageId","clearTargetedMessageCall","useRef","_useState","useState","_useState2","_slicedToArray2","targetedMessage","setTargetedMessage","useEffect","current","setTimeout","undefined","clearTimeout","setTargetedMessageTimeoutRef","exports"],"sources":["useTargetedMessage.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport const useTargetedMessage = (messageId?: string) => {\n const clearTargetedMessageCall = useRef<ReturnType<typeof setTimeout>>();\n const [targetedMessage, setTargetedMessage] = useState(messageId);\n\n useEffect(() => {\n clearTargetedMessageCall.current = setTimeout(() => {\n setTargetedMessage(undefined);\n }, 3000);\n\n return () => {\n clearTargetedMessageCall.current && clearTimeout(clearTargetedMessageCall.current);\n };\n }, []);\n\n const setTargetedMessageTimeoutRef = useRef((messageId: string) => {\n clearTargetedMessageCall.current && clearTimeout(clearTargetedMessageCall.current);\n\n clearTargetedMessageCall.current = setTimeout(() => {\n setTargetedMessage(undefined);\n }, 3000);\n\n setTargetedMessage(messageId);\n });\n\n return {\n setTargetedMessage: setTargetedMessageTimeoutRef.current,\n targetedMessage,\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,SAAkB,EAAK;EACxD,IAAMC,wBAAwB,GAAG,IAAAC,aAAM,GAAiC;EACxE,IAAAC,SAAA,GAA8C,IAAAC,eAAQ,EAACJ,SAAS,CAAC;IAAAK,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAA1DI,eAAe,GAAAF,UAAA;IAAEG,kBAAkB,GAAAH,UAAA;EAE1C,IAAAI,gBAAS,EAAC,YAAM;IACdR,wBAAwB,CAACS,OAAO,GAAGC,UAAU,CAAC,YAAM;MAClDH,kBAAkB,CAACI,SAAS,CAAC;IAC/B,CAAC,EAAE,IAAI,CAAC;IAER,OAAO,YAAM;MACXX,wBAAwB,CAACS,OAAO,IAAIG,YAAY,CAACZ,wBAAwB,CAACS,OAAO,CAAC;IACpF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMI,4BAA4B,GAAG,IAAAZ,aAAM,EAAC,UAACF,SAAiB,EAAK;IACjEC,wBAAwB,CAACS,OAAO,IAAIG,YAAY,CAACZ,wBAAwB,CAACS,OAAO,CAAC;IAElFT,wBAAwB,CAACS,OAAO,GAAGC,UAAU,CAAC,YAAM;MAClDH,kBAAkB,CAACI,SAAS,CAAC;IAC/B,CAAC,EAAE,IAAI,CAAC;IAERJ,kBAAkB,CAACR,SAAS,CAAC;EAC/B,CAAC,CAAC;EAEF,OAAO;IACLQ,kBAAkB,EAAEM,4BAA4B,CAACJ,OAAO;IACxDH,eAAe,EAAfA;EACF,CAAC;AACH,CAAC;AAACQ,OAAA,CAAAhB,kBAAA,GAAAA,kBAAA"}
@@ -35,6 +35,13 @@ var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
35
35
  var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, translatedLastMessage);
36
36
  var channelLastMessage = channel.lastMessage();
37
37
  var channelLastMessageString = "" + (channelLastMessage == null ? void 0 : channelLastMessage.id) + (channelLastMessage == null ? void 0 : channelLastMessage.updated_at);
38
+ (0, _react.useEffect)(function () {
39
+ var _client$on = client.on('notification.mark_read', function () {
40
+ setUnread(channel.countUnread());
41
+ }),
42
+ unsubscribe = _client$on.unsubscribe;
43
+ return unsubscribe;
44
+ }, []);
38
45
  (0, _react.useEffect)(function () {
39
46
  if (channelLastMessage && (channelLastMessage.id !== (lastMessage == null ? void 0 : lastMessage.id) || channelLastMessage.updated_at !== (lastMessage == null ? void 0 : lastMessage.updated_at))) {
40
47
  setLastMessage(channelLastMessage);
@@ -89,7 +96,7 @@ var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
89
96
  __self: _this,
90
97
  __source: {
91
98
  fileName: _jsxFileName,
92
- lineNumber: 108,
99
+ lineNumber: 115,
93
100
  columnNumber: 10
94
101
  }
95
102
  });
@@ -106,7 +113,7 @@ var ChannelPreview = function ChannelPreview(props) {
106
113
  __self: _this,
107
114
  __source: {
108
115
  fileName: _jsxFileName,
109
- lineNumber: 124,
116
+ lineNumber: 131,
110
117
  columnNumber: 10
111
118
  }
112
119
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_useLatestMessagePreview","_ChannelsContext","_ChatContext","_useTranslatedMessage","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChannelPreviewWithContext","props","channel","client","Preview","_useState","useState","state","messages","length","_useState2","_slicedToArray2","lastMessage","setLastMessage","translatedLastMessage","useTranslatedMessage","_useState3","_useState4","forceUpdate","setForceUpdate","_useState5","countUnread","_useState6","unread","setUnread","latestMessagePreview","useLatestMessagePreview","channelLastMessage","channelLastMessageString","id","updated_at","useEffect","newUnreadCount","handleNewMessageEvent","event","message","parent_id","show_in_channel","handleUpdatedOrDeletedMessage","prevLastMessage","_event$message","listeners","on","forEach","l","unsubscribe","handleReadEvent","_event$user","_event$user2","user","userID","prev","listener","createElement","__self","__source","fileName","lineNumber","columnNumber","ChannelPreview","_useChatContext","useChatContext","_useChannelsContext","useChannelsContext","_extends2","exports"],"sources":["ChannelPreview.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, Event, MessageResponse } from 'stream-chat';\n\nimport { useLatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\n\nimport { useTranslatedMessage } from '../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<ChannelsContextValue<StreamChatGenerics>, 'Preview'> & {\n /**\n * The previewed channel\n */\n channel: Channel<StreamChatGenerics>;\n };\n\n/**\n * This component manages state for the ChannelPreviewMessenger UI component and receives\n * all props from the ChannelListMessenger component.\n */\nconst ChannelPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { channel, client, Preview } = props;\n\n const [lastMessage, setLastMessage] = useState<\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>\n | undefined\n >(channel.state.messages[channel.state.messages.length - 1]);\n\n const translatedLastMessage = useTranslatedMessage<StreamChatGenerics>(\n lastMessage || ({} as MessageResponse<StreamChatGenerics>),\n );\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const [unread, setUnread] = useState(channel.countUnread());\n\n const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, translatedLastMessage);\n\n const channelLastMessage = channel.lastMessage();\n const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;\n\n useEffect(() => {\n if (\n channelLastMessage &&\n (channelLastMessage.id !== lastMessage?.id ||\n channelLastMessage.updated_at !== lastMessage?.updated_at)\n ) {\n setLastMessage(channelLastMessage);\n }\n\n const newUnreadCount = channel.countUnread();\n setUnread(newUnreadCount);\n }, [channelLastMessageString]);\n\n useEffect(() => {\n const handleNewMessageEvent = (event: Event<StreamChatGenerics>) => {\n const message = event.message;\n if (message && (!message.parent_id || message.show_in_channel)) {\n setLastMessage(event.message);\n setUnread(channel.countUnread());\n }\n };\n\n const handleUpdatedOrDeletedMessage = (event: Event<StreamChatGenerics>) => {\n setLastMessage((prevLastMessage) => {\n if (prevLastMessage?.id === event.message?.id) {\n return event.message;\n }\n return prevLastMessage;\n });\n };\n\n const listeners = [\n channel.on('message.new', handleNewMessageEvent),\n channel.on('message.updated', handleUpdatedOrDeletedMessage),\n channel.on('message.deleted', handleUpdatedOrDeletedMessage),\n ];\n\n return () => listeners.forEach((l) => l.unsubscribe());\n }, []);\n\n useEffect(() => {\n const handleReadEvent = (event: Event<StreamChatGenerics>) => {\n if (event.user?.id === client.userID) {\n setUnread(0);\n } else if (event.user?.id) {\n setForceUpdate((prev) => prev + 1);\n }\n };\n\n const listener = channel.on('message.read', handleReadEvent);\n return () => listener.unsubscribe();\n }, []);\n\n return <Preview channel={channel} latestMessagePreview={latestMessagePreview} unread={unread} />;\n};\n\nexport type ChannelPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>> &\n Pick<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { Preview } = useChannelsContext<StreamChatGenerics>();\n\n return <ChannelPreviewWithContext {...{ client, Preview }} {...props} />;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_useLatestMessagePreview","_ChannelsContext","_ChatContext","_useTranslatedMessage","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChannelPreviewWithContext","props","channel","client","Preview","_useState","useState","state","messages","length","_useState2","_slicedToArray2","lastMessage","setLastMessage","translatedLastMessage","useTranslatedMessage","_useState3","_useState4","forceUpdate","setForceUpdate","_useState5","countUnread","_useState6","unread","setUnread","latestMessagePreview","useLatestMessagePreview","channelLastMessage","channelLastMessageString","id","updated_at","useEffect","_client$on","on","unsubscribe","newUnreadCount","handleNewMessageEvent","event","message","parent_id","show_in_channel","handleUpdatedOrDeletedMessage","prevLastMessage","_event$message","listeners","forEach","l","handleReadEvent","_event$user","_event$user2","user","userID","prev","listener","createElement","__self","__source","fileName","lineNumber","columnNumber","ChannelPreview","_useChatContext","useChatContext","_useChannelsContext","useChannelsContext","_extends2","exports"],"sources":["ChannelPreview.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, Event, MessageResponse } from 'stream-chat';\n\nimport { useLatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\n\nimport { useTranslatedMessage } from '../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<ChannelsContextValue<StreamChatGenerics>, 'Preview'> & {\n /**\n * The previewed channel\n */\n channel: Channel<StreamChatGenerics>;\n };\n\n/**\n * This component manages state for the ChannelPreviewMessenger UI component and receives\n * all props from the ChannelListMessenger component.\n */\nconst ChannelPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { channel, client, Preview } = props;\n\n const [lastMessage, setLastMessage] = useState<\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>\n | undefined\n >(channel.state.messages[channel.state.messages.length - 1]);\n\n const translatedLastMessage = useTranslatedMessage<StreamChatGenerics>(\n lastMessage || ({} as MessageResponse<StreamChatGenerics>),\n );\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const [unread, setUnread] = useState(channel.countUnread());\n\n const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, translatedLastMessage);\n\n const channelLastMessage = channel.lastMessage();\n const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;\n\n useEffect(() => {\n const { unsubscribe } = client.on('notification.mark_read', () => {\n setUnread(channel.countUnread());\n });\n return unsubscribe;\n }, []);\n\n useEffect(() => {\n if (\n channelLastMessage &&\n (channelLastMessage.id !== lastMessage?.id ||\n channelLastMessage.updated_at !== lastMessage?.updated_at)\n ) {\n setLastMessage(channelLastMessage);\n }\n\n const newUnreadCount = channel.countUnread();\n setUnread(newUnreadCount);\n }, [channelLastMessageString]);\n\n useEffect(() => {\n const handleNewMessageEvent = (event: Event<StreamChatGenerics>) => {\n const message = event.message;\n if (message && (!message.parent_id || message.show_in_channel)) {\n setLastMessage(event.message);\n setUnread(channel.countUnread());\n }\n };\n\n const handleUpdatedOrDeletedMessage = (event: Event<StreamChatGenerics>) => {\n setLastMessage((prevLastMessage) => {\n if (prevLastMessage?.id === event.message?.id) {\n return event.message;\n }\n return prevLastMessage;\n });\n };\n\n const listeners = [\n channel.on('message.new', handleNewMessageEvent),\n channel.on('message.updated', handleUpdatedOrDeletedMessage),\n channel.on('message.deleted', handleUpdatedOrDeletedMessage),\n ];\n\n return () => listeners.forEach((l) => l.unsubscribe());\n }, []);\n\n useEffect(() => {\n const handleReadEvent = (event: Event<StreamChatGenerics>) => {\n if (event.user?.id === client.userID) {\n setUnread(0);\n } else if (event.user?.id) {\n setForceUpdate((prev) => prev + 1);\n }\n };\n\n const listener = channel.on('message.read', handleReadEvent);\n return () => listener.unsubscribe();\n }, []);\n\n return <Preview channel={channel} latestMessagePreview={latestMessagePreview} unread={unread} />;\n};\n\nexport type ChannelPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>> &\n Pick<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { Preview } = useChannelsContext<StreamChatGenerics>();\n\n return <ChannelPreviewWithContext {...{ client, Preview }} {...props} />;\n};\n"],"mappings":"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"}
@@ -131,7 +131,6 @@ var MessageListWithContext = function MessageListWithContext(props) {
131
131
  overlay = props.overlay,
132
132
  reloadChannel = props.reloadChannel,
133
133
  ScrollToBottomButton = props.ScrollToBottomButton,
134
- scrollToFirstUnreadThreshold = props.scrollToFirstUnreadThreshold,
135
134
  selectedPicker = props.selectedPicker,
136
135
  setFlatListRef = props.setFlatListRef,
137
136
  setMessages = props.setMessages,
@@ -175,27 +174,31 @@ var MessageListWithContext = function MessageListWithContext(props) {
175
174
  var onStartReachedInPromise = (0, _react.useRef)(null);
176
175
  var onEndReachedInPromise = (0, _react.useRef)(null);
177
176
  var flatListRef = (0, _react.useRef)(null);
178
- var initialScrollSet = (0, _react.useRef)(!initialScrollToFirstUnreadMessage);
177
+ var _useState3 = (0, _react.useState)(!initialScrollToFirstUnreadMessage),
178
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
179
+ isInitialScrollDone = _useState4[0],
180
+ setInitialScrollDone = _useState4[1];
179
181
  var channelResyncScrollSet = (0, _react.useRef)(true);
180
182
  var scrollToDebounceTimeoutRef = (0, _react.useRef)();
183
+ var initialScrollSettingTimeoutRef = (0, _react.useRef)();
181
184
  var messageIdToScrollToRef = (0, _react.useRef)();
182
185
  var messageIdLastScrolledToRef = (0, _react.useRef)();
183
- var _useState3 = (0, _react.useState)(false),
184
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
185
- hasMoved = _useState4[0],
186
- setHasMoved = _useState4[1];
187
- var _useState5 = (0, _react.useState)((_getLastReceivedMessa = (0, _getLastReceivedMessage.getLastReceivedMessage)(messageList)) == null ? void 0 : _getLastReceivedMessa.id),
186
+ var _useState5 = (0, _react.useState)(false),
188
187
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
189
- lastReceivedId = _useState6[0],
190
- setLastReceivedId = _useState6[1];
191
- var _useState7 = (0, _react.useState)(false),
188
+ hasMoved = _useState6[0],
189
+ setHasMoved = _useState6[1];
190
+ var _useState7 = (0, _react.useState)((_getLastReceivedMessa = (0, _getLastReceivedMessage.getLastReceivedMessage)(messageList)) == null ? void 0 : _getLastReceivedMessa.id),
192
191
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
193
- scrollToBottomButtonVisible = _useState8[0],
194
- setScrollToBottomButtonVisible = _useState8[1];
195
- var _useState9 = (0, _react.useState)(),
192
+ lastReceivedId = _useState8[0],
193
+ setLastReceivedId = _useState8[1];
194
+ var _useState9 = (0, _react.useState)(false),
196
195
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
197
- stickyHeaderDate = _useState10[0],
198
- setStickyHeaderDate = _useState10[1];
196
+ scrollToBottomButtonVisible = _useState10[0],
197
+ setScrollToBottomButtonVisible = _useState10[1];
198
+ var _useState11 = (0, _react.useState)(),
199
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
200
+ stickyHeaderDate = _useState12[0],
201
+ setStickyHeaderDate = _useState12[1];
199
202
  var stickyHeaderDateRef = (0, _react.useRef)();
200
203
  var channelRef = (0, _react.useRef)(channel);
201
204
  channelRef.current = channel;
@@ -227,11 +230,23 @@ var MessageListWithContext = function MessageListWithContext(props) {
227
230
  setScrollToBottomButtonVisible(false);
228
231
  }, [disabled]);
229
232
  (0, _react.useEffect)(function () {
230
- var shouldMarkReadOnFirstLoad = !loading && channel && (!initialScrollToFirstUnreadMessage && channel.countUnread() > 0 || initialScrollToFirstUnreadMessage && channel.countUnread() <= scrollToFirstUnreadThreshold);
231
- if (shouldMarkReadOnFirstLoad) {
233
+ var getShouldMarkReadAutomatically = function getShouldMarkReadAutomatically() {
234
+ if (loading || !channel) {
235
+ return false;
236
+ } else if (channel.countUnread() > 0) {
237
+ if (!initialScrollToFirstUnreadMessage) {
238
+ return true;
239
+ } else {
240
+ if (scrollToBottomButtonVisible) return false;
241
+ return isInitialScrollDone;
242
+ }
243
+ }
244
+ return false;
245
+ };
246
+ if (getShouldMarkReadAutomatically()) {
232
247
  markRead();
233
248
  }
234
- }, [loading]);
249
+ }, [loading, scrollToBottomButtonVisible, isInitialScrollDone]);
235
250
  (0, _react.useEffect)(function () {
236
251
  var _lastReceivedMessage$;
237
252
  var lastReceivedMessage = (0, _getLastReceivedMessage.getLastReceivedMessage)(messageList);
@@ -263,7 +278,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
263
278
  };
264
279
  if (threadList || hasNoMoreRecentMessagesToLoad) {
265
280
  scrollToBottomIfNeeded();
266
- } else if (!scrollToBottomButtonVisible) {
281
+ } else {
267
282
  setScrollToBottomButtonVisible(true);
268
283
  }
269
284
  if (!hasNoMoreRecentMessagesToLoad && flatListRef.current && messageListLengthBeforeUpdate.current === 0 && messageListLengthAfterUpdate < 10) {
@@ -282,28 +297,23 @@ var MessageListWithContext = function MessageListWithContext(props) {
282
297
  message = _ref2.item;
283
298
  if (!channel || !channel.initialized && !channel.offlineMode) return null;
284
299
  var lastRead = channel.lastRead();
285
- var countUnread = channel.countUnread();
286
300
  function isMessageUnread(messageArrayIndex) {
287
- if (lastRead && message.created_at) {
288
- return lastRead < message.created_at;
289
- } else {
290
- var isLatestMessageSetShown = !!channel.state.messageSets.find(function (set) {
291
- return set.isCurrent && set.isLatest;
292
- });
293
- return isLatestMessageSetShown && messageArrayIndex <= countUnread - 1;
301
+ var msg = messageList == null ? void 0 : messageList[messageArrayIndex];
302
+ if (lastRead && msg != null && msg.created_at) {
303
+ return lastRead < msg.created_at;
294
304
  }
305
+ return false;
295
306
  }
296
307
  var isCurrentMessageUnread = isMessageUnread(index);
297
- var isLastMessageUnread = isMessageUnread(index + 1);
298
308
  var showUnreadUnderlay = isCurrentMessageUnread && scrollToBottomButtonVisible;
299
- var insertInlineUnreadIndicator = showUnreadUnderlay && !isLastMessageUnread;
309
+ var insertInlineUnreadIndicator = showUnreadUnderlay && !isMessageUnread(index + 1);
300
310
  if (message.type === 'system') {
301
311
  return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_reactNative.View, {
302
312
  testID: "message-list-item-" + index,
303
313
  __self: _this,
304
314
  __source: {
305
315
  fileName: _jsxFileName,
306
- lineNumber: 553,
316
+ lineNumber: 560,
307
317
  columnNumber: 11
308
318
  }
309
319
  }, _react["default"].createElement(MessageSystem, {
@@ -312,14 +322,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
312
322
  __self: _this,
313
323
  __source: {
314
324
  fileName: _jsxFileName,
315
- lineNumber: 554,
325
+ lineNumber: 561,
316
326
  columnNumber: 13
317
327
  }
318
328
  })), insertInlineUnreadIndicator && _react["default"].createElement(InlineUnreadIndicator, {
319
329
  __self: _this,
320
330
  __source: {
321
331
  fileName: _jsxFileName,
322
- lineNumber: 556,
332
+ lineNumber: 563,
323
333
  columnNumber: 43
324
334
  }
325
335
  }));
@@ -330,7 +340,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
330
340
  __self: _this,
331
341
  __source: {
332
342
  fileName: _jsxFileName,
333
- lineNumber: 566,
343
+ lineNumber: 573,
334
344
  columnNumber: 36
335
345
  }
336
346
  }), _react["default"].createElement(_ThemeContext.ThemeProvider, {
@@ -338,7 +348,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
338
348
  __self: _this,
339
349
  __source: {
340
350
  fileName: _jsxFileName,
341
- lineNumber: 567,
351
+ lineNumber: 574,
342
352
  columnNumber: 9
343
353
  }
344
354
  }, _react["default"].createElement(_reactNative.View, {
@@ -346,7 +356,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
346
356
  __self: _this,
347
357
  __source: {
348
358
  fileName: _jsxFileName,
349
- lineNumber: 568,
359
+ lineNumber: 575,
350
360
  columnNumber: 11
351
361
  }
352
362
  }, _react["default"].createElement(Message, {
@@ -362,7 +372,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
362
372
  __self: _this,
363
373
  __source: {
364
374
  fileName: _jsxFileName,
365
- lineNumber: 569,
375
+ lineNumber: 576,
366
376
  columnNumber: 13
367
377
  }
368
378
  }))), !shouldApplyAndroidWorkaround && (0, _useMessageList.isMessageWithStylesReadByAndDateSeparator)(message) && message.dateSeparator && _react["default"].createElement(InlineDateSeparator, {
@@ -370,14 +380,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
370
380
  __self: _this,
371
381
  __source: {
372
382
  fileName: _jsxFileName,
373
- lineNumber: 586,
383
+ lineNumber: 593,
374
384
  columnNumber: 36
375
385
  }
376
386
  }), insertInlineUnreadIndicator && _react["default"].createElement(InlineUnreadIndicator, {
377
387
  __self: _this,
378
388
  __source: {
379
389
  fileName: _jsxFileName,
380
- lineNumber: 588,
390
+ lineNumber: 595,
381
391
  columnNumber: 41
382
392
  }
383
393
  })) : _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_reactNative.View, {
@@ -385,7 +395,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
385
395
  __self: _this,
386
396
  __source: {
387
397
  fileName: _jsxFileName,
388
- lineNumber: 592,
398
+ lineNumber: 599,
389
399
  columnNumber: 9
390
400
  }
391
401
  }, shouldApplyAndroidWorkaround && (0, _useMessageList.isMessageWithStylesReadByAndDateSeparator)(message) && message.dateSeparator && _react["default"].createElement(InlineDateSeparator, {
@@ -393,7 +403,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
393
403
  __self: _this,
394
404
  __source: {
395
405
  fileName: _jsxFileName,
396
- lineNumber: 595,
406
+ lineNumber: 602,
397
407
  columnNumber: 38
398
408
  }
399
409
  }), _react["default"].createElement(Message, {
@@ -409,7 +419,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
409
419
  __self: _this,
410
420
  __source: {
411
421
  fileName: _jsxFileName,
412
- lineNumber: 596,
422
+ lineNumber: 603,
413
423
  columnNumber: 11
414
424
  }
415
425
  })), !shouldApplyAndroidWorkaround && (0, _useMessageList.isMessageWithStylesReadByAndDateSeparator)(message) && message.dateSeparator && _react["default"].createElement(InlineDateSeparator, {
@@ -417,14 +427,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
417
427
  __self: _this,
418
428
  __source: {
419
429
  fileName: _jsxFileName,
420
- lineNumber: 616,
430
+ lineNumber: 623,
421
431
  columnNumber: 36
422
432
  }
423
433
  }), insertInlineUnreadIndicator && _react["default"].createElement(InlineUnreadIndicator, {
424
434
  __self: _this,
425
435
  __source: {
426
436
  fileName: _jsxFileName,
427
- lineNumber: 618,
437
+ lineNumber: 625,
428
438
  columnNumber: 41
429
439
  }
430
440
  }));
@@ -536,7 +546,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
536
546
  if (isScrollAtEnd) {
537
547
  maybeCallOnEndReached();
538
548
  }
539
- var isScrollAtBottom = offset <= 300;
549
+ var isScrollAtBottom = offset <= 150;
540
550
  var showScrollToBottomButton = !isScrollAtBottom || !hasNoMoreRecentMessagesToLoad;
541
551
  var shouldMarkRead = !threadList && offset <= 0 && hasNoMoreRecentMessagesToLoad && channel.countUnread() > 0;
542
552
  if (shouldMarkRead) {
@@ -623,16 +633,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
623
633
  resetPaginationTrackersRef.current();
624
634
  }, [messageList]);
625
635
  (0, _react.useEffect)(function () {
626
- if (scrollToDebounceTimeoutRef.current) clearTimeout(scrollToDebounceTimeoutRef.current);
627
636
  scrollToDebounceTimeoutRef.current = setTimeout(function () {
628
- var _channelRef$current;
637
+ if (initialScrollToFirstUnreadMessage) {
638
+ initialScrollSettingTimeoutRef.current = setTimeout(function () {
639
+ setInitialScrollDone(true);
640
+ }, 500);
641
+ }
629
642
  var messageIdToScroll = messageIdToScrollToRef.current;
630
- var countUnread = (_channelRef$current = channelRef.current) == null ? void 0 : _channelRef$current.countUnread();
631
- if (!initialScrollSet.current && initialScrollToFirstUnreadMessage && countUnread > scrollToFirstUnreadThreshold) {
632
- if (messageList.length >= countUnread) {
633
- messageIdToScroll = messageList[countUnread - 1].id;
634
- }
635
- } else if (targetedMessage && messageIdLastScrolledToRef.current !== targetedMessage) {
643
+ if (targetedMessage && messageIdLastScrolledToRef.current !== targetedMessage) {
636
644
  messageIdToScroll = targetedMessage;
637
645
  }
638
646
  if (!messageIdToScroll) return;
@@ -647,14 +655,13 @@ var MessageListWithContext = function MessageListWithContext(props) {
647
655
  });
648
656
  messageIdToScrollToRef.current = undefined;
649
657
  messageIdLastScrolledToRef.current = messageIdToScroll;
650
- if (!initialScrollSet.current && initialScrollToFirstUnreadMessage) {
651
- initialScrollSet.current = true;
652
- } else {
653
- setTargetedMessage(messageIdToScroll);
654
- }
655
658
  }
656
659
  }, 150);
657
- }, [channel.initialized, messageList, targetedMessage, initialScrollToFirstUnreadMessage]);
660
+ return function () {
661
+ clearTimeout(scrollToDebounceTimeoutRef.current);
662
+ clearTimeout(initialScrollSettingTimeoutRef.current);
663
+ };
664
+ }, [targetedMessage, initialScrollToFirstUnreadMessage, messageList]);
658
665
  var messagesWithImages = legacyImageViewerSwipeBehaviour && messageList.filter(function (message) {
659
666
  var isMessageTypeDeleted = message.type === 'deleted';
660
667
  if (!isMessageTypeDeleted && message.attachments) {
@@ -718,7 +725,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
718
725
  __self: _this,
719
726
  __source: {
720
727
  fileName: _jsxFileName,
721
- lineNumber: 970,
728
+ lineNumber: 971,
722
729
  columnNumber: 7
723
730
  }
724
731
  }, _react["default"].createElement(EmptyStateIndicator, {
@@ -726,7 +733,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
726
733
  __self: _this,
727
734
  __source: {
728
735
  fileName: _jsxFileName,
729
- lineNumber: 974,
736
+ lineNumber: 975,
730
737
  columnNumber: 9
731
738
  }
732
739
  }));
@@ -737,14 +744,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
737
744
  __self: _this,
738
745
  __source: {
739
746
  fileName: _jsxFileName,
740
- lineNumber: 982,
747
+ lineNumber: 983,
741
748
  columnNumber: 7
742
749
  }
743
750
  }, _react["default"].createElement(FooterComponent, {
744
751
  __self: _this,
745
752
  __source: {
746
753
  fileName: _jsxFileName,
747
- lineNumber: 983,
754
+ lineNumber: 984,
748
755
  columnNumber: 9
749
756
  }
750
757
  }));
@@ -755,14 +762,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
755
762
  __self: _this,
756
763
  __source: {
757
764
  fileName: _jsxFileName,
758
- lineNumber: 991,
765
+ lineNumber: 992,
759
766
  columnNumber: 7
760
767
  }
761
768
  }, _react["default"].createElement(HeaderComponent, {
762
769
  __self: _this,
763
770
  __source: {
764
771
  fileName: _jsxFileName,
765
- lineNumber: 992,
772
+ lineNumber: 993,
766
773
  columnNumber: 9
767
774
  }
768
775
  }));
@@ -774,7 +781,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
774
781
  __self: _this,
775
782
  __source: {
776
783
  fileName: _jsxFileName,
777
- lineNumber: 1002,
784
+ lineNumber: 1003,
778
785
  columnNumber: 7
779
786
  }
780
787
  }, _react["default"].createElement(LoadingIndicator, {
@@ -782,7 +789,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
782
789
  __self: _this,
783
790
  __source: {
784
791
  fileName: _jsxFileName,
785
- lineNumber: 1003,
792
+ lineNumber: 1004,
786
793
  columnNumber: 9
787
794
  }
788
795
  }));
@@ -794,7 +801,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
794
801
  __self: _this,
795
802
  __source: {
796
803
  fileName: _jsxFileName,
797
- lineNumber: 1010,
804
+ lineNumber: 1011,
798
805
  columnNumber: 30
799
806
  }
800
807
  });
@@ -803,7 +810,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
803
810
  __self: _this,
804
811
  __source: {
805
812
  fileName: _jsxFileName,
806
- lineNumber: 1011,
813
+ lineNumber: 1012,
807
814
  columnNumber: 46
808
815
  }
809
816
  });
@@ -824,7 +831,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
824
831
  __self: _this,
825
832
  __source: {
826
833
  fileName: _jsxFileName,
827
- lineNumber: 1027,
834
+ lineNumber: 1028,
828
835
  columnNumber: 5
829
836
  }
830
837
  }, _react["default"].createElement(FlatList, (0, _extends2["default"])({
@@ -860,7 +867,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
860
867
  __self: _this,
861
868
  __source: {
862
869
  fileName: _jsxFileName,
863
- lineNumber: 1031,
870
+ lineNumber: 1032,
864
871
  columnNumber: 7
865
872
  }
866
873
  })), !loading && _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_reactNative.View, {
@@ -868,28 +875,28 @@ var MessageListWithContext = function MessageListWithContext(props) {
868
875
  __self: _this,
869
876
  __source: {
870
877
  fileName: _jsxFileName,
871
- lineNumber: 1076,
878
+ lineNumber: 1077,
872
879
  columnNumber: 11
873
880
  }
874
881
  }, _react["default"].createElement(StickyHeaderComponent, {
875
882
  __self: _this,
876
883
  __source: {
877
884
  fileName: _jsxFileName,
878
- lineNumber: 1077,
885
+ lineNumber: 1078,
879
886
  columnNumber: 13
880
887
  }
881
888
  })), !disableTypingIndicator && TypingIndicator && _react["default"].createElement(TypingIndicatorContainer, {
882
889
  __self: _this,
883
890
  __source: {
884
891
  fileName: _jsxFileName,
885
- lineNumber: 1080,
892
+ lineNumber: 1081,
886
893
  columnNumber: 13
887
894
  }
888
895
  }, _react["default"].createElement(TypingIndicator, {
889
896
  __self: _this,
890
897
  __source: {
891
898
  fileName: _jsxFileName,
892
- lineNumber: 1081,
899
+ lineNumber: 1082,
893
900
  columnNumber: 15
894
901
  }
895
902
  })), _react["default"].createElement(ScrollToBottomButton, {
@@ -899,14 +906,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
899
906
  __self: _this,
900
907
  __source: {
901
908
  fileName: _jsxFileName,
902
- lineNumber: 1084,
909
+ lineNumber: 1085,
903
910
  columnNumber: 11
904
911
  }
905
912
  })), _react["default"].createElement(NetworkDownIndicator, {
906
913
  __self: _this,
907
914
  __source: {
908
915
  fileName: _jsxFileName,
909
- lineNumber: 1091,
916
+ lineNumber: 1092,
910
917
  columnNumber: 7
911
918
  }
912
919
  }));
@@ -1013,7 +1020,7 @@ var MessageList = function MessageList(props) {
1013
1020
  __self: _this,
1014
1021
  __source: {
1015
1022
  fileName: _jsxFileName,
1016
- lineNumber: 1149,
1023
+ lineNumber: 1150,
1017
1024
  columnNumber: 5
1018
1025
  }
1019
1026
  }));