Skip to content

Commit 44f096c

Browse files
committed
(feat) add new messages line
1 parent 8566d41 commit 44f096c

File tree

4 files changed

+62
-10
lines changed

4 files changed

+62
-10
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
- Images, files & emojis
2020
- Edit messages
2121
- Reply to other messages
22-
- Dark mode
22+
- Flexible options
23+
- UI elements for seen, new and deleted messages
24+
- Custom theming - light and dark modes
2325
- Firestore example
2426

2527
## [Demo](https://antoine92190.github.io/vue-advanced-chat)

src/ChatWindow/ChatMessage.vue

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<template>
22
<div>
3-
<div
4-
class="card-date"
5-
v-if="index > 0 && message.date !== messages[index - 1].date"
6-
>
3+
<div class="card-date" v-if="showDate">
74
{{ message.date }}
85
</div>
6+
7+
<div class="line-new" v-if="newMessageIndex === index">
8+
New messages
9+
</div>
10+
911
<div
1012
class="message-box"
1113
:class="{ 'offset-current': message.sender_id === 'me' }"
@@ -160,7 +162,8 @@ export default {
160162
roomUsers: { type: Array, default: () => [] },
161163
textMessages: { type: Object, required: true },
162164
messageActions: { type: Array, required: true },
163-
roomFooterRef: { type: HTMLDivElement }
165+
roomFooterRef: { type: HTMLDivElement },
166+
newMessages: { type: Array }
164167
},
165168
166169
data() {
@@ -170,7 +173,8 @@ export default {
170173
imageHover: false,
171174
messageReply: false,
172175
optionsOpened: false,
173-
menuOptionsHeight: 0
176+
menuOptionsHeight: 0,
177+
newMessageIndex: null
174178
}
175179
},
176180
@@ -180,10 +184,25 @@ export default {
180184
handler() {
181185
this.checkImgLoad()
182186
}
187+
},
188+
newMessages(val) {
189+
this.newMessageIndex = Math.min(...val)
190+
}
191+
},
192+
193+
mounted() {
194+
if (!this.message.seen && this.message.sender_id !== 'me') {
195+
this.$emit('addNewMessage', this.index)
183196
}
184197
},
185198
186199
computed: {
200+
showDate() {
201+
return (
202+
this.index > 0 &&
203+
this.message.date !== this.messages[this.index - 1].date
204+
)
205+
},
187206
isImage() {
188207
return this.checkImageFile()
189208
},
@@ -303,6 +322,28 @@ export default {
303322
0 1px 2px 0 rgba(0, 0, 0, 0.12);
304323
}
305324
325+
.line-new {
326+
color: var(--chat-message-color-new-messages);
327+
position: relative;
328+
text-align: center;
329+
font-size: 13px;
330+
}
331+
332+
.line-new:after,
333+
.line-new:before {
334+
border-top: 1px solid var(--chat-message-color-new-messages);
335+
content: '';
336+
left: 0;
337+
position: absolute;
338+
top: 50%;
339+
width: calc(50% - 60px);
340+
}
341+
342+
.line-new:before {
343+
left: auto;
344+
right: 0;
345+
}
346+
306347
.message-box {
307348
display: flex;
308349
flex: 0 0 50%;

src/ChatWindow/MessagesList.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@
5959
:roomUsers="room.users"
6060
:textMessages="textMessages"
6161
:roomFooterRef="$refs.roomFooter"
62+
:newMessages="newMessages"
6263
@messageActionHandler="messageActionHandler"
6364
@openFile="openFile"
65+
@addNewMessage="addNewMessage"
6466
></chat-message>
6567
</div>
6668
</transition-group>
@@ -220,7 +222,8 @@ export default {
220222
imageDimensions: { height: '32px', width: '10px' },
221223
menuOpened: false,
222224
emojiOpened: false,
223-
scrollIcon: false
225+
scrollIcon: false,
226+
newMessages: []
224227
}
225228
},
226229
@@ -295,6 +298,9 @@ export default {
295298
},
296299
297300
methods: {
301+
addNewMessage(index) {
302+
this.newMessages.push(index)
303+
},
298304
resetMessage() {
299305
this.resetTextareaSize()
300306
this.message = ''

src/themes/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ export const defaultThemeColors = {
5151
backgroundReply: 'rgba(0, 0, 0, 0.08)',
5252
colorReplyUsername: '#0a0a0a',
5353
colorReply: '#6e6e6e',
54-
backgroundImage: '#ddd'
54+
backgroundImage: '#ddd',
55+
colorNewMessages: '#1976d2'
5556
},
5657

5758
room: {
@@ -137,7 +138,8 @@ export const defaultThemeColors = {
137138
backgroundReply: 'rgba(0, 0, 0, 0.18)',
138139
colorReplyUsername: '#fff',
139140
colorReply: '#d6d6d6',
140-
backgroundImage: '#ddd'
141+
backgroundImage: '#ddd',
142+
colorNewMessages: '#fff'
141143
},
142144

143145
room: {
@@ -232,6 +234,7 @@ export const cssThemeVars = ({
232234
'--chat-message-color-reply-username': message.colorReplyUsername,
233235
'--chat-message-color-reply-content': message.colorReply,
234236
'--chat-message-bg-color-image': message.backgroundImage,
237+
'--chat-message-color-new-messages': message.colorNewMessages,
235238

236239
// room
237240
'--chat-room-color-username': room.colorUsername,

0 commit comments

Comments
 (0)