|
50 | 50 | :theme="theme"
|
51 | 51 | :styles="styles"
|
52 | 52 | :current-user-id="currentUserId"
|
| 53 | + :roomId="roomId" |
53 | 54 | :rooms="loadedRooms"
|
54 | 55 | :loading-rooms="loadingRooms"
|
55 | 56 | :messages="messages"
|
|
63 | 64 | @edit-message="editMessage"
|
64 | 65 | @delete-message="deleteMessage"
|
65 | 66 | @open-file="openFile"
|
| 67 | + @open-user-tag="openUserTag" |
66 | 68 | @add-room="addRoom"
|
67 | 69 | @menu-action-handler="menuActionHandler"
|
68 | 70 | @message-action-handler="messageActionHandler"
|
@@ -98,6 +100,7 @@ export default {
|
98 | 100 | return {
|
99 | 101 | roomsPerPage: 15,
|
100 | 102 | rooms: [],
|
| 103 | + roomId: '', |
101 | 104 | startRooms: null,
|
102 | 105 | endRooms: null,
|
103 | 106 | roomsLoaded: false,
|
@@ -312,6 +315,7 @@ export default {
|
312 | 315 | content,
|
313 | 316 | timestamp,
|
314 | 317 | date: message.timestamp.seconds,
|
| 318 | + distributed: true, |
315 | 319 | seen: message.sender_id === this.currentUserId ? message.seen : null,
|
316 | 320 | new:
|
317 | 321 | message.sender_id !== this.currentUserId &&
|
@@ -458,6 +462,61 @@ export default {
|
458 | 462 | window.open(message.file.url, '_blank')
|
459 | 463 | },
|
460 | 464 |
|
| 465 | + async openUserTag({ user }) { |
| 466 | + let roomId |
| 467 | +
|
| 468 | + this.rooms.forEach(room => { |
| 469 | + if (room.users.length === 2) { |
| 470 | + const userId1 = room.users[0]._id |
| 471 | + const userId2 = room.users[1]._id |
| 472 | + if ( |
| 473 | + (userId1 === user._id || userId1 === this.currentUserId) && |
| 474 | + (userId2 === user._id || userId2 === this.currentUserId) |
| 475 | + ) { |
| 476 | + roomId = room.roomId |
| 477 | + } |
| 478 | + } |
| 479 | + }) |
| 480 | +
|
| 481 | + if (roomId) { |
| 482 | + this.roomId = roomId |
| 483 | + return setTimeout(() => (this.roomId = ''), 0) |
| 484 | + } |
| 485 | +
|
| 486 | + const query1 = await roomsRef |
| 487 | + .where('users', '==', [this.currentUserId, user._id]) |
| 488 | + .get() |
| 489 | +
|
| 490 | + if (!query1.empty) { |
| 491 | + return this.loadRoom(query1) |
| 492 | + } |
| 493 | +
|
| 494 | + let query2 = await roomsRef |
| 495 | + .where('users', '==', [user._id, this.currentUserId]) |
| 496 | + .get() |
| 497 | +
|
| 498 | + if (!query2.empty) { |
| 499 | + return this.loadRoom(query2) |
| 500 | + } |
| 501 | +
|
| 502 | + const room = await roomsRef.add({ |
| 503 | + users: [user._id, this.currentUserId], |
| 504 | + lastUpdated: new Date() |
| 505 | + }) |
| 506 | +
|
| 507 | + this.roomId = room.id |
| 508 | + this.fetchRooms() |
| 509 | + }, |
| 510 | +
|
| 511 | + async loadRoom(query) { |
| 512 | + query.forEach(async room => { |
| 513 | + if (this.loadingRooms) return |
| 514 | + await roomsRef.doc(room.id).update({ lastUpdated: new Date() }) |
| 515 | + this.roomId = room.id |
| 516 | + this.fetchRooms() |
| 517 | + }) |
| 518 | + }, |
| 519 | +
|
461 | 520 | async editMessage({ messageId, newContent, roomId, file }) {
|
462 | 521 | const newMessage = { edited: new Date() }
|
463 | 522 | newMessage.content = newContent
|
|
0 commit comments