Skip to content

Commit 51e1b5f

Browse files
committed
(refactor) add currentUserId prop (replaces 'me')
1 parent 90d26df commit 51e1b5f

File tree

6 files changed

+53
-41
lines changed

6 files changed

+53
-41
lines changed

README.md

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ You can import it as a custom component:
6767
data() {
6868
return {
6969
rooms: [],
70-
messages: []
70+
messages: [],
71+
currentUserId: '1234'
7172
}
7273
}
7374
}
@@ -79,23 +80,26 @@ You can import it as a custom component:
7980
| Prop | Type | Required | Default |
8081
| ------------------ | ------- | -------- | ------- |
8182
| height | String | - | 600px |
83+
| currentUserId (1) | String | true | - |
8284
| rooms | Array | - | [ ] |
83-
| loadingRooms (1) | Boolean | - | false |
85+
| loadingRooms (2) | Boolean | - | false |
8486
| messages | Array | - | [ ] |
85-
| messagesLoaded (2) | Boolean | - | false |
86-
| menuActions (3) | Array | - | [ ] |
87-
| messageActions (4) | Array | - | (4) |
87+
| messagesLoaded (3) | Boolean | - | false |
88+
| menuActions (4) | Array | - | [ ] |
89+
| messageActions (5) | Array | - | (4) |
8890
| showFiles | Boolean | - | true |
8991
| showEmojis | Boolean | - | true |
90-
| textMessages (5) | Object | - | null |
91-
| theme (6) | Sring | - | light |
92-
| colors (7) | Object | - | (6) |
92+
| textMessages (6) | Object | - | null |
93+
| theme (7) | Sring | - | light |
94+
| colors (8) | Object | - | (8) |
9395

94-
(1) `loadingRooms` can be used to show/hide a spinner icon while rooms are loading
96+
(1) `currentUserId` is required to display UI and trigger actions according to the user using the chat (ex: messages position on the right, etc.)
9597

96-
(2) `messagesLoaded` must be manually set to `true` when all messages of a conversation have been loaded. Meaning the user cannot scroll on top anymore
98+
(2) `loadingRooms` can be used to show/hide a spinner icon while rooms are loading
9799

