stream-chat-react-native-core 4.1.1-beta.2 → 4.1.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/ChannelPreview/ChannelPreviewMessenger.js +12 -12
- package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessenger.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/ChannelPreviewStatus.js +4 -2
- package/lib/commonjs/components/ChannelPreview/ChannelPreviewStatus.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +18 -5
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/commonjs/contexts/index.js +13 -0
- package/lib/commonjs/contexts/index.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelPreview/ChannelPreviewMessenger.js +12 -12
- package/lib/module/components/ChannelPreview/ChannelPreviewMessenger.js.map +1 -1
- package/lib/module/components/ChannelPreview/ChannelPreviewStatus.js +4 -2
- package/lib/module/components/ChannelPreview/ChannelPreviewStatus.js.map +1 -1
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +18 -5
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/module/contexts/index.js +13 -0
- package/lib/module/contexts/index.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/ChannelPreview/ChannelPreviewMessenger.d.ts +7 -1
- package/lib/typescript/components/ChannelPreview/hooks/useLatestMessagePreview.d.ts +5 -0
- package/lib/typescript/contexts/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/ChannelPreview/ChannelPreviewMessenger.tsx +7 -1
- package/src/components/ChannelPreview/ChannelPreviewStatus.tsx +3 -3
- package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +14 -12
- package/src/contexts/index.ts +1 -0
- package/src/version.json +1 -1
|
@@ -113,7 +113,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
113
113
|
__self: _this,
|
|
114
114
|
__source: {
|
|
115
115
|
fileName: _jsxFileName,
|
|
116
|
-
lineNumber:
|
|
116
|
+
lineNumber: 138,
|
|
117
117
|
columnNumber: 5
|
|
118
118
|
}
|
|
119
119
|
}, _react["default"].createElement(PreviewAvatar, {
|
|
@@ -121,7 +121,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
121
121
|
__self: _this,
|
|
122
122
|
__source: {
|
|
123
123
|
fileName: _jsxFileName,
|
|
124
|
-
lineNumber:
|
|
124
|
+
lineNumber: 151,
|
|
125
125
|
columnNumber: 7
|
|
126
126
|
}
|
|
127
127
|
}), _react["default"].createElement(_reactNative.View, {
|
|
@@ -130,7 +130,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
130
130
|
__self: _this,
|
|
131
131
|
__source: {
|
|
132
132
|
fileName: _jsxFileName,
|
|
133
|
-
lineNumber:
|
|
133
|
+
lineNumber: 152,
|
|
134
134
|
columnNumber: 7
|
|
135
135
|
}
|
|
136
136
|
}, _react["default"].createElement(_reactNative.View, {
|
|
@@ -138,7 +138,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
138
138
|
__self: _this,
|
|
139
139
|
__source: {
|
|
140
140
|
fileName: _jsxFileName,
|
|
141
|
-
lineNumber:
|
|
141
|
+
lineNumber: 156,
|
|
142
142
|
columnNumber: 9
|
|
143
143
|
}
|
|
144
144
|
}, _react["default"].createElement(PreviewTitle, {
|
|
@@ -147,7 +147,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
147
147
|
__self: _this,
|
|
148
148
|
__source: {
|
|
149
149
|
fileName: _jsxFileName,
|
|
150
|
-
lineNumber:
|
|
150
|
+
lineNumber: 157,
|
|
151
151
|
columnNumber: 11
|
|
152
152
|
}
|
|
153
153
|
}), _react["default"].createElement(_reactNative.View, {
|
|
@@ -155,7 +155,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
155
155
|
__self: _this,
|
|
156
156
|
__source: {
|
|
157
157
|
fileName: _jsxFileName,
|
|
158
|
-
lineNumber:
|
|
158
|
+
lineNumber: 158,
|
|
159
159
|
columnNumber: 11
|
|
160
160
|
}
|
|
161
161
|
}, _react["default"].createElement(PreviewMutedStatus, {
|
|
@@ -164,7 +164,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
164
164
|
__self: _this,
|
|
165
165
|
__source: {
|
|
166
166
|
fileName: _jsxFileName,
|
|
167
|
-
lineNumber:
|
|
167
|
+
lineNumber: 159,
|
|
168
168
|
columnNumber: 13
|
|
169
169
|
}
|
|
170
170
|
}), _react["default"].createElement(PreviewUnreadCount, {
|
|
@@ -174,7 +174,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
174
174
|
__self: _this,
|
|
175
175
|
__source: {
|
|
176
176
|
fileName: _jsxFileName,
|
|
177
|
-
lineNumber:
|
|
177
|
+
lineNumber: 160,
|
|
178
178
|
columnNumber: 13
|
|
179
179
|
}
|
|
180
180
|
}))), _react["default"].createElement(_reactNative.View, {
|
|
@@ -182,7 +182,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
182
182
|
__self: _this,
|
|
183
183
|
__source: {
|
|
184
184
|
fileName: _jsxFileName,
|
|
185
|
-
lineNumber:
|
|
185
|
+
lineNumber: 163,
|
|
186
186
|
columnNumber: 9
|
|
187
187
|
}
|
|
188
188
|
}, _react["default"].createElement(PreviewMessage, {
|
|
@@ -190,7 +190,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
190
190
|
__self: _this,
|
|
191
191
|
__source: {
|
|
192
192
|
fileName: _jsxFileName,
|
|
193
|
-
lineNumber:
|
|
193
|
+
lineNumber: 164,
|
|
194
194
|
columnNumber: 11
|
|
195
195
|
}
|
|
196
196
|
}), _react["default"].createElement(PreviewStatus, {
|
|
@@ -200,7 +200,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
200
200
|
__self: _this,
|
|
201
201
|
__source: {
|
|
202
202
|
fileName: _jsxFileName,
|
|
203
|
-
lineNumber:
|
|
203
|
+
lineNumber: 165,
|
|
204
204
|
columnNumber: 11
|
|
205
205
|
}
|
|
206
206
|
}))));
|
|
@@ -232,7 +232,7 @@ var ChannelPreviewMessenger = function ChannelPreviewMessenger(props) {
|
|
|
232
232
|
__self: _this,
|
|
233
233
|
__source: {
|
|
234
234
|
fileName: _jsxFileName,
|
|
235
|
-
lineNumber:
|
|
235
|
+
lineNumber: 213,
|
|
236
236
|
columnNumber: 5
|
|
237
237
|
}
|
|
238
238
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ChannelPreviewMessenger.tsx"],"names":["styles","StyleSheet","create","container","borderBottomWidth","flex","flexDirection","paddingHorizontal","paddingVertical","contentContainer","row","alignItems","justifyContent","paddingLeft","statusContainer","display","title","fontSize","fontWeight","maxWidth","ChannelPreviewMessengerWithContext","props","channel","formatLatestMessageDate","latestMessagePreview","maxUnreadCount","onSelect","PreviewAvatar","ChannelAvatar","PreviewMessage","ChannelPreviewMessage","PreviewStatus","ChannelPreviewStatus","PreviewTitle","ChannelPreviewTitle","PreviewUnreadCount","ChannelPreviewUnreadCount","PreviewMutedStatus","ChannelPreviewMutedStatus","unread","theme","channelPreview","colors","border","white_snow","displayName","Math","floor","isChannelMuted","muteStatus","muted","backgroundColor","borderBottomColor","id","MemoizedChannelPreviewMessengerWithContext","React","memo","ChannelPreviewMessenger"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { TouchableOpacity } from 'react-native-gesture-handler';\n\nimport { ChannelAvatar } from './ChannelAvatar';\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport { ChannelPreviewMessage } from './ChannelPreviewMessage';\nimport { ChannelPreviewMutedStatus } from './ChannelPreviewMutedStatus';\nimport { ChannelPreviewStatus } from './ChannelPreviewStatus';\nimport { ChannelPreviewTitle } from './ChannelPreviewTitle';\nimport { ChannelPreviewUnreadCount } from './ChannelPreviewUnreadCount';\nimport { useChannelPreviewDisplayName } from './hooks/useChannelPreviewDisplayName';\n\nimport type { LatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { vw } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n container: {\n borderBottomWidth: 1,\n flex: 1,\n flexDirection: 'row',\n paddingHorizontal: 8,\n paddingVertical: 12,\n },\n contentContainer: { flex: 1 },\n row: {\n alignItems: 'center',\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingLeft: 8,\n },\n statusContainer: {\n display: 'flex',\n flexDirection: 'row',\n },\n title: { fontSize: 14, fontWeight: '700' },\n});\n\nconst maxWidth = vw(80) - 16 - 40;\n\nexport type ChannelPreviewMessengerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'> &\n Pick<\n ChannelsContextValue<StreamChatGenerics>,\n | 'maxUnreadCount'\n | 'onSelect'\n | 'PreviewAvatar'\n | 'PreviewMessage'\n | 'PreviewMutedStatus'\n | 'PreviewStatus'\n | 'PreviewTitle'\n | 'PreviewUnreadCount'\n > & {\n /**\n * Latest message on a channel, formatted for preview\n *\n * e.g.,\n *\n * ```json\n * {\n * created_at: '' ,\n * messageObject: { ... },\n * previews: {\n * bold: true,\n * text: 'This is the message preview text'\n * },\n * status: 0 | 1 | 2 // read states of latest message.\n * }\n * ```\n *\n * @overrideType object\n */\n latestMessagePreview: LatestMessagePreview<StreamChatGenerics>;\n /**\n * Formatter function for date of latest message.\n * @param date Message date\n * @returns Formatted date string\n *\n * By default today's date is shown in 'HH:mm A' format and other dates\n * are displayed in 'DD/MM/YY' format. props.latestMessage.created_at is the\n * default formatted date. This default logic is part of ChannelPreview component.\n */\n formatLatestMessageDate?: (date: Date) => string;\n /** Number of unread messages on the channel */\n unread?: number;\n };\n\nconst ChannelPreviewMessengerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n channel,\n formatLatestMessageDate,\n latestMessagePreview,\n maxUnreadCount,\n onSelect,\n PreviewAvatar = ChannelAvatar,\n PreviewMessage = ChannelPreviewMessage,\n PreviewStatus = ChannelPreviewStatus,\n PreviewTitle = ChannelPreviewTitle,\n PreviewUnreadCount = ChannelPreviewUnreadCount,\n PreviewMutedStatus = ChannelPreviewMutedStatus,\n unread,\n } = props;\n\n const {\n theme: {\n channelPreview: { container, contentContainer, row, title },\n colors: { border, white_snow },\n },\n } = useTheme();\n\n const displayName = useChannelPreviewDisplayName(\n channel,\n Math.floor(maxWidth / ((title.fontSize || styles.title.fontSize) / 2)),\n );\n\n const isChannelMuted = channel.muteStatus().muted;\n\n return (\n <TouchableOpacity\n onPress={() => {\n if (onSelect) {\n onSelect(channel);\n }\n }}\n style={[\n styles.container,\n { backgroundColor: white_snow, borderBottomColor: border },\n container,\n ]}\n testID='channel-preview-button'\n >\n <PreviewAvatar channel={channel} />\n <View\n style={[styles.contentContainer, contentContainer]}\n testID={`channel-preview-content-${channel.id}`}\n >\n <View style={[styles.row, row]}>\n <PreviewTitle channel={channel} displayName={displayName} />\n <View style={[styles.statusContainer, row]}>\n <PreviewMutedStatus channel={channel} muted={isChannelMuted} />\n <PreviewUnreadCount channel={channel} maxUnreadCount={maxUnreadCount} unread={unread} />\n </View>\n </View>\n <View style={[styles.row, row]}>\n <PreviewMessage latestMessagePreview={latestMessagePreview} />\n <PreviewStatus\n channel={channel}\n formatLatestMessageDate={formatLatestMessageDate}\n latestMessagePreview={latestMessagePreview}\n />\n </View>\n </View>\n </TouchableOpacity>\n );\n};\n\nexport type ChannelPreviewMessengerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n Omit<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >\n> &\n Pick<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >;\n\nconst MemoizedChannelPreviewMessengerWithContext = React.memo(\n ChannelPreviewMessengerWithContext,\n) as typeof ChannelPreviewMessengerWithContext;\n\n/**\n * This UI component displays an individual preview item for each channel in a list. It also receives all props\n * from the ChannelPreview component.\n */\nexport const ChannelPreviewMessenger = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerProps<StreamChatGenerics>,\n) => {\n const {\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n } = useChannelsContext<StreamChatGenerics>();\n return (\n <MemoizedChannelPreviewMessengerWithContext\n {...{\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n }}\n {...props}\n />\n );\n};\n\nChannelPreviewMessenger.displayName = 'ChannelPreviewMessenger{channelPreview}';\n"]}
|
|
1
|
+
{"version":3,"sources":["ChannelPreviewMessenger.tsx"],"names":["styles","StyleSheet","create","container","borderBottomWidth","flex","flexDirection","paddingHorizontal","paddingVertical","contentContainer","row","alignItems","justifyContent","paddingLeft","statusContainer","display","title","fontSize","fontWeight","maxWidth","ChannelPreviewMessengerWithContext","props","channel","formatLatestMessageDate","latestMessagePreview","maxUnreadCount","onSelect","PreviewAvatar","ChannelAvatar","PreviewMessage","ChannelPreviewMessage","PreviewStatus","ChannelPreviewStatus","PreviewTitle","ChannelPreviewTitle","PreviewUnreadCount","ChannelPreviewUnreadCount","PreviewMutedStatus","ChannelPreviewMutedStatus","unread","theme","channelPreview","colors","border","white_snow","displayName","Math","floor","isChannelMuted","muteStatus","muted","backgroundColor","borderBottomColor","id","MemoizedChannelPreviewMessengerWithContext","React","memo","ChannelPreviewMessenger"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { TouchableOpacity } from 'react-native-gesture-handler';\n\nimport { ChannelAvatar } from './ChannelAvatar';\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport { ChannelPreviewMessage } from './ChannelPreviewMessage';\nimport { ChannelPreviewMutedStatus } from './ChannelPreviewMutedStatus';\nimport { ChannelPreviewStatus } from './ChannelPreviewStatus';\nimport { ChannelPreviewTitle } from './ChannelPreviewTitle';\nimport { ChannelPreviewUnreadCount } from './ChannelPreviewUnreadCount';\nimport { useChannelPreviewDisplayName } from './hooks/useChannelPreviewDisplayName';\n\nimport type { LatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { vw } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n container: {\n borderBottomWidth: 1,\n flex: 1,\n flexDirection: 'row',\n paddingHorizontal: 8,\n paddingVertical: 12,\n },\n contentContainer: { flex: 1 },\n row: {\n alignItems: 'center',\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingLeft: 8,\n },\n statusContainer: {\n display: 'flex',\n flexDirection: 'row',\n },\n title: { fontSize: 14, fontWeight: '700' },\n});\n\nconst maxWidth = vw(80) - 16 - 40;\n\nexport type ChannelPreviewMessengerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'> &\n Pick<\n ChannelsContextValue<StreamChatGenerics>,\n | 'maxUnreadCount'\n | 'onSelect'\n | 'PreviewAvatar'\n | 'PreviewMessage'\n | 'PreviewMutedStatus'\n | 'PreviewStatus'\n | 'PreviewTitle'\n | 'PreviewUnreadCount'\n > & {\n /**\n * Latest message on a channel, formatted for preview\n *\n * e.g.,\n *\n * ```json\n * {\n * created_at: '' ,\n * messageObject: { ... },\n * previews: {\n * bold: true,\n * text: 'This is the message preview text'\n * },\n * status: 0 | 1 | 2 // read states of the latest message.\n * }\n * ```\n *\n * The read status is either of the following:\n *\n * 0: The message was not sent by the current user\n * 1: The message was sent by the current user and is unread\n * 2: The message was sent by the current user and is read\n *\n * @overrideType object\n */\n latestMessagePreview: LatestMessagePreview<StreamChatGenerics>;\n /**\n * Formatter function for date of latest message.\n * @param date Message date\n * @returns Formatted date string\n *\n * By default today's date is shown in 'HH:mm A' format and other dates\n * are displayed in 'DD/MM/YY' format. props.latestMessage.created_at is the\n * default formatted date. This default logic is part of ChannelPreview component.\n */\n formatLatestMessageDate?: (date: Date) => string;\n /** Number of unread messages on the channel */\n unread?: number;\n };\n\nconst ChannelPreviewMessengerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n channel,\n formatLatestMessageDate,\n latestMessagePreview,\n maxUnreadCount,\n onSelect,\n PreviewAvatar = ChannelAvatar,\n PreviewMessage = ChannelPreviewMessage,\n PreviewStatus = ChannelPreviewStatus,\n PreviewTitle = ChannelPreviewTitle,\n PreviewUnreadCount = ChannelPreviewUnreadCount,\n PreviewMutedStatus = ChannelPreviewMutedStatus,\n unread,\n } = props;\n\n const {\n theme: {\n channelPreview: { container, contentContainer, row, title },\n colors: { border, white_snow },\n },\n } = useTheme();\n\n const displayName = useChannelPreviewDisplayName(\n channel,\n Math.floor(maxWidth / ((title.fontSize || styles.title.fontSize) / 2)),\n );\n\n const isChannelMuted = channel.muteStatus().muted;\n\n return (\n <TouchableOpacity\n onPress={() => {\n if (onSelect) {\n onSelect(channel);\n }\n }}\n style={[\n styles.container,\n { backgroundColor: white_snow, borderBottomColor: border },\n container,\n ]}\n testID='channel-preview-button'\n >\n <PreviewAvatar channel={channel} />\n <View\n style={[styles.contentContainer, contentContainer]}\n testID={`channel-preview-content-${channel.id}`}\n >\n <View style={[styles.row, row]}>\n <PreviewTitle channel={channel} displayName={displayName} />\n <View style={[styles.statusContainer, row]}>\n <PreviewMutedStatus channel={channel} muted={isChannelMuted} />\n <PreviewUnreadCount channel={channel} maxUnreadCount={maxUnreadCount} unread={unread} />\n </View>\n </View>\n <View style={[styles.row, row]}>\n <PreviewMessage latestMessagePreview={latestMessagePreview} />\n <PreviewStatus\n channel={channel}\n formatLatestMessageDate={formatLatestMessageDate}\n latestMessagePreview={latestMessagePreview}\n />\n </View>\n </View>\n </TouchableOpacity>\n );\n};\n\nexport type ChannelPreviewMessengerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n Omit<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >\n> &\n Pick<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >;\n\nconst MemoizedChannelPreviewMessengerWithContext = React.memo(\n ChannelPreviewMessengerWithContext,\n) as typeof ChannelPreviewMessengerWithContext;\n\n/**\n * This UI component displays an individual preview item for each channel in a list. It also receives all props\n * from the ChannelPreview component.\n */\nexport const ChannelPreviewMessenger = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerProps<StreamChatGenerics>,\n) => {\n const {\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n } = useChannelsContext<StreamChatGenerics>();\n return (\n <MemoizedChannelPreviewMessengerWithContext\n {...{\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n }}\n {...props}\n />\n );\n};\n\nChannelPreviewMessenger.displayName = 'ChannelPreviewMessenger{channelPreview}';\n"]}
|
|
@@ -11,6 +11,8 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
|
|
12
12
|
var _reactNative = require("react-native");
|
|
13
13
|
|
|
14
|
+
var _useLatestMessagePreview = require("./hooks/useLatestMessagePreview");
|
|
15
|
+
|
|
14
16
|
var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
|
|
15
17
|
|
|
16
18
|
var _icons = require("../../icons");
|
|
@@ -56,7 +58,7 @@ var ChannelPreviewStatus = function ChannelPreviewStatus(props) {
|
|
|
56
58
|
lineNumber: 50,
|
|
57
59
|
columnNumber: 5
|
|
58
60
|
}
|
|
59
|
-
}, status ===
|
|
61
|
+
}, status === _useLatestMessagePreview.MessageReadStatus.READ ? _react["default"].createElement(_icons.CheckAll, (0, _extends2["default"])({
|
|
60
62
|
pathFill: accent_blue
|
|
61
63
|
}, checkAllIcon, {
|
|
62
64
|
__self: _this,
|
|
@@ -65,7 +67,7 @@ var ChannelPreviewStatus = function ChannelPreviewStatus(props) {
|
|
|
65
67
|
lineNumber: 52,
|
|
66
68
|
columnNumber: 9
|
|
67
69
|
}
|
|
68
|
-
})) : status ===
|
|
70
|
+
})) : status === _useLatestMessagePreview.MessageReadStatus.UNREAD ? _react["default"].createElement(_icons.Check, (0, _extends2["default"])({
|
|
69
71
|
pathFill: grey
|
|
70
72
|
}, checkIcon, {
|
|
71
73
|
__self: _this,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ChannelPreviewStatus.tsx"],"names":["styles","StyleSheet","create","date","fontSize","marginLeft","textAlign","flexRow","flexDirection","ChannelPreviewStatus","props","formatLatestMessageDate","latestMessagePreview","theme","channelPreview","checkAllIcon","checkIcon","colors","accent_blue","grey","created_at","messageObject","latestMessageDate","Date","status","color"],"mappings":";;;;;;;;;AAAA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["ChannelPreviewStatus.tsx"],"names":["styles","StyleSheet","create","date","fontSize","marginLeft","textAlign","flexRow","flexDirection","ChannelPreviewStatus","props","formatLatestMessageDate","latestMessagePreview","theme","channelPreview","checkAllIcon","checkIcon","colors","accent_blue","grey","created_at","messageObject","latestMessageDate","Date","status","MessageReadStatus","READ","UNREAD","color"],"mappings":";;;;;;;;;AAAA;;AACA;;AAIA;;AAEA;;AACA;;;;;AAIA,IAAMA,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,IAAI,EAAE;AACJC,IAAAA,QAAQ,EAAE,EADN;AAEJC,IAAAA,UAAU,EAAE,CAFR;AAGJC,IAAAA,SAAS,EAAE;AAHP,GADyB;AAM/BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,aAAa,EAAE;AADR;AANsB,CAAlB,CAAf;;AAmBO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAGlCC,KAHkC,EAI/B;AAAA;;AACH,MAAQC,uBAAR,GAA0DD,KAA1D,CAAQC,uBAAR;AAAA,MAAiCC,oBAAjC,GAA0DF,KAA1D,CAAiCE,oBAAjC;;AACA,kBAKI,6BALJ;AAAA,kCACEC,KADF;AAAA,8CAEIC,cAFJ;AAAA,MAEsBC,YAFtB,yBAEsBA,YAFtB;AAAA,MAEoCC,SAFpC,yBAEoCA,SAFpC;AAAA,MAE+Cb,IAF/C,yBAE+CA,IAF/C;AAAA,8CAGIc,MAHJ;AAAA,MAGcC,WAHd,yBAGcA,WAHd;AAAA,MAG2BC,IAH3B,yBAG2BA,IAH3B;;AAOA,MAAMC,UAAU,4BAAGR,oBAAoB,CAACS,aAAxB,qBAAG,sBAAoCD,UAAvD;AACA,MAAME,iBAAiB,GAAGF,UAAU,GAAG,IAAIG,IAAJ,CAASH,UAAT,CAAH,GAA0B,IAAIG,IAAJ,EAA9D;AACA,MAAMC,MAAM,GAAGZ,oBAAoB,CAACY,MAApC;AAEA,SACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAExB,MAAM,CAACO,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGiB,MAAM,KAAKC,2CAAkBC,IAA7B,GACC,gCAAC,eAAD;AAAU,IAAA,QAAQ,EAAER;AAApB,KAAqCH,YAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KADD,GAEGS,MAAM,KAAKC,2CAAkBE,MAA7B,GACF,gCAAC,YAAD;AAAO,IAAA,QAAQ,EAAER;AAAjB,KAA2BH,SAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KADE,GAEA,IALN,EAME,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAChB,MAAM,CAACG,IAAR,EAAc;AAAEyB,MAAAA,KAAK,EAAET;AAAT,KAAd,EAA+BhB,IAA/B,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGQ,uBAAuB,IAAIW,iBAA3B,GACGX,uBAAuB,CAACW,iBAAD,CAD1B,GAEGV,oBAAoB,CAACQ,UAH3B,CANF,CADF;AAcD,CA/BM","sourcesContent":["import React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport type { ChannelPreviewMessengerPropsWithContext } from './ChannelPreviewMessenger';\nimport { MessageReadStatus } from './hooks/useLatestMessagePreview';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Check, CheckAll } from '../../icons';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst styles = StyleSheet.create({\n date: {\n fontSize: 12,\n marginLeft: 2,\n textAlign: 'right',\n },\n flexRow: {\n flexDirection: 'row',\n },\n});\n\nexport type ChannelPreviewStatusProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'latestMessagePreview' | 'formatLatestMessageDate'\n> &\n Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreviewStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewStatusProps<StreamChatGenerics>,\n) => {\n const { formatLatestMessageDate, latestMessagePreview } = props;\n const {\n theme: {\n channelPreview: { checkAllIcon, checkIcon, date },\n colors: { accent_blue, grey },\n },\n } = useTheme();\n\n const created_at = latestMessagePreview.messageObject?.created_at;\n const latestMessageDate = created_at ? new Date(created_at) : new Date();\n const status = latestMessagePreview.status;\n\n return (\n <View style={styles.flexRow}>\n {status === MessageReadStatus.READ ? (\n <CheckAll pathFill={accent_blue} {...checkAllIcon} />\n ) : status === MessageReadStatus.UNREAD ? (\n <Check pathFill={grey} {...checkIcon} />\n ) : null}\n <Text style={[styles.date, { color: grey }, date]}>\n {formatLatestMessageDate && latestMessageDate\n ? formatLatestMessageDate(latestMessageDate)\n : latestMessagePreview.created_at}\n </Text>\n </View>\n );\n};\n"]}
|
|
@@ -3,7 +3,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useLatestMessagePreview = void 0;
|
|
6
|
+
exports.useLatestMessagePreview = exports.MessageReadStatus = void 0;
|
|
7
7
|
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
|
|
@@ -114,11 +114,24 @@ var getLatestMessageDisplayDate = function getLatestMessageDisplayDate(message,
|
|
|
114
114
|
return parserOutput;
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
+
var MessageReadStatus;
|
|
118
|
+
exports.MessageReadStatus = MessageReadStatus;
|
|
119
|
+
|
|
120
|
+
(function (MessageReadStatus) {
|
|
121
|
+
MessageReadStatus[MessageReadStatus["NOT_SENT_BY_CURRENT_USER"] = 0] = "NOT_SENT_BY_CURRENT_USER";
|
|
122
|
+
MessageReadStatus[MessageReadStatus["UNREAD"] = 1] = "UNREAD";
|
|
123
|
+
MessageReadStatus[MessageReadStatus["READ"] = 2] = "READ";
|
|
124
|
+
})(MessageReadStatus || (exports.MessageReadStatus = MessageReadStatus = {}));
|
|
125
|
+
|
|
117
126
|
var getLatestMessageReadStatus = function getLatestMessageReadStatus(channel, client, message, readEvents) {
|
|
118
127
|
var _message$user5;
|
|
119
128
|
|
|
120
129
|
var currentUserId = client.userID;
|
|
121
|
-
|
|
130
|
+
|
|
131
|
+
if (!message || currentUserId !== ((_message$user5 = message.user) == null ? void 0 : _message$user5.id) || readEvents === false) {
|
|
132
|
+
return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;
|
|
133
|
+
}
|
|
134
|
+
|
|
122
135
|
var readList = channel.state.read;
|
|
123
136
|
|
|
124
137
|
if (currentUserId) {
|
|
@@ -129,7 +142,7 @@ var getLatestMessageReadStatus = function getLatestMessageReadStatus(channel, cl
|
|
|
129
142
|
return Object.values(readList).some(function (_ref) {
|
|
130
143
|
var last_read = _ref.last_read;
|
|
131
144
|
return messageUpdatedAt && messageUpdatedAt < last_read;
|
|
132
|
-
}) ?
|
|
145
|
+
}) ? MessageReadStatus.READ : MessageReadStatus.UNREAD;
|
|
133
146
|
};
|
|
134
147
|
|
|
135
148
|
var getLatestMessagePreview = function getLatestMessagePreview(params) {
|
|
@@ -149,7 +162,7 @@ var getLatestMessagePreview = function getLatestMessagePreview(params) {
|
|
|
149
162
|
bold: false,
|
|
150
163
|
text: t('Nothing yet...')
|
|
151
164
|
}],
|
|
152
|
-
status:
|
|
165
|
+
status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER
|
|
153
166
|
};
|
|
154
167
|
}
|
|
155
168
|
|
|
@@ -187,7 +200,7 @@ var useLatestMessagePreview = function useLatestMessagePreview(channel, forceUpd
|
|
|
187
200
|
bold: false,
|
|
188
201
|
text: ''
|
|
189
202
|
}],
|
|
190
|
-
status:
|
|
203
|
+
status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER
|
|
191
204
|
}),
|
|
192
205
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
193
206
|
latestMessagePreview = _useState4[0],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useLatestMessagePreview.ts"],"names":["getLatestMessageDisplayText","channel","client","message","t","bold","text","isMessageTypeDeleted","type","currentUserId","userID","messageOwnerId","user","id","members","Object","keys","state","owner","length","name","username","ownerText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","Array","isArray","mentioned_users","reduce","acc","cur","userName","regEx","RegExp","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isSame","Date","format","getLatestMessageReadStatus","readEvents","readList","read","messageUpdatedAt","updated_at","undefined","values","some","last_read","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","useLatestMessagePreview","forceUpdate","channelConfigExists","getConfig","channelLastMessageString","setReadEvents","latestMessagePreview","setLatestMessagePreview","readStatus","read_events"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client.userID;\n const messageOwnerId = message.user?.id;\n const members = Object.keys(channel.state.members);\n const owner =\n messageOwnerId === currentUserId\n ? t('You')\n : members.length > 2\n ? message.user?.name || message.user?.username || message.user?.id || ''\n : '';\n const ownerText = owner ? `${owner === t('You') ? '' : '@'}${owner}: ` : '';\n const boldOwner = ownerText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = Array.isArray(message.mentioned_users)\n ? message.mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: ownerText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\n/**\n * set up enum\n * 0 = latest message is not current user's message\n * 1 = nobody has read latest message which is the current user's message\n * 2 = someone has read latest message which is the current user's message\n */\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n) => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) return 0;\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? 2\n : 1;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: 0,\n };\n }\n const message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: 0,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["useLatestMessagePreview.ts"],"names":["getLatestMessageDisplayText","channel","client","message","t","bold","text","isMessageTypeDeleted","type","currentUserId","userID","messageOwnerId","user","id","members","Object","keys","state","owner","length","name","username","ownerText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","Array","isArray","mentioned_users","reduce","acc","cur","userName","regEx","RegExp","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isSame","Date","format","MessageReadStatus","getLatestMessageReadStatus","readEvents","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","useLatestMessagePreview","forceUpdate","channelConfigExists","getConfig","channelLastMessageString","setReadEvents","latestMessagePreview","setLatestMessagePreview","readStatus","read_events"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client.userID;\n const messageOwnerId = message.user?.id;\n const members = Object.keys(channel.state.members);\n const owner =\n messageOwnerId === currentUserId\n ? t('You')\n : members.length > 2\n ? message.user?.name || message.user?.username || message.user?.id || ''\n : '';\n const ownerText = owner ? `${owner === t('You') ? '' : '@'}${owner}: ` : '';\n const boldOwner = ownerText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = Array.isArray(message.mentioned_users)\n ? message.mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: ownerText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\nexport enum MessageReadStatus {\n NOT_SENT_BY_CURRENT_USER = 0,\n UNREAD = 1,\n READ = 2,\n}\n\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n): MessageReadStatus => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) {\n return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;\n }\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? MessageReadStatus.READ\n : MessageReadStatus.UNREAD;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n };\n }\n const message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"]}
|
|
@@ -197,6 +197,19 @@ Object.keys(_OverlayProvider).forEach(function (key) {
|
|
|
197
197
|
});
|
|
198
198
|
});
|
|
199
199
|
|
|
200
|
+
var _OwnCapabilitiesContext = require("./ownCapabilitiesContext/OwnCapabilitiesContext");
|
|
201
|
+
|
|
202
|
+
Object.keys(_OwnCapabilitiesContext).forEach(function (key) {
|
|
203
|
+
if (key === "default" || key === "__esModule") return;
|
|
204
|
+
if (key in exports && exports[key] === _OwnCapabilitiesContext[key]) return;
|
|
205
|
+
Object.defineProperty(exports, key, {
|
|
206
|
+
enumerable: true,
|
|
207
|
+
get: function get() {
|
|
208
|
+
return _OwnCapabilitiesContext[key];
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
|
|
200
213
|
var _SuggestionsContext = require("./suggestionsContext/SuggestionsContext");
|
|
201
214
|
|
|
202
215
|
Object.keys(_SuggestionsContext).forEach(function (key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './attachmentPickerContext/AttachmentPickerContext';\nexport * from './channelContext/ChannelContext';\nexport * from './channelsContext/ChannelsContext';\nexport * from './chatContext/ChatContext';\nexport * from './imageGalleryContext/ImageGalleryContext';\nexport * from './keyboardContext/KeyboardContext';\nexport * from './messageContext/MessageContext';\nexport * from './messageInputContext/hooks/useCreateMessageInputContext';\nexport * from './messageInputContext/hooks/useMessageDetailsForState';\nexport * from './messageInputContext/MessageInputContext';\nexport * from './messageOverlayContext/MessageOverlayContext';\nexport * from './messagesContext/MessagesContext';\nexport * from './paginatedMessageListContext/PaginatedMessageListContext';\nexport * from './overlayContext/OverlayContext';\nexport * from './overlayContext/OverlayProvider';\nexport * from './suggestionsContext/SuggestionsContext';\nexport * from './themeContext/ThemeContext';\nexport * from './themeContext/utils/theme';\nexport * from './threadContext/ThreadContext';\nexport * from './translationContext/TranslationContext';\nexport * from './typingContext/TypingContext';\nexport * from './utils/getDisplayName';\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './attachmentPickerContext/AttachmentPickerContext';\nexport * from './channelContext/ChannelContext';\nexport * from './channelsContext/ChannelsContext';\nexport * from './chatContext/ChatContext';\nexport * from './imageGalleryContext/ImageGalleryContext';\nexport * from './keyboardContext/KeyboardContext';\nexport * from './messageContext/MessageContext';\nexport * from './messageInputContext/hooks/useCreateMessageInputContext';\nexport * from './messageInputContext/hooks/useMessageDetailsForState';\nexport * from './messageInputContext/MessageInputContext';\nexport * from './messageOverlayContext/MessageOverlayContext';\nexport * from './messagesContext/MessagesContext';\nexport * from './paginatedMessageListContext/PaginatedMessageListContext';\nexport * from './overlayContext/OverlayContext';\nexport * from './overlayContext/OverlayProvider';\nexport * from './ownCapabilitiesContext/OwnCapabilitiesContext';\nexport * from './suggestionsContext/SuggestionsContext';\nexport * from './themeContext/ThemeContext';\nexport * from './themeContext/utils/theme';\nexport * from './threadContext/ThreadContext';\nexport * from './translationContext/TranslationContext';\nexport * from './typingContext/TypingContext';\nexport * from './utils/getDisplayName';\n"]}
|
|
@@ -113,7 +113,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
113
113
|
__self: _this,
|
|
114
114
|
__source: {
|
|
115
115
|
fileName: _jsxFileName,
|
|
116
|
-
lineNumber:
|
|
116
|
+
lineNumber: 138,
|
|
117
117
|
columnNumber: 5
|
|
118
118
|
}
|
|
119
119
|
}, _react["default"].createElement(PreviewAvatar, {
|
|
@@ -121,7 +121,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
121
121
|
__self: _this,
|
|
122
122
|
__source: {
|
|
123
123
|
fileName: _jsxFileName,
|
|
124
|
-
lineNumber:
|
|
124
|
+
lineNumber: 151,
|
|
125
125
|
columnNumber: 7
|
|
126
126
|
}
|
|
127
127
|
}), _react["default"].createElement(_reactNative.View, {
|
|
@@ -130,7 +130,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
130
130
|
__self: _this,
|
|
131
131
|
__source: {
|
|
132
132
|
fileName: _jsxFileName,
|
|
133
|
-
lineNumber:
|
|
133
|
+
lineNumber: 152,
|
|
134
134
|
columnNumber: 7
|
|
135
135
|
}
|
|
136
136
|
}, _react["default"].createElement(_reactNative.View, {
|
|
@@ -138,7 +138,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
138
138
|
__self: _this,
|
|
139
139
|
__source: {
|
|
140
140
|
fileName: _jsxFileName,
|
|
141
|
-
lineNumber:
|
|
141
|
+
lineNumber: 156,
|
|
142
142
|
columnNumber: 9
|
|
143
143
|
}
|
|
144
144
|
}, _react["default"].createElement(PreviewTitle, {
|
|
@@ -147,7 +147,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
147
147
|
__self: _this,
|
|
148
148
|
__source: {
|
|
149
149
|
fileName: _jsxFileName,
|
|
150
|
-
lineNumber:
|
|
150
|
+
lineNumber: 157,
|
|
151
151
|
columnNumber: 11
|
|
152
152
|
}
|
|
153
153
|
}), _react["default"].createElement(_reactNative.View, {
|
|
@@ -155,7 +155,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
155
155
|
__self: _this,
|
|
156
156
|
__source: {
|
|
157
157
|
fileName: _jsxFileName,
|
|
158
|
-
lineNumber:
|
|
158
|
+
lineNumber: 158,
|
|
159
159
|
columnNumber: 11
|
|
160
160
|
}
|
|
161
161
|
}, _react["default"].createElement(PreviewMutedStatus, {
|
|
@@ -164,7 +164,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
164
164
|
__self: _this,
|
|
165
165
|
__source: {
|
|
166
166
|
fileName: _jsxFileName,
|
|
167
|
-
lineNumber:
|
|
167
|
+
lineNumber: 159,
|
|
168
168
|
columnNumber: 13
|
|
169
169
|
}
|
|
170
170
|
}), _react["default"].createElement(PreviewUnreadCount, {
|
|
@@ -174,7 +174,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
174
174
|
__self: _this,
|
|
175
175
|
__source: {
|
|
176
176
|
fileName: _jsxFileName,
|
|
177
|
-
lineNumber:
|
|
177
|
+
lineNumber: 160,
|
|
178
178
|
columnNumber: 13
|
|
179
179
|
}
|
|
180
180
|
}))), _react["default"].createElement(_reactNative.View, {
|
|
@@ -182,7 +182,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
182
182
|
__self: _this,
|
|
183
183
|
__source: {
|
|
184
184
|
fileName: _jsxFileName,
|
|
185
|
-
lineNumber:
|
|
185
|
+
lineNumber: 163,
|
|
186
186
|
columnNumber: 9
|
|
187
187
|
}
|
|
188
188
|
}, _react["default"].createElement(PreviewMessage, {
|
|
@@ -190,7 +190,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
190
190
|
__self: _this,
|
|
191
191
|
__source: {
|
|
192
192
|
fileName: _jsxFileName,
|
|
193
|
-
lineNumber:
|
|
193
|
+
lineNumber: 164,
|
|
194
194
|
columnNumber: 11
|
|
195
195
|
}
|
|
196
196
|
}), _react["default"].createElement(PreviewStatus, {
|
|
@@ -200,7 +200,7 @@ var ChannelPreviewMessengerWithContext = function ChannelPreviewMessengerWithCon
|
|
|
200
200
|
__self: _this,
|
|
201
201
|
__source: {
|
|
202
202
|
fileName: _jsxFileName,
|
|
203
|
-
lineNumber:
|
|
203
|
+
lineNumber: 165,
|
|
204
204
|
columnNumber: 11
|
|
205
205
|
}
|
|
206
206
|
}))));
|
|
@@ -232,7 +232,7 @@ var ChannelPreviewMessenger = function ChannelPreviewMessenger(props) {
|
|
|
232
232
|
__self: _this,
|
|
233
233
|
__source: {
|
|
234
234
|
fileName: _jsxFileName,
|
|
235
|
-
lineNumber:
|
|
235
|
+
lineNumber: 213,
|
|
236
236
|
columnNumber: 5
|
|
237
237
|
}
|
|
238
238
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ChannelPreviewMessenger.tsx"],"names":["styles","StyleSheet","create","container","borderBottomWidth","flex","flexDirection","paddingHorizontal","paddingVertical","contentContainer","row","alignItems","justifyContent","paddingLeft","statusContainer","display","title","fontSize","fontWeight","maxWidth","ChannelPreviewMessengerWithContext","props","channel","formatLatestMessageDate","latestMessagePreview","maxUnreadCount","onSelect","PreviewAvatar","ChannelAvatar","PreviewMessage","ChannelPreviewMessage","PreviewStatus","ChannelPreviewStatus","PreviewTitle","ChannelPreviewTitle","PreviewUnreadCount","ChannelPreviewUnreadCount","PreviewMutedStatus","ChannelPreviewMutedStatus","unread","theme","channelPreview","colors","border","white_snow","displayName","Math","floor","isChannelMuted","muteStatus","muted","backgroundColor","borderBottomColor","id","MemoizedChannelPreviewMessengerWithContext","React","memo","ChannelPreviewMessenger"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { TouchableOpacity } from 'react-native-gesture-handler';\n\nimport { ChannelAvatar } from './ChannelAvatar';\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport { ChannelPreviewMessage } from './ChannelPreviewMessage';\nimport { ChannelPreviewMutedStatus } from './ChannelPreviewMutedStatus';\nimport { ChannelPreviewStatus } from './ChannelPreviewStatus';\nimport { ChannelPreviewTitle } from './ChannelPreviewTitle';\nimport { ChannelPreviewUnreadCount } from './ChannelPreviewUnreadCount';\nimport { useChannelPreviewDisplayName } from './hooks/useChannelPreviewDisplayName';\n\nimport type { LatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { vw } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n container: {\n borderBottomWidth: 1,\n flex: 1,\n flexDirection: 'row',\n paddingHorizontal: 8,\n paddingVertical: 12,\n },\n contentContainer: { flex: 1 },\n row: {\n alignItems: 'center',\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingLeft: 8,\n },\n statusContainer: {\n display: 'flex',\n flexDirection: 'row',\n },\n title: { fontSize: 14, fontWeight: '700' },\n});\n\nconst maxWidth = vw(80) - 16 - 40;\n\nexport type ChannelPreviewMessengerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'> &\n Pick<\n ChannelsContextValue<StreamChatGenerics>,\n | 'maxUnreadCount'\n | 'onSelect'\n | 'PreviewAvatar'\n | 'PreviewMessage'\n | 'PreviewMutedStatus'\n | 'PreviewStatus'\n | 'PreviewTitle'\n | 'PreviewUnreadCount'\n > & {\n /**\n * Latest message on a channel, formatted for preview\n *\n * e.g.,\n *\n * ```json\n * {\n * created_at: '' ,\n * messageObject: { ... },\n * previews: {\n * bold: true,\n * text: 'This is the message preview text'\n * },\n * status: 0 | 1 | 2 // read states of latest message.\n * }\n * ```\n *\n * @overrideType object\n */\n latestMessagePreview: LatestMessagePreview<StreamChatGenerics>;\n /**\n * Formatter function for date of latest message.\n * @param date Message date\n * @returns Formatted date string\n *\n * By default today's date is shown in 'HH:mm A' format and other dates\n * are displayed in 'DD/MM/YY' format. props.latestMessage.created_at is the\n * default formatted date. This default logic is part of ChannelPreview component.\n */\n formatLatestMessageDate?: (date: Date) => string;\n /** Number of unread messages on the channel */\n unread?: number;\n };\n\nconst ChannelPreviewMessengerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n channel,\n formatLatestMessageDate,\n latestMessagePreview,\n maxUnreadCount,\n onSelect,\n PreviewAvatar = ChannelAvatar,\n PreviewMessage = ChannelPreviewMessage,\n PreviewStatus = ChannelPreviewStatus,\n PreviewTitle = ChannelPreviewTitle,\n PreviewUnreadCount = ChannelPreviewUnreadCount,\n PreviewMutedStatus = ChannelPreviewMutedStatus,\n unread,\n } = props;\n\n const {\n theme: {\n channelPreview: { container, contentContainer, row, title },\n colors: { border, white_snow },\n },\n } = useTheme();\n\n const displayName = useChannelPreviewDisplayName(\n channel,\n Math.floor(maxWidth / ((title.fontSize || styles.title.fontSize) / 2)),\n );\n\n const isChannelMuted = channel.muteStatus().muted;\n\n return (\n <TouchableOpacity\n onPress={() => {\n if (onSelect) {\n onSelect(channel);\n }\n }}\n style={[\n styles.container,\n { backgroundColor: white_snow, borderBottomColor: border },\n container,\n ]}\n testID='channel-preview-button'\n >\n <PreviewAvatar channel={channel} />\n <View\n style={[styles.contentContainer, contentContainer]}\n testID={`channel-preview-content-${channel.id}`}\n >\n <View style={[styles.row, row]}>\n <PreviewTitle channel={channel} displayName={displayName} />\n <View style={[styles.statusContainer, row]}>\n <PreviewMutedStatus channel={channel} muted={isChannelMuted} />\n <PreviewUnreadCount channel={channel} maxUnreadCount={maxUnreadCount} unread={unread} />\n </View>\n </View>\n <View style={[styles.row, row]}>\n <PreviewMessage latestMessagePreview={latestMessagePreview} />\n <PreviewStatus\n channel={channel}\n formatLatestMessageDate={formatLatestMessageDate}\n latestMessagePreview={latestMessagePreview}\n />\n </View>\n </View>\n </TouchableOpacity>\n );\n};\n\nexport type ChannelPreviewMessengerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n Omit<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >\n> &\n Pick<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >;\n\nconst MemoizedChannelPreviewMessengerWithContext = React.memo(\n ChannelPreviewMessengerWithContext,\n) as typeof ChannelPreviewMessengerWithContext;\n\n/**\n * This UI component displays an individual preview item for each channel in a list. It also receives all props\n * from the ChannelPreview component.\n */\nexport const ChannelPreviewMessenger = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerProps<StreamChatGenerics>,\n) => {\n const {\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n } = useChannelsContext<StreamChatGenerics>();\n return (\n <MemoizedChannelPreviewMessengerWithContext\n {...{\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n }}\n {...props}\n />\n );\n};\n\nChannelPreviewMessenger.displayName = 'ChannelPreviewMessenger{channelPreview}';\n"]}
|
|
1
|
+
{"version":3,"sources":["ChannelPreviewMessenger.tsx"],"names":["styles","StyleSheet","create","container","borderBottomWidth","flex","flexDirection","paddingHorizontal","paddingVertical","contentContainer","row","alignItems","justifyContent","paddingLeft","statusContainer","display","title","fontSize","fontWeight","maxWidth","ChannelPreviewMessengerWithContext","props","channel","formatLatestMessageDate","latestMessagePreview","maxUnreadCount","onSelect","PreviewAvatar","ChannelAvatar","PreviewMessage","ChannelPreviewMessage","PreviewStatus","ChannelPreviewStatus","PreviewTitle","ChannelPreviewTitle","PreviewUnreadCount","ChannelPreviewUnreadCount","PreviewMutedStatus","ChannelPreviewMutedStatus","unread","theme","channelPreview","colors","border","white_snow","displayName","Math","floor","isChannelMuted","muteStatus","muted","backgroundColor","borderBottomColor","id","MemoizedChannelPreviewMessengerWithContext","React","memo","ChannelPreviewMessenger"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { TouchableOpacity } from 'react-native-gesture-handler';\n\nimport { ChannelAvatar } from './ChannelAvatar';\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport { ChannelPreviewMessage } from './ChannelPreviewMessage';\nimport { ChannelPreviewMutedStatus } from './ChannelPreviewMutedStatus';\nimport { ChannelPreviewStatus } from './ChannelPreviewStatus';\nimport { ChannelPreviewTitle } from './ChannelPreviewTitle';\nimport { ChannelPreviewUnreadCount } from './ChannelPreviewUnreadCount';\nimport { useChannelPreviewDisplayName } from './hooks/useChannelPreviewDisplayName';\n\nimport type { LatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { vw } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n container: {\n borderBottomWidth: 1,\n flex: 1,\n flexDirection: 'row',\n paddingHorizontal: 8,\n paddingVertical: 12,\n },\n contentContainer: { flex: 1 },\n row: {\n alignItems: 'center',\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingLeft: 8,\n },\n statusContainer: {\n display: 'flex',\n flexDirection: 'row',\n },\n title: { fontSize: 14, fontWeight: '700' },\n});\n\nconst maxWidth = vw(80) - 16 - 40;\n\nexport type ChannelPreviewMessengerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'> &\n Pick<\n ChannelsContextValue<StreamChatGenerics>,\n | 'maxUnreadCount'\n | 'onSelect'\n | 'PreviewAvatar'\n | 'PreviewMessage'\n | 'PreviewMutedStatus'\n | 'PreviewStatus'\n | 'PreviewTitle'\n | 'PreviewUnreadCount'\n > & {\n /**\n * Latest message on a channel, formatted for preview\n *\n * e.g.,\n *\n * ```json\n * {\n * created_at: '' ,\n * messageObject: { ... },\n * previews: {\n * bold: true,\n * text: 'This is the message preview text'\n * },\n * status: 0 | 1 | 2 // read states of the latest message.\n * }\n * ```\n *\n * The read status is either of the following:\n *\n * 0: The message was not sent by the current user\n * 1: The message was sent by the current user and is unread\n * 2: The message was sent by the current user and is read\n *\n * @overrideType object\n */\n latestMessagePreview: LatestMessagePreview<StreamChatGenerics>;\n /**\n * Formatter function for date of latest message.\n * @param date Message date\n * @returns Formatted date string\n *\n * By default today's date is shown in 'HH:mm A' format and other dates\n * are displayed in 'DD/MM/YY' format. props.latestMessage.created_at is the\n * default formatted date. This default logic is part of ChannelPreview component.\n */\n formatLatestMessageDate?: (date: Date) => string;\n /** Number of unread messages on the channel */\n unread?: number;\n };\n\nconst ChannelPreviewMessengerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n channel,\n formatLatestMessageDate,\n latestMessagePreview,\n maxUnreadCount,\n onSelect,\n PreviewAvatar = ChannelAvatar,\n PreviewMessage = ChannelPreviewMessage,\n PreviewStatus = ChannelPreviewStatus,\n PreviewTitle = ChannelPreviewTitle,\n PreviewUnreadCount = ChannelPreviewUnreadCount,\n PreviewMutedStatus = ChannelPreviewMutedStatus,\n unread,\n } = props;\n\n const {\n theme: {\n channelPreview: { container, contentContainer, row, title },\n colors: { border, white_snow },\n },\n } = useTheme();\n\n const displayName = useChannelPreviewDisplayName(\n channel,\n Math.floor(maxWidth / ((title.fontSize || styles.title.fontSize) / 2)),\n );\n\n const isChannelMuted = channel.muteStatus().muted;\n\n return (\n <TouchableOpacity\n onPress={() => {\n if (onSelect) {\n onSelect(channel);\n }\n }}\n style={[\n styles.container,\n { backgroundColor: white_snow, borderBottomColor: border },\n container,\n ]}\n testID='channel-preview-button'\n >\n <PreviewAvatar channel={channel} />\n <View\n style={[styles.contentContainer, contentContainer]}\n testID={`channel-preview-content-${channel.id}`}\n >\n <View style={[styles.row, row]}>\n <PreviewTitle channel={channel} displayName={displayName} />\n <View style={[styles.statusContainer, row]}>\n <PreviewMutedStatus channel={channel} muted={isChannelMuted} />\n <PreviewUnreadCount channel={channel} maxUnreadCount={maxUnreadCount} unread={unread} />\n </View>\n </View>\n <View style={[styles.row, row]}>\n <PreviewMessage latestMessagePreview={latestMessagePreview} />\n <PreviewStatus\n channel={channel}\n formatLatestMessageDate={formatLatestMessageDate}\n latestMessagePreview={latestMessagePreview}\n />\n </View>\n </View>\n </TouchableOpacity>\n );\n};\n\nexport type ChannelPreviewMessengerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n Omit<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >\n> &\n Pick<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'channel' | 'latestMessagePreview'\n >;\n\nconst MemoizedChannelPreviewMessengerWithContext = React.memo(\n ChannelPreviewMessengerWithContext,\n) as typeof ChannelPreviewMessengerWithContext;\n\n/**\n * This UI component displays an individual preview item for each channel in a list. It also receives all props\n * from the ChannelPreview component.\n */\nexport const ChannelPreviewMessenger = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewMessengerProps<StreamChatGenerics>,\n) => {\n const {\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n } = useChannelsContext<StreamChatGenerics>();\n return (\n <MemoizedChannelPreviewMessengerWithContext\n {...{\n maxUnreadCount,\n onSelect,\n PreviewAvatar,\n PreviewMessage,\n PreviewMutedStatus,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n }}\n {...props}\n />\n );\n};\n\nChannelPreviewMessenger.displayName = 'ChannelPreviewMessenger{channelPreview}';\n"]}
|
|
@@ -11,6 +11,8 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
|
|
12
12
|
var _reactNative = require("react-native");
|
|
13
13
|
|
|
14
|
+
var _useLatestMessagePreview = require("./hooks/useLatestMessagePreview");
|
|
15
|
+
|
|
14
16
|
var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
|
|
15
17
|
|
|
16
18
|
var _icons = require("../../icons");
|
|
@@ -56,7 +58,7 @@ var ChannelPreviewStatus = function ChannelPreviewStatus(props) {
|
|
|
56
58
|
lineNumber: 50,
|
|
57
59
|
columnNumber: 5
|
|
58
60
|
}
|
|
59
|
-
}, status ===
|
|
61
|
+
}, status === _useLatestMessagePreview.MessageReadStatus.READ ? _react["default"].createElement(_icons.CheckAll, (0, _extends2["default"])({
|
|
60
62
|
pathFill: accent_blue
|
|
61
63
|
}, checkAllIcon, {
|
|
62
64
|
__self: _this,
|
|
@@ -65,7 +67,7 @@ var ChannelPreviewStatus = function ChannelPreviewStatus(props) {
|
|
|
65
67
|
lineNumber: 52,
|
|
66
68
|
columnNumber: 9
|
|
67
69
|
}
|
|
68
|
-
})) : status ===
|
|
70
|
+
})) : status === _useLatestMessagePreview.MessageReadStatus.UNREAD ? _react["default"].createElement(_icons.Check, (0, _extends2["default"])({
|
|
69
71
|
pathFill: grey
|
|
70
72
|
}, checkIcon, {
|
|
71
73
|
__self: _this,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ChannelPreviewStatus.tsx"],"names":["styles","StyleSheet","create","date","fontSize","marginLeft","textAlign","flexRow","flexDirection","ChannelPreviewStatus","props","formatLatestMessageDate","latestMessagePreview","theme","channelPreview","checkAllIcon","checkIcon","colors","accent_blue","grey","created_at","messageObject","latestMessageDate","Date","status","color"],"mappings":";;;;;;;;;AAAA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["ChannelPreviewStatus.tsx"],"names":["styles","StyleSheet","create","date","fontSize","marginLeft","textAlign","flexRow","flexDirection","ChannelPreviewStatus","props","formatLatestMessageDate","latestMessagePreview","theme","channelPreview","checkAllIcon","checkIcon","colors","accent_blue","grey","created_at","messageObject","latestMessageDate","Date","status","MessageReadStatus","READ","UNREAD","color"],"mappings":";;;;;;;;;AAAA;;AACA;;AAIA;;AAEA;;AACA;;;;;AAIA,IAAMA,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,IAAI,EAAE;AACJC,IAAAA,QAAQ,EAAE,EADN;AAEJC,IAAAA,UAAU,EAAE,CAFR;AAGJC,IAAAA,SAAS,EAAE;AAHP,GADyB;AAM/BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,aAAa,EAAE;AADR;AANsB,CAAlB,CAAf;;AAmBO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAGlCC,KAHkC,EAI/B;AAAA;;AACH,MAAQC,uBAAR,GAA0DD,KAA1D,CAAQC,uBAAR;AAAA,MAAiCC,oBAAjC,GAA0DF,KAA1D,CAAiCE,oBAAjC;;AACA,kBAKI,6BALJ;AAAA,kCACEC,KADF;AAAA,8CAEIC,cAFJ;AAAA,MAEsBC,YAFtB,yBAEsBA,YAFtB;AAAA,MAEoCC,SAFpC,yBAEoCA,SAFpC;AAAA,MAE+Cb,IAF/C,yBAE+CA,IAF/C;AAAA,8CAGIc,MAHJ;AAAA,MAGcC,WAHd,yBAGcA,WAHd;AAAA,MAG2BC,IAH3B,yBAG2BA,IAH3B;;AAOA,MAAMC,UAAU,4BAAGR,oBAAoB,CAACS,aAAxB,qBAAG,sBAAoCD,UAAvD;AACA,MAAME,iBAAiB,GAAGF,UAAU,GAAG,IAAIG,IAAJ,CAASH,UAAT,CAAH,GAA0B,IAAIG,IAAJ,EAA9D;AACA,MAAMC,MAAM,GAAGZ,oBAAoB,CAACY,MAApC;AAEA,SACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAExB,MAAM,CAACO,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGiB,MAAM,KAAKC,2CAAkBC,IAA7B,GACC,gCAAC,eAAD;AAAU,IAAA,QAAQ,EAAER;AAApB,KAAqCH,YAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KADD,GAEGS,MAAM,KAAKC,2CAAkBE,MAA7B,GACF,gCAAC,YAAD;AAAO,IAAA,QAAQ,EAAER;AAAjB,KAA2BH,SAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KADE,GAEA,IALN,EAME,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAChB,MAAM,CAACG,IAAR,EAAc;AAAEyB,MAAAA,KAAK,EAAET;AAAT,KAAd,EAA+BhB,IAA/B,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGQ,uBAAuB,IAAIW,iBAA3B,GACGX,uBAAuB,CAACW,iBAAD,CAD1B,GAEGV,oBAAoB,CAACQ,UAH3B,CANF,CADF;AAcD,CA/BM","sourcesContent":["import React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport type { ChannelPreviewMessengerPropsWithContext } from './ChannelPreviewMessenger';\nimport { MessageReadStatus } from './hooks/useLatestMessagePreview';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Check, CheckAll } from '../../icons';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst styles = StyleSheet.create({\n date: {\n fontSize: 12,\n marginLeft: 2,\n textAlign: 'right',\n },\n flexRow: {\n flexDirection: 'row',\n },\n});\n\nexport type ChannelPreviewStatusProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n ChannelPreviewMessengerPropsWithContext<StreamChatGenerics>,\n 'latestMessagePreview' | 'formatLatestMessageDate'\n> &\n Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreviewStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewStatusProps<StreamChatGenerics>,\n) => {\n const { formatLatestMessageDate, latestMessagePreview } = props;\n const {\n theme: {\n channelPreview: { checkAllIcon, checkIcon, date },\n colors: { accent_blue, grey },\n },\n } = useTheme();\n\n const created_at = latestMessagePreview.messageObject?.created_at;\n const latestMessageDate = created_at ? new Date(created_at) : new Date();\n const status = latestMessagePreview.status;\n\n return (\n <View style={styles.flexRow}>\n {status === MessageReadStatus.READ ? (\n <CheckAll pathFill={accent_blue} {...checkAllIcon} />\n ) : status === MessageReadStatus.UNREAD ? (\n <Check pathFill={grey} {...checkIcon} />\n ) : null}\n <Text style={[styles.date, { color: grey }, date]}>\n {formatLatestMessageDate && latestMessageDate\n ? formatLatestMessageDate(latestMessageDate)\n : latestMessagePreview.created_at}\n </Text>\n </View>\n );\n};\n"]}
|
|
@@ -3,7 +3,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useLatestMessagePreview = void 0;
|
|
6
|
+
exports.useLatestMessagePreview = exports.MessageReadStatus = void 0;
|
|
7
7
|
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
|
|
@@ -114,11 +114,24 @@ var getLatestMessageDisplayDate = function getLatestMessageDisplayDate(message,
|
|
|
114
114
|
return parserOutput;
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
+
var MessageReadStatus;
|
|
118
|
+
exports.MessageReadStatus = MessageReadStatus;
|
|
119
|
+
|
|
120
|
+
(function (MessageReadStatus) {
|
|
121
|
+
MessageReadStatus[MessageReadStatus["NOT_SENT_BY_CURRENT_USER"] = 0] = "NOT_SENT_BY_CURRENT_USER";
|
|
122
|
+
MessageReadStatus[MessageReadStatus["UNREAD"] = 1] = "UNREAD";
|
|
123
|
+
MessageReadStatus[MessageReadStatus["READ"] = 2] = "READ";
|
|
124
|
+
})(MessageReadStatus || (exports.MessageReadStatus = MessageReadStatus = {}));
|
|
125
|
+
|
|
117
126
|
var getLatestMessageReadStatus = function getLatestMessageReadStatus(channel, client, message, readEvents) {
|
|
118
127
|
var _message$user5;
|
|
119
128
|
|
|
120
129
|
var currentUserId = client.userID;
|
|
121
|
-
|
|
130
|
+
|
|
131
|
+
if (!message || currentUserId !== ((_message$user5 = message.user) == null ? void 0 : _message$user5.id) || readEvents === false) {
|
|
132
|
+
return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;
|
|
133
|
+
}
|
|
134
|
+
|
|
122
135
|
var readList = channel.state.read;
|
|
123
136
|
|
|
124
137
|
if (currentUserId) {
|
|
@@ -129,7 +142,7 @@ var getLatestMessageReadStatus = function getLatestMessageReadStatus(channel, cl
|
|
|
129
142
|
return Object.values(readList).some(function (_ref) {
|
|
130
143
|
var last_read = _ref.last_read;
|
|
131
144
|
return messageUpdatedAt && messageUpdatedAt < last_read;
|
|
132
|
-
}) ?
|
|
145
|
+
}) ? MessageReadStatus.READ : MessageReadStatus.UNREAD;
|
|
133
146
|
};
|
|
134
147
|
|
|
135
148
|
var getLatestMessagePreview = function getLatestMessagePreview(params) {
|
|
@@ -149,7 +162,7 @@ var getLatestMessagePreview = function getLatestMessagePreview(params) {
|
|
|
149
162
|
bold: false,
|
|
150
163
|
text: t('Nothing yet...')
|
|
151
164
|
}],
|
|
152
|
-
status:
|
|
165
|
+
status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER
|
|
153
166
|
};
|
|
154
167
|
}
|
|
155
168
|
|
|
@@ -187,7 +200,7 @@ var useLatestMessagePreview = function useLatestMessagePreview(channel, forceUpd
|
|
|
187
200
|
bold: false,
|
|
188
201
|
text: ''
|
|
189
202
|
}],
|
|
190
|
-
status:
|
|
203
|
+
status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER
|
|
191
204
|
}),
|
|
192
205
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
193
206
|
latestMessagePreview = _useState4[0],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useLatestMessagePreview.ts"],"names":["getLatestMessageDisplayText","channel","client","message","t","bold","text","isMessageTypeDeleted","type","currentUserId","userID","messageOwnerId","user","id","members","Object","keys","state","owner","length","name","username","ownerText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","Array","isArray","mentioned_users","reduce","acc","cur","userName","regEx","RegExp","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isSame","Date","format","getLatestMessageReadStatus","readEvents","readList","read","messageUpdatedAt","updated_at","undefined","values","some","last_read","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","useLatestMessagePreview","forceUpdate","channelConfigExists","getConfig","channelLastMessageString","setReadEvents","latestMessagePreview","setLatestMessagePreview","readStatus","read_events"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client.userID;\n const messageOwnerId = message.user?.id;\n const members = Object.keys(channel.state.members);\n const owner =\n messageOwnerId === currentUserId\n ? t('You')\n : members.length > 2\n ? message.user?.name || message.user?.username || message.user?.id || ''\n : '';\n const ownerText = owner ? `${owner === t('You') ? '' : '@'}${owner}: ` : '';\n const boldOwner = ownerText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = Array.isArray(message.mentioned_users)\n ? message.mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: ownerText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\n/**\n * set up enum\n * 0 = latest message is not current user's message\n * 1 = nobody has read latest message which is the current user's message\n * 2 = someone has read latest message which is the current user's message\n */\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n) => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) return 0;\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? 2\n : 1;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: 0,\n };\n }\n const message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: 0,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["useLatestMessagePreview.ts"],"names":["getLatestMessageDisplayText","channel","client","message","t","bold","text","isMessageTypeDeleted","type","currentUserId","userID","messageOwnerId","user","id","members","Object","keys","state","owner","length","name","username","ownerText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","Array","isArray","mentioned_users","reduce","acc","cur","userName","regEx","RegExp","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isSame","Date","format","MessageReadStatus","getLatestMessageReadStatus","readEvents","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","useLatestMessagePreview","forceUpdate","channelConfigExists","getConfig","channelLastMessageString","setReadEvents","latestMessagePreview","setLatestMessagePreview","readStatus","read_events"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client.userID;\n const messageOwnerId = message.user?.id;\n const members = Object.keys(channel.state.members);\n const owner =\n messageOwnerId === currentUserId\n ? t('You')\n : members.length > 2\n ? message.user?.name || message.user?.username || message.user?.id || ''\n : '';\n const ownerText = owner ? `${owner === t('You') ? '' : '@'}${owner}: ` : '';\n const boldOwner = ownerText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = Array.isArray(message.mentioned_users)\n ? message.mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: ownerText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: ownerText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\nexport enum MessageReadStatus {\n NOT_SENT_BY_CURRENT_USER = 0,\n UNREAD = 1,\n READ = 2,\n}\n\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n): MessageReadStatus => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) {\n return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;\n }\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? MessageReadStatus.READ\n : MessageReadStatus.UNREAD;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n };\n }\n const message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"]}
|
|
@@ -197,6 +197,19 @@ Object.keys(_OverlayProvider).forEach(function (key) {
|
|
|
197
197
|
});
|
|
198
198
|
});
|
|
199
199
|
|
|
200
|
+
var _OwnCapabilitiesContext = require("./ownCapabilitiesContext/OwnCapabilitiesContext");
|
|
201
|
+
|
|
202
|
+
Object.keys(_OwnCapabilitiesContext).forEach(function (key) {
|
|
203
|
+
if (key === "default" || key === "__esModule") return;
|
|
204
|
+
if (key in exports && exports[key] === _OwnCapabilitiesContext[key]) return;
|
|
205
|
+
Object.defineProperty(exports, key, {
|
|
206
|
+
enumerable: true,
|
|
207
|
+
get: function get() {
|
|
208
|
+
return _OwnCapabilitiesContext[key];
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
|
|
200
213
|
var _SuggestionsContext = require("./suggestionsContext/SuggestionsContext");
|
|
201
214
|
|
|
202
215
|
Object.keys(_SuggestionsContext).forEach(function (key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './attachmentPickerContext/AttachmentPickerContext';\nexport * from './channelContext/ChannelContext';\nexport * from './channelsContext/ChannelsContext';\nexport * from './chatContext/ChatContext';\nexport * from './imageGalleryContext/ImageGalleryContext';\nexport * from './keyboardContext/KeyboardContext';\nexport * from './messageContext/MessageContext';\nexport * from './messageInputContext/hooks/useCreateMessageInputContext';\nexport * from './messageInputContext/hooks/useMessageDetailsForState';\nexport * from './messageInputContext/MessageInputContext';\nexport * from './messageOverlayContext/MessageOverlayContext';\nexport * from './messagesContext/MessagesContext';\nexport * from './paginatedMessageListContext/PaginatedMessageListContext';\nexport * from './overlayContext/OverlayContext';\nexport * from './overlayContext/OverlayProvider';\nexport * from './suggestionsContext/SuggestionsContext';\nexport * from './themeContext/ThemeContext';\nexport * from './themeContext/utils/theme';\nexport * from './threadContext/ThreadContext';\nexport * from './translationContext/TranslationContext';\nexport * from './typingContext/TypingContext';\nexport * from './utils/getDisplayName';\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './attachmentPickerContext/AttachmentPickerContext';\nexport * from './channelContext/ChannelContext';\nexport * from './channelsContext/ChannelsContext';\nexport * from './chatContext/ChatContext';\nexport * from './imageGalleryContext/ImageGalleryContext';\nexport * from './keyboardContext/KeyboardContext';\nexport * from './messageContext/MessageContext';\nexport * from './messageInputContext/hooks/useCreateMessageInputContext';\nexport * from './messageInputContext/hooks/useMessageDetailsForState';\nexport * from './messageInputContext/MessageInputContext';\nexport * from './messageOverlayContext/MessageOverlayContext';\nexport * from './messagesContext/MessagesContext';\nexport * from './paginatedMessageListContext/PaginatedMessageListContext';\nexport * from './overlayContext/OverlayContext';\nexport * from './overlayContext/OverlayProvider';\nexport * from './ownCapabilitiesContext/OwnCapabilitiesContext';\nexport * from './suggestionsContext/SuggestionsContext';\nexport * from './themeContext/ThemeContext';\nexport * from './themeContext/utils/theme';\nexport * from './threadContext/ThreadContext';\nexport * from './translationContext/TranslationContext';\nexport * from './typingContext/TypingContext';\nexport * from './utils/getDisplayName';\n"]}
|
package/lib/module/version.json
CHANGED
|
@@ -16,10 +16,16 @@ export declare type ChannelPreviewMessengerPropsWithContext<StreamChatGenerics e
|
|
|
16
16
|
* bold: true,
|
|
17
17
|
* text: 'This is the message preview text'
|
|
18
18
|
* },
|
|
19
|
-
* status: 0 | 1 | 2 // read states of latest message.
|
|
19
|
+
* status: 0 | 1 | 2 // read states of the latest message.
|
|
20
20
|
* }
|
|
21
21
|
* ```
|
|
22
22
|
*
|
|
23
|
+
* The read status is either of the following:
|
|
24
|
+
*
|
|
25
|
+
* 0: The message was not sent by the current user
|
|
26
|
+
* 1: The message was sent by the current user and is unread
|
|
27
|
+
* 2: The message was sent by the current user and is read
|
|
28
|
+
*
|
|
23
29
|
* @overrideType object
|
|
24
30
|
*/
|
|
25
31
|
latestMessagePreview: LatestMessagePreview<StreamChatGenerics>;
|
|
@@ -10,6 +10,11 @@ export declare type LatestMessagePreview<StreamChatGenerics extends DefaultStrea
|
|
|
10
10
|
}[];
|
|
11
11
|
status: number;
|
|
12
12
|
};
|
|
13
|
+
export declare enum MessageReadStatus {
|
|
14
|
+
NOT_SENT_BY_CURRENT_USER = 0,
|
|
15
|
+
UNREAD = 1,
|
|
16
|
+
READ = 2
|
|
17
|
+
}
|
|
13
18
|
/**
|
|
14
19
|
* Hook to set the display preview for latest message on channel.
|
|
15
20
|
*
|
|
@@ -13,6 +13,7 @@ export * from './messagesContext/MessagesContext';
|
|
|
13
13
|
export * from './paginatedMessageListContext/PaginatedMessageListContext';
|
|
14
14
|
export * from './overlayContext/OverlayContext';
|
|
15
15
|
export * from './overlayContext/OverlayProvider';
|
|
16
|
+
export * from './ownCapabilitiesContext/OwnCapabilitiesContext';
|
|
16
17
|
export * from './suggestionsContext/SuggestionsContext';
|
|
17
18
|
export * from './themeContext/ThemeContext';
|
|
18
19
|
export * from './themeContext/utils/theme';
|
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.1.
|
|
4
|
+
"version": "4.1.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -73,10 +73,16 @@ export type ChannelPreviewMessengerPropsWithContext<
|
|
|
73
73
|
* bold: true,
|
|
74
74
|
* text: 'This is the message preview text'
|
|
75
75
|
* },
|
|
76
|
-
* status: 0 | 1 | 2 // read states of latest message.
|
|
76
|
+
* status: 0 | 1 | 2 // read states of the latest message.
|
|
77
77
|
* }
|
|
78
78
|
* ```
|
|
79
79
|
*
|
|
80
|
+
* The read status is either of the following:
|
|
81
|
+
*
|
|
82
|
+
* 0: The message was not sent by the current user
|
|
83
|
+
* 1: The message was sent by the current user and is unread
|
|
84
|
+
* 2: The message was sent by the current user and is read
|
|
85
|
+
*
|
|
80
86
|
* @overrideType object
|
|
81
87
|
*/
|
|
82
88
|
latestMessagePreview: LatestMessagePreview<StreamChatGenerics>;
|
|
@@ -2,8 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import { StyleSheet, Text, View } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import type { ChannelPreviewProps } from './ChannelPreview';
|
|
5
|
-
|
|
6
5
|
import type { ChannelPreviewMessengerPropsWithContext } from './ChannelPreviewMessenger';
|
|
6
|
+
import { MessageReadStatus } from './hooks/useLatestMessagePreview';
|
|
7
7
|
|
|
8
8
|
import { useTheme } from '../../contexts/themeContext/ThemeContext';
|
|
9
9
|
import { Check, CheckAll } from '../../icons';
|
|
@@ -48,9 +48,9 @@ export const ChannelPreviewStatus = <
|
|
|
48
48
|
|
|
49
49
|
return (
|
|
50
50
|
<View style={styles.flexRow}>
|
|
51
|
-
{status ===
|
|
51
|
+
{status === MessageReadStatus.READ ? (
|
|
52
52
|
<CheckAll pathFill={accent_blue} {...checkAllIcon} />
|
|
53
|
-
) : status ===
|
|
53
|
+
) : status === MessageReadStatus.UNREAD ? (
|
|
54
54
|
<Check pathFill={grey} {...checkIcon} />
|
|
55
55
|
) : null}
|
|
56
56
|
<Text style={[styles.date, { color: grey }, date]}>
|
|
@@ -115,12 +115,12 @@ const getLatestMessageDisplayDate = <
|
|
|
115
115
|
return parserOutput;
|
|
116
116
|
};
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
118
|
+
export enum MessageReadStatus {
|
|
119
|
+
NOT_SENT_BY_CURRENT_USER = 0,
|
|
120
|
+
UNREAD = 1,
|
|
121
|
+
READ = 2,
|
|
122
|
+
}
|
|
123
|
+
|
|
124
124
|
const getLatestMessageReadStatus = <
|
|
125
125
|
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
|
|
126
126
|
>(
|
|
@@ -128,9 +128,11 @@ const getLatestMessageReadStatus = <
|
|
|
128
128
|
client: StreamChat<StreamChatGenerics>,
|
|
129
129
|
message: LatestMessage<StreamChatGenerics> | undefined,
|
|
130
130
|
readEvents: boolean,
|
|
131
|
-
) => {
|
|
131
|
+
): MessageReadStatus => {
|
|
132
132
|
const currentUserId = client.userID;
|
|
133
|
-
if (!message || currentUserId !== message.user?.id || readEvents === false)
|
|
133
|
+
if (!message || currentUserId !== message.user?.id || readEvents === false) {
|
|
134
|
+
return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;
|
|
135
|
+
}
|
|
134
136
|
|
|
135
137
|
const readList = channel.state.read;
|
|
136
138
|
if (currentUserId) {
|
|
@@ -146,8 +148,8 @@ const getLatestMessageReadStatus = <
|
|
|
146
148
|
return Object.values(readList).some(
|
|
147
149
|
({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,
|
|
148
150
|
)
|
|
149
|
-
?
|
|
150
|
-
:
|
|
151
|
+
? MessageReadStatus.READ
|
|
152
|
+
: MessageReadStatus.UNREAD;
|
|
151
153
|
};
|
|
152
154
|
|
|
153
155
|
const getLatestMessagePreview = <
|
|
@@ -176,7 +178,7 @@ const getLatestMessagePreview = <
|
|
|
176
178
|
text: t('Nothing yet...'),
|
|
177
179
|
},
|
|
178
180
|
],
|
|
179
|
-
status:
|
|
181
|
+
status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,
|
|
180
182
|
};
|
|
181
183
|
}
|
|
182
184
|
const message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;
|
|
@@ -229,7 +231,7 @@ export const useLatestMessagePreview = <
|
|
|
229
231
|
text: '',
|
|
230
232
|
},
|
|
231
233
|
],
|
|
232
|
-
status:
|
|
234
|
+
status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,
|
|
233
235
|
});
|
|
234
236
|
|
|
235
237
|
const readStatus = getLatestMessageReadStatus(
|
package/src/contexts/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ export * from './messagesContext/MessagesContext';
|
|
|
13
13
|
export * from './paginatedMessageListContext/PaginatedMessageListContext';
|
|
14
14
|
export * from './overlayContext/OverlayContext';
|
|
15
15
|
export * from './overlayContext/OverlayProvider';
|
|
16
|
+
export * from './ownCapabilitiesContext/OwnCapabilitiesContext';
|
|
16
17
|
export * from './suggestionsContext/SuggestionsContext';
|
|
17
18
|
export * from './themeContext/ThemeContext';
|
|
18
19
|
export * from './themeContext/utils/theme';
|
package/src/version.json
CHANGED