@tellescope/chat 0.0.32 → 0.0.36

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": "0.0.32",
3
+ "version": "0.0.36",
4
4
  "description": "",
5
5
  "main": "./lib/cjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -33,13 +33,13 @@
33
33
  "@fontsource/roboto": "^4.5.1",
34
34
  "@mui/icons-material": "^5.0.1",
35
35
  "@mui/material": "^5.0.2",
36
- "@tellescope/constants": "^0.0.32",
37
- "@tellescope/react-components": "^0.0.32",
38
- "@tellescope/sdk": "^0.0.32",
39
- "@tellescope/types-client": "^0.0.32",
40
- "@tellescope/types-models": "^0.0.32",
41
- "@tellescope/types-utilities": "^0.0.32",
42
- "@tellescope/utilities": "^0.0.32",
36
+ "@tellescope/constants": "^0.0.36",
37
+ "@tellescope/react-components": "^0.0.36",
38
+ "@tellescope/sdk": "^0.0.36",
39
+ "@tellescope/types-client": "^0.0.36",
40
+ "@tellescope/types-models": "^0.0.36",
41
+ "@tellescope/types-utilities": "^0.0.36",
42
+ "@tellescope/utilities": "^0.0.36",
43
43
  "@typescript-eslint/eslint-plugin": "^4.33.0",
44
44
  "@typescript-eslint/parser": "^4.33.0",
45
45
  "eslint": "^7.32.0",
@@ -50,7 +50,7 @@
50
50
  "react": "^17.0.2",
51
51
  "react-dom": "^17.0.2"
52
52
  },
53
- "gitHead": "2f62f900ab1bc1ce471424d95eafd2c11bbae9f6",
53
+ "gitHead": "edbbd010db89b775aed1337bf9708e749a8bbb4c",
54
54
  "publishConfig": {
55
55
  "access": "public"
56
56
  }
package/src/chat.tsx CHANGED
@@ -1,5 +1,9 @@
1
1
  import React, { useCallback, useState, CSSProperties } from "react"
2
2
 
