@tellescope/chat 0.0.31 → 0.0.35

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.31",
3
+ "version": "0.0.35",
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.31",
37
- "@tellescope/react-components": "^0.0.31",
38
- "@tellescope/sdk": "^0.0.31",
39
- "@tellescope/types-client": "^0.0.31",
40
- "@tellescope/types-models": "^0.0.31",
41
- "@tellescope/types-utilities": "^0.0.31",
42
- "@tellescope/utilities": "^0.0.31",
36
+ "@tellescope/constants": "^0.0.35",
37
+ "@tellescope/react-components": "^0.0.35",
38
+ "@tellescope/sdk": "^0.0.35",
39
+ "@tellescope/types-client": "^0.0.35",
40
+ "@tellescope/types-models": "^0.0.35",
41
+ "@tellescope/types-utilities": "^0.0.35",
42
+ "@tellescope/utilities": "^0.0.35",
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": "1e368271d475f0c05f53875c24d15614df499c91",
53
+ "gitHead": "1f046842cae8e5d2344312f2d49d905d4bcca786",
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,73 @@ 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
+ const inBrowser = typeof window !== undefined
177
+
178
+ return (
179
+ <Flex style={{ margin: 5 }}>
180
+ {message.senderId !== chatUserId && displayPicture}
181
+ {IN_REACT_WEB ? (
182
+ <Typography component="div" style={{ ...textStyle, ...textBGStyle }}>
183
+ {message.message}
184
+ </Typography>
185
+ )
186
+ : (
187
+ <Flex style={{ ...textBGStyle }}>
188
+ <Typography component="div" style={{ ...textStyle }}>
189
+ {message.message}
190
+ </Typography>
191
+ </Flex>
192
+ )}
193
+ {message.senderId === chatUserId && displayPicture}
194
+ </Flex>
195
+ )
196
+ }
197
+
198
+ interface Messages_T extends MessageStyles {
121
199
  resolveSenderName?: (room: ChatRoom) => React.ReactNode;
122
200
  messages: LoadedData<ChatMessage[]>,
123
201
  chatUserId: string,
124
202
  Header?: React.JSXElementConstructor<MessagesHeaderProps>,
125
203
  headerProps?: MessagesHeaderProps,
126
- receivedMessageStyle?: CSSProperties,
127
- receivedMessageTextStyle?: CSSProperties,
128
- sentMessageStyle?: CSSProperties,
129
- sentMessageTextStyle?: CSSProperties,
130
204
  }
131
205
  export const Messages = ({
132
206
  resolveSenderName,
@@ -134,21 +208,14 @@ export const Messages = ({
134
208
  chatUserId,
135
209
  Header=MessagesHeader,
136
210
  headerProps,
137
- style=defaultMessagesStyle,
138
- receivedMessageStyle=defaultReceivedStyle,
139
- receivedMessageTextStyle=defaultTextReceivedStyle,
140
- sentMessageStyle=defaultSentStyle,
141
- sentMessageTextStyle=defaultTextSentStyle,
211
+ style,
212
+ ...messageStyles
142
213
  }: Messages_T & Styled) => (
143
214
  <LoadingLinear data={messages} render={messages => (
144
215
  <Flex column flex={1}>
145
216
  {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>
217
+ <List reverse style={style} items={messages} render={message => (
218
+ <Message key={message.id} message={message} {...messageStyles}/>
152
219
  )}/>
153
220
  </Flex>
154
221
  )}/>