98-
(3) `menuActions` can be used to display your own buttons when clicking the vertical dots icon inside a room.<br>
100+
(3) `messagesLoaded` must be manually set to `true` when all messages of a conversation have been loaded. Meaning the user cannot scroll on top anymore
101+
102+
(4) `menuActions` can be used to display your own buttons when clicking the vertical dots icon inside a room.<br>
99103
You can then use the [menuActionHandler](#events-api) event to call your own action after clicking a button. Ex:
100104

101105
```javascript
@@ -115,7 +119,7 @@ menuActions="[
115119
]"
116120
```
117121

118-
(4) `messageActions` can be used to display your own buttons when clicking the dropdown icon inside a message.<br>
122+
(5) `messageActions` can be used to display your own buttons when clicking the dropdown icon inside a message.<br>
119123
You can then use the [messageActionHandler](#events-api) event to call your own action after clicking a button. Ex:
120124

121125
```javascript
@@ -155,7 +159,7 @@ messageActions="[
155159
]"
156160
```
157161

158-
(5) `textMessages` can be used to replace default texts. Ex:
162+
(6) `textMessages` can be used to replace default texts. Ex:
159163

160164
```javascript
161165
textMessages="{
@@ -168,9 +172,9 @@ textMessages="{
168172
}"
169173
```
170174

171-
(6) `theme` can be used to change the chat theme. Currently, only `light` and `dark` are available.
175+
(7) `theme` can be used to change the chat theme. Currently, only `light` and `dark` are available.
172176

173-
(7) `colors` can be use to create your own theme. Ex:
177+
(8) `colors` can be use to create your own theme. Ex:
174178

175179
```javascript
176180
colors="{
@@ -298,7 +302,7 @@ rooms="[
298302
### Messages prop
299303

300304
Message objects are rendered differently depending on their type. Currently, only text, emoji and file types are supported.<br>
301-
Each message object has a `sender_id` field which can have the value 'me' or the id of the corresponding agent.
305+
Each message object has a `sender_id` field which holds the id of the corresponding agent. If `sender_id` matches the `currentUserId` prop, specific UI and actions will be implemented
302306

303307
```javascript
304308
messages="[

demo/src/ChatContainer.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
<chat-window
4949
height="calc(100vh - 80px)"
5050
:theme="theme"
51+
:currentUserId="currentUserId"
5152
:rooms="rooms"
5253
:loadingRooms="loadingRooms"
5354
:messages="messages"
@@ -346,7 +347,7 @@ export default {
346347
return {
347348
...message.data(),
348349
...{
349-
sender_id: sender_id === this.currentUserId ? 'me' : sender_id,
350+
sender_id,
350351
_id: message.id,
351352
seconds: timestamp.seconds,
352353
timestamp: parseTimestamp(timestamp, 'HH:mm'),
@@ -376,10 +377,7 @@ export default {
376377
message.replyMessage = {
377378
_id: replyMessage._id,
378379
content: replyMessage.content,
379-
sender_id:
380-
replyMessage.sender_id === 'me'
381-
? this.currentUserId
382-
: replyMessage.sender_id
380+
sender_id: replyMessage.sender_id
383381
}
384382
385383
if (message.replyMessage.file) {

src/ChatWindow/ChatMessage.vue

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<div
1212
class="message-box"
13-
:class="{ 'offset-current': message.sender_id === 'me' }"
13+
:class="{ 'offset-current': message.sender_id === currentUserId }"
1414
>
1515
<div
1616
class="message-container"
@@ -21,12 +21,12 @@
2121
class="message-card"
2222
:class="{
2323
'message-highlight': isMessageHover(message),
24-
'message-current': message.sender_id === 'me',
24+
'message-current': message.sender_id === currentUserId,
2525
'message-deleted': message.deleted
2626
}"
2727
>
2828
<div
29-
v-if="roomUsers.length > 2 && message.sender_id !== 'me'"
29+
v-if="roomUsers.length > 2 && message.sender_id !== currentUserId"
3030
class="text-username"
3131
:class="{
3232
'username-reply': !message.deleted && message.replyMessage
@@ -67,7 +67,8 @@
6767
<div
6868
class="message-image"
6969
:class="{
70-
'image-loading': isImageLoading && message.sender_id === 'me'
70+
'image-loading':
71+
isImageLoading && message.sender_id === currentUserId
7172
}"
7273
:style="{ background: `url(${message.file.url})` }"
7374
>
@@ -129,21 +130,23 @@
129130
:emojiOpened="emojiOpened"
130131
:emojiReaction="true"
131132
:roomFooterRef="roomFooterRef"
132-
:positionRight="message.sender_id === 'me'"
133+
:positionRight="message.sender_id === currentUserId"
133134
@addEmoji="sendMessageReaction"
134135
@openEmoji="emojiOpened = $event"
135136
></emoji-picker>
136137

137138
<transition
138-
:name="message.sender_id === 'me' ? 'slide-left' : 'slide-right'"
139+
:name="
140+
message.sender_id === currentUserId ? 'slide-left' : 'slide-right'
141+
"
139142
v-if="filteredMessageActions.length"
140143
>
141144
<div
142145
ref="menuOptions"
143146
v-if="optionsOpened"
144147
v-click-outside="closeOptions"
145148
class="menu-options"
146-
:class="{ 'menu-left': message.sender_id !== 'me' }"
149+
:class="{ 'menu-left': message.sender_id !== currentUserId }"
147150
:style="{ top: `${menuOptionsHeight}px` }"
148151
>
149152
<div class="menu-list">
@@ -188,12 +191,13 @@ export default {
188191
},
189192
190193
props: {
194+
currentUserId: { type: String, required: true },
195+
textMessages: { type: Object, required: true },
191196
index: { type: Number, required: true },
192197
message: { type: Object, required: true },
193198
messages: { type: Array, required: true },
194199
editedMessage: { type: Object, required: true },
195200
roomUsers: { type: Array, default: () => [] },
196-
textMessages: { type: Object, required: true },
197201
messageActions: { type: Array, required: true },
198202
roomFooterRef: { type: HTMLDivElement },
199203
newMessages: { type: Array },
@@ -231,7 +235,7 @@ export default {
231235
},
232236
233237
mounted() {
234-
if (!this.message.seen && this.message.sender_id !== 'me') {
238+
if (!this.message.seen && this.message.sender_id !== this.currentUserId) {
235239
this.$emit('addNewMessage', {
236240
_id: this.message._id,
237241
index: this.index
@@ -262,7 +266,7 @@ export default {
262266
},
263267
isMessageSeen() {
264268
return (
265-
this.message.sender_id === 'me' &&
269+
this.message.sender_id === this.currentUserId &&
266270
this.message.seen &&
267271
!this.message.deleted
268272
)
@@ -285,7 +289,7 @@ export default {
285289
)
286290
},
287291
filteredMessageActions() {
288-
return this.message.sender_id === 'me'
292+
return this.message.sender_id === this.currentUserId
289293
? this.messageActions
290294
: this.messageActions.filter(message => !message.onlyMe)
291295
}
@@ -304,7 +308,9 @@ export default {
304308
if (this.canEditMessage()) this.hoverMessageId = this.message._id
305309
},
306310
canEditMessage() {
307-
return this.message.sender_id === 'me' && !this.message.deleted
311+
return (
312+
this.message.sender_id === this.currentUserId && !this.message.deleted
313+
)
308314
},
309315
onLeaveMessage() {
310316
this.imageHover = false

src/ChatWindow/ChatWindow.vue

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
>
1212
</rooms-list>
1313
<messages-list
14+
:currentUserId="currentUserId"
1415
:room="room"
1516
:messages="messages"
1617
:messagesLoaded="messagesLoaded"
@@ -50,6 +51,10 @@ export default {
5051
5152
props: {
5253
height: { type: String, default: '600px' },
54+
theme: { type: String, default: 'light' },
55+
colors: { type: Object, default: null },
56+
textMessages: { type: Object, default: null },
57+
currentUserId: { type: String, required: true },
5358
rooms: { type: Array, default: () => [] },
5459
loadingRooms: { type: Boolean, default: false },
5560
messages: { type: Array, default: () => [] },
@@ -65,10 +70,7 @@ export default {
6570
},
6671
showFiles: { type: Boolean, default: true },
6772
showEmojis: { type: Boolean, default: true },
68-
showReactionEmojis: { type: Boolean, default: true },
69-
textMessages: { type: Object, default: null },
70-
theme: { type: String, default: 'light' },
71-
colors: { type: Object, default: null }
73+
showReactionEmojis: { type: Boolean, default: true }
7274
},
7375
7476
data() {

src/ChatWindow/MessagesList.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
<transition-group name="fade-message">
5252
<div v-for="(message, i) in messages" :key="message._id">
5353
<chat-message
54+
:currentUserId="currentUserId"
5455
:message="message"
5556
:index="i"
5657
:messages="messages"
@@ -204,15 +205,16 @@ export default {
204205
},
205206
206207
props: {
208+
currentUserId: { type: String, required: true },
209+
textMessages: { type: Object, required: true },
207210
room: { type: Object, required: true },
208211
messages: { type: Array, required: true },
209212
messagesLoaded: { type: Boolean, required: true },
210213
menuActions: { type: Array, required: true },
211214
messageActions: { type: Array, required: true },
212215
showFiles: { type: Boolean, required: true },
213216
showEmojis: { type: Boolean, required: true },
214-
showReactionEmojis: { type: Boolean, required: true },
215-
textMessages: { type: Object, required: true }
217+
showReactionEmojis: { type: Boolean, required: true }
216218
},
217219
218220
data() {

src/ChatWindow/RoomsList.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ export default {
6969
components: { ChatLoader, SvgIcon },
7070
7171
props: {
72+
textMessages: { type: Object, required: true },
7273
rooms: { type: Array, required: true },
7374
loadingRooms: { type: Boolean, required: true },
74-
room: { type: Object, required: true },
75-
textMessages: { type: Object, required: true }
75+
room: { type: Object, required: true }
7676
},
7777
7878
data() {

0 commit comments

Comments
 (0)