3
+ import {
4
+ DisplayPicture,
5
+ IN_REACT_WEB,
6
+ } from "@tellescope/react-components"
3
7
  import {
4
8
  List,
5
9
  Flex,
@@ -17,14 +21,18 @@ import {
17
21
  import {
18
22
  LoadingLinear,
19
23
  Resolver,
24
+ value_is_loaded,
20
25
  } from "@tellescope/react-components/lib/esm/loading"
21
26
  import {
22
27
  useSession,
23
28
  useEnduserSession,
29
+ useResolvedSession,
24
30
  } from "@tellescope/react-components/lib/esm/authentication"
25
31
  import {
26
32
  useChatRooms,
27
33
  useChats,
34
+ useChatRoomDisplayInfo,
35
+ ChatRoomDisplayInfo,
28
36
  } from "@tellescope/react-components/lib/esm/state"
29
37
  import {
30
38
  useEndusers,
@@ -68,39 +76,48 @@ export {
68
76
  user_display_name, // for convenience
69
77
  }
70
78
 
71
- const defaultMessagesStyle: CSSProperties = {
72
- borderRadius: 5,
79
+ const MESSAGE_BORDER_RADIUS = 25
80
+
81
+ const defaultSentContainerStyle: CSSProperties = {
82
+ margin: 5,
73
83
  }
74
- const baseMessageStyle = {
75
- borderRadius: 25,
76
- paddingRight: 10,
77
- paddingLeft: 10,
84
+ const defaultReceivedContainerStyle: CSSProperties = {
78
85
  margin: 5,
86
+ }
87
+
88
+ const baseMessageStyle: CSSProperties = {
89
+ borderRadius: MESSAGE_BORDER_RADIUS,
79
90
  maxWidth: '80%',
91
+ paddingRight: 10,
92
+ paddingLeft: 10,
93
+ paddingTop: 6,
94
+ paddingBottom: 6,
80
95
  }
81
96
  const defaultSentStyle: CSSProperties = {
82
97
  ...baseMessageStyle,
83
- justifyContent: 'flex-end',
84
98
  marginLeft: 'auto',
99
+ marginRight: 5,
85
100
  backgroundColor: PRIMARY_HEX,
86
101
  }
87
102
  const defaultReceivedStyle: CSSProperties = {
88
103
  ...baseMessageStyle,
89
- justifyContent: 'flex-start',
90
104
  marginRight: 'auto',
105
+ marginLeft: 5,
91
106
  backgroundColor: "#444444",
92
107
  }
108
+
93
109
  const baseTextStyle = {
94
110
  color: "#ffffff",
95
- padding: 4,
96
111
  }
97
- const defaultTextSentStyle: CSSProperties = {
112
+ const defaultSentTextStyle = {
98
113
  ...baseTextStyle,
99
- textAlign: 'right',
114
+ marginRight: 5,
115
+ marginLeft: 5,
100
116
  }
101
- const defaultTextReceivedStyle: CSSProperties = {
117
+ const defaultReceivedTextStyle = {
102
118
  ...baseTextStyle,
103
- textAlign: 'left',
119
+ marginRight: 5,
120
+ marginLeft: 5,
104
121
  }
105
122
 
106
123
  export interface MessagesHeaderProps {
@@ -117,16 +134,71 @@ const MessagesHeader = ({ room, resolveSenderName, ...p}: MessagesHeaderProps) =
117
134
  </Flex>
118
135
  )
119
136
 
120
- interface Messages_T {
137
+ interface MessageStyles {
138
+ receivedMessageContainerStyle?: CSSProperties,
139
+ sentMessageContainerStyle?: CSSProperties,
140
+ receivedMessageStyle?: CSSProperties,
141
+ receivedMessageTextStyle?: CSSProperties,
142
+ sentMessageStyle?: CSSProperties,
143
+ sentMessageTextStyle?: CSSProperties,
144
+ }
145
+
146
+ interface MessageProps extends MessageStyles {
147
+ message: ChatMessage,
148
+ iconSize?: number,
149
+ }
150
+ export const Message = ({
151
+ message,
152
+ iconSize=30,
153
+ sentMessageContainerStyle=defaultSentContainerStyle,
154
+ receivedMessageContainerStyle=defaultReceivedContainerStyle,
155
+ sentMessageStyle=defaultSentStyle,
156
+ receivedMessageStyle=defaultReceivedStyle,
157
+ sentMessageTextStyle=defaultSentTextStyle,
158
+ receivedMessageTextStyle=defaultReceivedTextStyle,
159
+ }: MessageProps) => {
160
+ const session = useResolvedSession()
161
+ const chatUserId = session.userInfo.id
162
+
163
+ const [displayInfo] = useChatRoomDisplayInfo(message.roomId, session.type)
164
+ const displayInfoLookup = value_is_loaded(displayInfo) ? displayInfo.value : {} as ChatRoomDisplayInfo
165
+
166
+ const displayPicture = (
167
+ <DisplayPicture
168
+ user={displayInfoLookup[message.senderId ?? ''] ?? { id: message.senderId, avatar: '' }}
169
+ size={iconSize} style={{ position: 'relative' }}
170
+ />
171
+ )
172
+
173
+ const textBGStyle = message.senderId === chatUserId ? sentMessageStyle : receivedMessageStyle
174
+ const textStyle = message.senderId === chatUserId ? sentMessageTextStyle : receivedMessageTextStyle
175
+
176
+ return (
177
+ <Flex style={{ margin: 5 }}>
178
+ {message.senderId !== chatUserId && displayPicture}
179
+ {IN_REACT_WEB ? (
180
+ <Typography component="div" style={{ ...textStyle, ...textBGStyle }}>
181
+ {message.message}
182
+ </Typography>
183
+ )
184
+ : (
185
+ <Flex style={{ ...textBGStyle }}>
186
+ <Typography component="div" style={{ ...textStyle }}>
187
+ {message.message}
188
+ </Typography>
189
+ </Flex>
190
+ )}
191
+ {message.senderId === chatUserId && displayPicture}
192
+ </Flex>
193
+ )
194
+ }
195
+
196
+ interface Messages_T extends MessageStyles {
121
197
  resolveSenderName?: (room: ChatRoom) => React.ReactNode;
122
198
  messages: LoadedData<ChatMessage[]>,
123
199
  chatUserId: string,
124
200
  Header?: React.JSXElementConstructor<MessagesHeaderProps>,
125
201
  headerProps?: MessagesHeaderProps,
126
- receivedMessageStyle?: CSSProperties,
127
- receivedMessageTextStyle?: CSSProperties,
128
- sentMessageStyle?: CSSProperties,
129
- sentMessageTextStyle?: CSSProperties,
130
202
  }
131
203
  export const Messages = ({
132
204
  resolveSenderName,
@@ -134,21 +206,14 @@ export const Messages = ({
134
206
  chatUserId,
135
207
  Header=MessagesHeader,
136
208
  headerProps,
137
- style=defaultMessagesStyle,
138
- receivedMessageStyle=defaultReceivedStyle,
139
- receivedMessageTextStyle=defaultTextReceivedStyle,
140
- sentMessageStyle=defaultSentStyle,
141
- sentMessageTextStyle=defaultTextSentStyle,
209
+ style,
210
+ ...messageStyles
142
211
  }: Messages_T & Styled) => (
143
212
  <LoadingLinear data={messages} render={messages => (
144
213
  <Flex column flex={1}>
145
214
  {Header && <Header {...headerProps}/>}
146
- <List reverse style={style} items={messages} render={(message) => (
147
- <Flex key={message.id} style={message.senderId === chatUserId ? sentMessageStyle : receivedMessageStyle}>
148
- <Typography style={message.senderId === chatUserId ? sentMessageTextStyle : receivedMessageTextStyle}>
149
- {message.message}
150
- </Typography>
151
- </Flex>
215
+ <List reverse style={style} items={messages} render={message => (
216
+ <Message key={message.id} message={message} {...messageStyles}/>
152
217
  )}/>
153
218
  </Flex>
154
219
  )}/>