@tellescope/chat 1.23.4 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tellescope/chat",
3
- "version": "1.23.4",
3
+ "version": "1.24.0",
4
4
  "description": "",
5
5
  "main": "./lib/cjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -34,13 +34,13 @@
34
34
  "@fontsource/roboto": "^4.5.1",
35
35
  "@mui/icons-material": "^5.0.1",
36
36
  "@mui/material": "^5.0.2",
37
- "@tellescope/constants": "^1.23.4",
38
- "@tellescope/react-components": "^1.23.4",
39
- "@tellescope/sdk": "^1.23.4",
40
- "@tellescope/types-client": "^1.23.4",
41
- "@tellescope/types-models": "^1.23.4",
37
+ "@tellescope/constants": "^1.24.0",
38
+ "@tellescope/react-components": "^1.24.0",
39
+ "@tellescope/sdk": "^1.24.0",
40
+ "@tellescope/types-client": "^1.24.0",
41
+ "@tellescope/types-models": "^1.24.0",
42
42
  "@tellescope/types-utilities": "^1.5.1",
43
- "@tellescope/utilities": "^1.23.4",
43
+ "@tellescope/utilities": "^1.24.0",
44
44
  "@typescript-eslint/eslint-plugin": "^4.33.0",
45
45
  "@typescript-eslint/parser": "^4.33.0",
46
46
  "eslint": "^7.32.0",
@@ -51,7 +51,7 @@
51
51
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
52
52
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
53
53
  },
54
- "gitHead": "082ddd0f17665871fd0fba7abfe74b64db6a83a5",
54
+ "gitHead": "719e54ce57bdb212d4d6eae9a272218948884abb",
55
55
  "publishConfig": {
56
56
  "access": "public"
57
57
  }
