@bcc-code/vue-bcc-chat-ui 3.40.2 → 3.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@bcc-code/vue-bcc-chat-ui",
3
3
  "author": "bcc-code",
4
4
  "license": "Apache-2.0",
5
- "version": "3.40.2",
5
+ "version": "3.41.0",
6
6
  "type": "module",
7
7
  "private": false,
8
8
  "files": [
@@ -8,16 +8,18 @@ import {
8
8
  provide,
9
9
  ref,
10
10
  watch,
11
+ watchEffect,
11
12
  } from "vue";
12
13
  import chat from "../chat";
13
14
  import { connect, disconnect } from "../chat/connection";
14
15
  import { loggedIn } from "../chat/login";
15
- import { Group } from "@cometchat/chat-sdk-javascript";
16
+ import { CometChat, Group, GroupMember } from "@cometchat/chat-sdk-javascript";
16
17
  import { watchAndApplyStyle } from "../chat/styleFix";
17
- import { ChatInstance } from "../chat/types";
18
+ import { ChatInstance, ParticipantInfo } from "../chat/types";
18
19
  import { CometChatMessageEvents, MessageStatus } from "@cometchat/uikit-resources";
19
20
  import BccChatMessages from "./BccChatMessages.vue";
20
21
  import BccScheduledMessages from "./BccScheduledMessages.vue";
22
+ import { getGroupMembersInfo } from "../chat/data";
21
23
  const props = defineProps({
22
24
  chatUid: { type: String, required: true },
23
25
  senderDisplayName: { type: String, required: false },
@@ -33,6 +35,9 @@ const componentId = ref(
33
35
  );
34
36
  const chatGroup = ref<Group>();
35
37
 
38
+ const emit = defineEmits(['groupMembersFetched']);
39
+ const groupMembers = ref<ParticipantInfo[]>();
40
+
36
41
  const chatInstance: Ref<ChatInstance> = ref({
37
42
  componentId: componentId,
38
43
  replyToMessage: null,
@@ -86,6 +91,8 @@ watch([loggedIn, () => props.chatUid, chat.initialized, () => props.groupMessage
86
91
  }
87
92
  }
88
93
  ])
94
+
95
+ getGroupMembersInfo(_chatUid).then((participants) => groupMembers.value = participants);
89
96
  }
90
97
 
91
98
  await chat.clearGroupChatCount(props.chatUid);
@@ -94,7 +101,13 @@ watch([loggedIn, () => props.chatUid, chat.initialized, () => props.groupMessage
94
101
  }
95
102
  }, { immediate: true });
96
103
 
97
-
104
+ watchEffect(() => {
105
+ if (groupMembers.value && groupMembers.value.length) {
106
+ emit('groupMembersFetched', groupMembers.value);
107
+ } else {
108
+ emit('groupMembersFetched', []);
109
+ }
110
+ })
98
111
 
99
112
  onMounted(() => {
100
113
  watchAndApplyStyle(".bcc-chat-message-list-wrapper", [
@@ -115,6 +128,30 @@ onMounted(() => {
115
128
  shadowDomSelector: "cometchat-preview",
116
129
  }
117
130
  ]);
131
+
132
+ CometChat.addGroupListener("groupListener", new CometChat.GroupListener({
133
+ onGroupMemberScopeChanged: (_action: any, changedUser: GroupMember, newScope: any, _oldScope: any, _changedGroup: GroupMember) => {
134
+ handleGroupMemberChanges(changedUser, "update", newScope);
135
+ },
136
+ onGroupMemberKicked: (_action: any, changedUser: GroupMember, _Ye: any, _group: any) => {
137
+ handleGroupMemberChanges(changedUser, "remove");
138
+ },
139
+ onGroupMemberBanned: (_action: any, user: GroupMember, _Ye: any, _group: any) => {
140
+ handleGroupMemberChanges(user, "remove");
141
+ },
142
+ onGroupMemberUnbanned: (_action: any, user: GroupMember, _Ye: any, _group: any) => {
143
+ handleGroupMemberChanges(user, "add");
144
+ },
145
+ onMemberAddedToGroup: (_action: any, user: GroupMember, _Ye: any, _group: any) => {
146
+ handleGroupMemberChanges(user, "add");
147
+ },
148
+ onGroupMemberLeft: (_action: any, user: GroupMember, _group: any) => {
149
+ handleGroupMemberChanges(user, "remove");
150
+ },
151
+ onGroupMemberJoined: (_action: any, user: GroupMember, _group: any) => {
152
+ handleGroupMemberChanges(user, "add");
153
+ }
154
+ }))
118
155
  });
119
156
 
120
157
  onBeforeUnmount(() => {
@@ -125,6 +162,31 @@ onUnmounted(async () => {
125
162
  await disconnect(componentId.value);
126
163
  });
127
164
 
165
+ function handleGroupMemberChanges(changedUser: GroupMember, action: string, newScope?: string) {
166
+ let participant: ParticipantInfo = {
167
+ uid: changedUser.getUid(),
168
+ displayName: changedUser.getName(),
169
+ avatar: changedUser.getAvatar(),
170
+ role: newScope ? newScope : CometChat.GROUP_MEMBER_SCOPE.PARTICIPANT
171
+ }
172
+
173
+ if (action === "add" && !existsInGroup(changedUser.getUid())) {
174
+ groupMembers.value?.push(participant)
175
+ }
176
+
177
+ if (action === "remove" && existsInGroup(changedUser.getUid())) {
178
+ groupMembers.value = groupMembers.value?.filter(participant => participant.uid !== changedUser.getUid());
179
+ }
180
+
181
+ if (action === "update" && existsInGroup(changedUser.getUid())) {
182
+ groupMembers.value = groupMembers.value?.map(p => p.uid === changedUser.getUid() ? { ...p, ...participant } : p);
183
+ }
184
+ }
185
+
186
+ function existsInGroup(uid: string): boolean {
187
+ return groupMembers.value?.some(p => p.uid === uid) ?? false;
188
+ }
189
+
128
190
  function closeScheduledMessage() {
129
191
  chatInstance.value.captionedAttachment = null
130
192
  chatInstance.value.replyToMessage = null
@@ -144,8 +206,8 @@ function closeScheduledMessage() {
144
206
  <div>Connecting: {{chat.connecting.value}}</div>
145
207
  <div>CometChat: {{cometChatStatus}} <button @click="getCometChatStatus()">[refresh]</button></div>
146
208
  </div> -->
147
- <BccChatMessages v-if="chatGroup && !chatInstance.showScheduledMessagesChat" :chatGroup="chatGroup" :hide-deleted-messages="props.hideDeletedMessages"
148
- :chatUid="props.chatUid"></BccChatMessages>
209
+ <BccChatMessages v-if="chatGroup && !chatInstance.showScheduledMessagesChat" :chatGroup="chatGroup"
210
+ :hide-deleted-messages="props.hideDeletedMessages" :chatUid="props.chatUid"></BccChatMessages>
149
211
  <BccScheduledMessages v-else-if="chatGroup && chatInstance.showScheduledMessagesChat"
150
212
  class="bcc-scheduled-message-list" :chatGroup="chatInstance.scheduledMessageChat!"
151
213
  :originalChatUid="props.chatUid" @close="closeScheduledMessage()"></BccScheduledMessages>
@@ -165,8 +227,6 @@ function closeScheduledMessage() {
165
227
  body {
166
228
  background: #fff;
167
229
  color: #000;
168
-
169
-
170
230
  }
171
231
 
172
232
  :host.dark body {
@@ -232,6 +292,7 @@ accent900: text in avatar
232
292
 
233
293
  .bcc-chat-message-list {
234
294
  height: 100%;
295
+
235
296
  /* 1. Wrapper for Messages component */
236
297
  .cc-messages-wrapper {
237
298