blob: 98e21dd03f0efaea4579ad4b5f9a36622e9cc727 [file] [log] [blame]
Adrien Béraude74741b2021-04-19 13:22:54 -04001import Contact from './Contact.js'
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04002
Adrien Béraudc4dd44a2021-04-08 01:05:24 -04003class Conversation {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04004 constructor(id, accountId, members) {
Adrien Béraudc4dd44a2021-04-08 01:05:24 -04005 this.id = id
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04006 this.accountId = accountId
Adrien Béraud995e8022021-04-08 13:46:51 -04007 this.members = members || []
Adrien Béraudc4dd44a2021-04-08 01:05:24 -04008 this.messages = []
9 }
10
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040011 static from(accountId, object) {
12 return new Conversation(object.id, accountId, object.members.map(member => {
13 member.contact = Contact.from(member.contact)
14 return member
15 }))
16 }
17 static fromSingleContact(accountId, contact) {
18 return new Conversation(undefined, accountId, [{contact}])
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040019 }
20
21 getId() { return this.id }
22
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040023 getAccountId() { return this.accountId }
24
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040025 getDisplayName() {
Adrien Béraud995e8022021-04-08 13:46:51 -040026 if (this.members.length !== 0) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040027 return this.members[0].contact.getDisplayName()
Adrien Béraud995e8022021-04-08 13:46:51 -040028 }
29 return this.getDisplayUri()
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040030 }
31
Adrien Béraud150b4782021-04-21 19:40:59 -040032 getDisplayNameNoFallback() {
33 if (this.members.length !== 0) {
34 return this.members[0].contact.getDisplayNameNoFallback()
35 }
36 }
37
38 async getObject(params) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040039 const members = params.memberFilter ? this.members.filter(params.memberFilter) : this.members
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040040 return {
41 id: this.id,
Adrien Béraud150b4782021-04-21 19:40:59 -040042 members: await Promise.all(members.map(async member => {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040043 const copiedMember = { role: member.role }//Object.assign({}, member);
Adrien Béraud150b4782021-04-21 19:40:59 -040044 copiedMember.contact = await member.contact.getObject()
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040045 return copiedMember
Adrien Béraud150b4782021-04-21 19:40:59 -040046 }))
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040047 }
48 }
49
50 getSummary() {
51 return this.getObject()
52 }
53
54 getDisplayUri() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040055 return this.getId() || this.getFirstMember().contact.getUri()
56 }
57
58 getFirstMember() {
59 return this.members[0]
60 }
61
62 getMembers() {
63 return this.members
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040064 }
65
66 addMessage(message) {
67 this.messages.push(message)
68 }
69}
70
Adrien Béraude74741b2021-04-19 13:22:54 -040071export default Conversation;