package/src/chat.tsx CHANGED
@@ -48,6 +48,7 @@ import {
48
48
 
49
49
  import {
50
50
  ActivityOptions,
51
+ formatted_date,
51
52
  user_display_name, user_is_active,
52
53
  } from "@tellescope/utilities"
53
54
 
@@ -132,6 +133,7 @@ interface MessageProps extends MessageStyles {
132
133
  message: ChatMessage,
133
134
  iconSize?: number,
134
135
  imageDimensions?: ImageDimensions,
136
+ showDate?: boolean,
135
137
  }
136
138
  export const Message = ({
137
139
  message,
@@ -146,6 +148,7 @@ export const Message = ({
146
148
  receivedMessageTextStyle=defaultReceivedTextStyle,
147
149
  imageDimensions,
148
150
  style,
151
+ showDate,
149
152
  }: MessageProps & Styled) => {
150
153
  const session = useResolvedSession()
151
154
  const chatUserId = session.userInfo.id
@@ -215,10 +218,19 @@ export const Message = ({
215
218
  )
216
219
 
217
220
  return (
218
- <Flex style={{ margin: 5, flexWrap: 'nowrap', ...style }}>
219
- {message.senderId !== chatUserId && displayPicture}
220
- {messageComponent}
221
- {message.senderId === chatUserId && displayPicture}
221
+ <Flex column>
222
+ {showDate && (
223
+ <Flex alignSelf="center">
224
+ {formatted_date(new Date(message.createdAt))}
225
+ </Flex>
226
+ )
227
+
228
+ }
229
+ <Flex style={{ margin: 5, flexWrap: 'nowrap', ...style }}>
230
+ {message.senderId !== chatUserId && displayPicture}
231
+ {messageComponent}
232
+ {message.senderId === chatUserId && displayPicture}
233
+ </Flex>
222
234
  </Flex>
223
235
  )
224
236
  }
@@ -253,7 +265,7 @@ export const MessageAttachments = ({ message, chatUserId, imageDimensions } : {
253
265
 
254
266
  export type MessageTheme = { theme?: string }
255
267
 
256
- interface Messages_T extends MessageStyles {
268
+ export interface Messages_T extends MessageStyles {
257
269
  resolveSenderName?: (room: ChatRoom) => React.ReactNode;
258
270
  messages: LoadedData<ChatMessage[]>,
259
271
  chatUserId: string,
@@ -271,16 +283,29 @@ export const MessagesWithHeader = ({
271
283
  imageDimensions,
272
284
  ...messageStyles
273
285
  }: Omit<Messages_T, 'markRead'> & Styled & { Header?: React.JSXElementConstructor<MessagesHeaderProps> }) => (
274
- <LoadingLinear data={messages} render={messages => (
275
- <Flex column flex={1} style={{ ...style, overflowY: 'scroll' }}>
276
- {Header && <Header {...headerProps}/>}
277
- <List reverse items={messages} render={(message, i) => (
278
- <Flex column>
279
- <Message message={message} imageDimensions={imageDimensions} {...messageStyles} />
286
+ <LoadingLinear data={messages} render={messages => {
287
+ let lastDate = 0
288
+ return (
289
+ <Flex column flex={1} style={{ ...style, overflowY: 'scroll' }}>
290
+ {Header && <Header {...headerProps}/>}
291
+ <List reverse items={messages} render={(message) => {
292
+ // show after 10+ minute exchanges
293
+ const timestamp = new Date(message.createdAt).getTime()
294
+ const shouldShowDate = timestamp > (lastDate + 1000 * 60 * 10 )
295
+ if (shouldShowDate) {
296
+ lastDate = timestamp
297
+ }
298
+ return (
299
+ <Flex column>
300
+ <Message message={message} imageDimensions={imageDimensions} showDate={shouldShowDate} {...messageStyles} />
301
+ </Flex>
302
+ )
303
+ }}
304
+ />
280
305
  </Flex>
281
- )}/>
282
- </Flex>
283
- )}/>
306
+ )}
307
+ }
308
+ />
284
309
  )
285
310
 
286
311
  export const Messages = ({
@@ -312,13 +337,30 @@ export const Messages = ({
312
337
  .catch(console.error)
313
338
  }, [session, markRead, messages, markReadRef, updateRoom])
314
339
 
315
-
316
340
  return (
317
- <LoadingLinear data={messages} render={messages => (
318
- <List reverse items={messages} style={style} render={(message) => (
319
- <Message message={message} imageDimensions={imageDimensions} {...messageStyles} />
320
- )}/>
321
- )}/>
341
+ <LoadingLinear data={messages} render={_messages => {
342
+ const sorted = _messages.sort((m1, m2) => new Date(m1.createdAt).getTime() - new Date(m2.createdAt).getTime())
343
+
344
+ let lastDate = 0
345
+
346
+ const showDateForMessage = {} as Record<string, boolean>
347
+ for (const message of sorted) {
348
+ const timestamp = new Date(message.createdAt).getTime()
349
+ const showDate = timestamp > (lastDate + 1000 * 60 * 10 )
350
+ if (showDate) {
351
+ lastDate = timestamp
352
+ }
353
+ showDateForMessage[message.id] = showDate
354
+ }
355
+
356
+ return (
357
+ <List items={sorted}
358
+ style={style} render={(message) => (
359
+ <Message message={message} imageDimensions={imageDimensions} showDate={showDateForMessage[message.id]} {...messageStyles} />
360
+ )}
361
+ />
362
+ )}}
363
+ />
322
364
  )
323
365
  }
324
366
 
@@ -361,7 +403,6 @@ export const resolve_chat_room_name = (room: ChatRoom, displayInfo: { [index: st
361
403
  return user_display_name(displayInfo[room?.enduserIds?.[0] ?? room.creator ?? ''])
362
404
  }
363
405
  if (userType === 'enduser') {
364
- console.log(room.recentSender, room.creator, displayInfo[room.creator])
365
406
  return user_display_name(displayInfo[room?.userIds?.[0] ?? room.creator ?? ''])
366
407
  }
367
408
  return ''