mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 15:06:20 +00:00
feat(messenger): SENT/READ status on thread chats + mark-read helper
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
import { describe, expect, it } from 'vitest';
|
||||||
|
import { MessengerFriend } from './MessengerFriend';
|
||||||
|
import { MessengerThread } from './MessengerThread';
|
||||||
|
import { MessengerThreadChat } from './MessengerThreadChat';
|
||||||
|
|
||||||
|
const makeThread = (participantId: number): MessengerThread =>
|
||||||
|
{
|
||||||
|
const friend = new MessengerFriend();
|
||||||
|
friend.id = participantId;
|
||||||
|
return new MessengerThread(friend);
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('MessengerThread.setMessagesReadFromUser', () =>
|
||||||
|
{
|
||||||
|
it('marks only the given user\'s messages as READ', () =>
|
||||||
|
{
|
||||||
|
const thread = makeThread(7);
|
||||||
|
const mine = thread.addMessage(100, 'a', 0, null, MessengerThreadChat.CHAT);
|
||||||
|
const theirs = thread.addMessage(7, 'b', 0, null, MessengerThreadChat.CHAT);
|
||||||
|
|
||||||
|
thread.setMessagesReadFromUser(100);
|
||||||
|
|
||||||
|
expect(mine.status).toBe(MessengerThreadChat.READ);
|
||||||
|
expect(theirs.status).toBe(MessengerThreadChat.SENT);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -99,6 +99,16 @@ export class MessengerThread
|
|||||||
this._unreadCount = 0;
|
this._unreadCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setMessagesReadFromUser(userId: number): void
|
||||||
|
{
|
||||||
|
for(const group of this._groups)
|
||||||
|
{
|
||||||
|
if(group.userId !== userId) continue;
|
||||||
|
|
||||||
|
for(const chat of group.chats) chat.setStatus(MessengerThreadChat.READ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public get threadId(): number
|
public get threadId(): number
|
||||||
{
|
{
|
||||||
return this._threadId;
|
return this._threadId;
|
||||||
|
|||||||
@@ -27,3 +27,19 @@ describe('MessengerThreadChat.offlineDelivered', () =>
|
|||||||
expect(chat.offlineDelivered).toBe(false);
|
expect(chat.offlineDelivered).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('MessengerThreadChat status', () =>
|
||||||
|
{
|
||||||
|
it('defaults to SENT', () =>
|
||||||
|
{
|
||||||
|
const chat = new MessengerThreadChat(5, 'hi', 0, null, MessengerThreadChat.CHAT);
|
||||||
|
expect(chat.status).toBe(MessengerThreadChat.SENT);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can be set to READ', () =>
|
||||||
|
{
|
||||||
|
const chat = new MessengerThreadChat(5, 'hi', 0, null, MessengerThreadChat.CHAT);
|
||||||
|
chat.setStatus(MessengerThreadChat.READ);
|
||||||
|
expect(chat.status).toBe(MessengerThreadChat.READ);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ export class MessengerThreadChat
|
|||||||
public static ROOM_INVITE: number = 1;
|
public static ROOM_INVITE: number = 1;
|
||||||
public static STATUS_NOTIFICATION: number = 2;
|
public static STATUS_NOTIFICATION: number = 2;
|
||||||
public static SECURITY_NOTIFICATION: number = 3;
|
public static SECURITY_NOTIFICATION: number = 3;
|
||||||
|
public static SENT: number = 0;
|
||||||
|
public static READ: number = 1;
|
||||||
private static CHAT_ID: number = 0;
|
private static CHAT_ID: number = 0;
|
||||||
|
|
||||||
private _id: number;
|
private _id: number;
|
||||||
private _type: number;
|
private _type: number;
|
||||||
|
private _status: number = MessengerThreadChat.SENT;
|
||||||
private _senderId: number;
|
private _senderId: number;
|
||||||
private _message: string;
|
private _message: string;
|
||||||
private _secondsSinceSent: number;
|
private _secondsSinceSent: number;
|
||||||
@@ -79,6 +82,16 @@ export class MessengerThreadChat
|
|||||||
return (this._type === MessengerThreadChat.CHAT) && (this._extraData === 'offline');
|
return (this._type === MessengerThreadChat.CHAT) && (this._extraData === 'offline');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get status(): number
|
||||||
|
{
|
||||||
|
return this._status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setStatus(status: number): void
|
||||||
|
{
|
||||||
|
this._status = status;
|
||||||
|
}
|
||||||
|
|
||||||
public get date(): Date
|
public get date(): Date
|
||||||
{
|
{
|
||||||
return this._date;
|
return this._date;
|
||||||
|
|||||||
Reference in New Issue
Block a user