@@ -222,9 +222,9 @@ export default {
...mapMutations({
commitUnreadRoomCount: 'chat/UPDATE_ROOM_COUNT',
}),
- async fetchRooms({ room } = {}) {
- this.roomsLoaded = false
- const offset = this.roomPage * this.roomPageSize
+ async fetchRooms({ room, options = {} } = {}) {
+ this.roomsLoaded = options.refetch ? this.roomsLoaded : false
+ const offset = (options.refetch ? 0 : this.roomPage) * this.roomPageSize
try {
const {
data: { Room },
@@ -238,16 +238,25 @@ export default {
fetchPolicy: 'no-cache',
})
- const newRooms = Room.map((r) => {
- return {
- ...r,
- users: r.users.map((u) => {
- return { ...u, username: u.name, avatar: u.avatar?.url }
- }),
+ const rms = []
+ const rmsIds = []
+ ;[...Room, ...this.rooms].forEach((r) => {
+ if (!rmsIds.find((v) => v === r.id)) {
+ rms.push({
+ ...r,
+ index: r.lastMessage?.date,
+ lastMessage: {
+ ...r.lastMessage,
+ content: r.lastMessage?.content.trim().substring(0, 30),
+ },
+ users: r.users.map((u) => {
+ return { ...u, username: u.name, avatar: u.avatar?.url }
+ }),
+ })
+ rmsIds.push(r.id)
}
})
-
- this.rooms = [...this.rooms, ...newRooms]
+ this.rooms = rms
if (Room.length < this.roomPageSize) {
this.roomsLoaded = true
@@ -282,8 +291,14 @@ export default {
fetchPolicy: 'no-cache',
})
- const newMsgIds = Message.filter((m) => m.seen === false).map((m) => m.id)
+ const newMsgIds = Message.filter(
+ (m) => m.seen === false && m.senderId !== this.currentUser.id,
+ ).map((m) => m.id)
if (newMsgIds.length) {
+ const roomIndex = this.rooms.findIndex((r) => r.id === room.id)
+ const changedRoom = { ...this.rooms[roomIndex] }
+ changedRoom.unreadCount = changedRoom.unreadCount - newMsgIds.length
+ this.rooms[roomIndex] = changedRoom
this.$apollo
.mutate({
mutation: markMessagesAsSeen(),
@@ -322,14 +337,17 @@ export default {
},
async chatMessageAdded({ data }) {
+ const roomIndex = this.rooms.findIndex((r) => r.id === data.chatMessageAdded.room.id)
+ const changedRoom = { ...this.rooms[roomIndex] }
+ changedRoom.lastMessage = data.chatMessageAdded
+ changedRoom.lastMessage.content = changedRoom.lastMessage.content.trim().substring(0, 30)
+ changedRoom.lastMessageAt = data.chatMessageAdded.date
+ changedRoom.unreadCount++
+ this.rooms[roomIndex] = changedRoom
if (data.chatMessageAdded.room.id === this.selectedRoom?.id) {
this.fetchMessages({ room: this.selectedRoom, options: { refetch: true } })
} else {
- // TODO this might be optimized selectively (first page vs rest)
- this.rooms = []
- this.roomPage = 0
- this.roomsLoaded = false
- this.fetchRooms()
+ this.fetchRooms({ options: { refetch: true } })
}
},
@@ -342,6 +360,11 @@ export default {
content: message.content,
},
})
+ const roomIndex = this.rooms.findIndex((r) => r.id === message.roomId)
+ const changedRoom = { ...this.rooms[roomIndex] }
+ changedRoom.lastMessage = message
+ changedRoom.lastMessage.content = changedRoom.lastMessage.content.trim().substring(0, 30)
+ this.rooms[roomIndex] = changedRoom
} catch (error) {
this.$toast.error(error.message)
}
diff --git a/webapp/constants/chat.js b/webapp/constants/chat.js
index a183a3922..181d88e0e 100644
--- a/webapp/constants/chat.js
+++ b/webapp/constants/chat.js
@@ -65,7 +65,7 @@ const STYLE = {
backgroundSelected: '#c2dcf2',
colorDeleted: '#757e85',
colorUsername: '#9ca6af',
- colorTimestamp: '#828c94',
+ colorTimestamp: styleData.chatMessageTimestamp,
backgroundDate: '#e5effa',
colorDate: '#505a62',
backgroundSystem: '#e5effa',
@@ -134,8 +134,8 @@ const STYLE = {
emojiReaction: 'rgba(0, 0, 0, 0.3)',
document: styleData.colorPrimary,
pencil: '#9e9e9e',
- checkmark: '#9e9e9e',
- checkmarkSeen: '#0696c7',
+ checkmark: styleData.chatMessageCheckmark,
+ checkmarkSeen: styleData.chatMessageCheckmarkSeen,
eye: '#fff',
dropdownMessage: '#fff',
dropdownMessageBackground: 'rgba(0, 0, 0, 0.25)',