now able to create chats with multiple users
This commit is contained in:
@@ -19,10 +19,25 @@ export default defineComponent({
|
|||||||
const userLoaded = ref(false);
|
const userLoaded = ref(false);
|
||||||
|
|
||||||
const chatName = ref('');
|
const chatName = ref('');
|
||||||
|
const userSearch = ref('');
|
||||||
|
|
||||||
const chats = ref([] as chat[]);
|
const chats = ref([] as chat[]);
|
||||||
const chatsLoaded = ref(false);
|
const chatsLoaded = ref(false);
|
||||||
|
|
||||||
|
const matchingUsers = ref([] as ptpUser[]);
|
||||||
|
const usersForChat = ref([] as string[]);
|
||||||
|
|
||||||
|
const usersForChatOptions = ref([] as {label: string, value: string}[]);
|
||||||
|
const updateUsersForChatOptions = async () =>{
|
||||||
|
if(!usersLoaded.value){
|
||||||
|
await loadUsers();
|
||||||
|
}
|
||||||
|
usersForChatOptions.value = users.value
|
||||||
|
.filter((u, index) => u.keycloakID !== user.value.keycloakID && index < 5)
|
||||||
|
.map((u) => {
|
||||||
|
return {label: u.firstName + ' ' + u.lastName, value: u.keycloakID};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
userStore.logout();
|
userStore.logout();
|
||||||
@@ -34,10 +49,13 @@ export default defineComponent({
|
|||||||
await userStore.loadAllUsers();
|
await userStore.loadAllUsers();
|
||||||
usersLoaded.value = true;
|
usersLoaded.value = true;
|
||||||
users.value = userStore.users;
|
users.value = userStore.users;
|
||||||
}
|
};
|
||||||
|
|
||||||
const createChat = async(chatName: string)=>{
|
const createChat = async(chatName: string)=>{
|
||||||
await chatStore.createChat(chatName, userStore.users.map(u => u.keycloakID));
|
if(chatName == ""){
|
||||||
|
chatName = "Chat";
|
||||||
|
}
|
||||||
|
await chatStore.createChat(chatName, usersForChat.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadChats = async() => {
|
const loadChats = async() => {
|
||||||
@@ -48,7 +66,7 @@ export default defineComponent({
|
|||||||
usersLoaded.value = true;
|
usersLoaded.value = true;
|
||||||
console.log(users.value);
|
console.log(users.value);
|
||||||
console.log(chats.value);
|
console.log(chats.value);
|
||||||
}
|
};
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
userLoaded.value = userStore.userLoaded;
|
userLoaded.value = userStore.userLoaded;
|
||||||
user.value = userStore.user;
|
user.value = userStore.user;
|
||||||
@@ -70,6 +88,12 @@ export default defineComponent({
|
|||||||
loadChats,
|
loadChats,
|
||||||
chats,
|
chats,
|
||||||
chatsLoaded,
|
chatsLoaded,
|
||||||
|
|
||||||
|
userSearch,
|
||||||
|
matchingUsers,
|
||||||
|
usersForChatOptions,
|
||||||
|
usersForChat,
|
||||||
|
updateUsersForChatOptions,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -96,7 +120,45 @@ export default defineComponent({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<q-input v-model="chatName" label="Chat Name" clearable />
|
<q-input
|
||||||
|
v-model="chatName"
|
||||||
|
label="Chat Name"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
<div class="q-gutter-y-md" style="max-width: 300px">
|
||||||
|
<q-input
|
||||||
|
standout
|
||||||
|
bottom-slots
|
||||||
|
v-model="userSearch"
|
||||||
|
label="Search User"
|
||||||
|
clearable
|
||||||
|
filled
|
||||||
|
color="orange"
|
||||||
|
@update:model-value="updateUsersForChatOptions()"
|
||||||
|
>
|
||||||
|
<template v-slot:after>
|
||||||
|
<q-btn
|
||||||
|
round
|
||||||
|
dense
|
||||||
|
flat
|
||||||
|
icon="search"
|
||||||
|
@click="updateUsersForChatOptions()"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</div>
|
||||||
|
<div class="q-pa-lg">
|
||||||
|
<q-option-group
|
||||||
|
v-model="usersForChat"
|
||||||
|
rules="[val => val.length > 0 || 'Please select at least one user']"
|
||||||
|
:options="usersForChatOptions"
|
||||||
|
type="checkbox"
|
||||||
|
color="primary"
|
||||||
|
inline
|
||||||
|
>
|
||||||
|
|
||||||
|
</q-option-group>
|
||||||
|
</div>
|
||||||
<q-btn @click="createChat(chatName)" label="Create Chat"/>
|
<q-btn @click="createChat(chatName)" label="Create Chat"/>
|
||||||
<br>
|
<br>
|
||||||
<q-btn @click="loadChats()" label="Load Chats"/>
|
<q-btn @click="loadChats()" label="Load Chats"/>
|
||||||
@@ -109,6 +171,8 @@ export default defineComponent({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@@ -21,6 +21,18 @@ export const useChatStore = defineStore('chatStore',{
|
|||||||
return this.chats;
|
return this.chats;
|
||||||
},
|
},
|
||||||
async createChat(chatName: string, members: string[]){
|
async createChat(chatName: string, members: string[]){
|
||||||
|
if(userStore.keycloakId) {
|
||||||
|
console.log("keycloakId is defined");
|
||||||
|
if (!members.includes(userStore.keycloakId)) {
|
||||||
|
members.push(userStore.keycloakId);
|
||||||
|
}
|
||||||
|
}else if(userStore.user?.keycloakID){
|
||||||
|
console.log("user is defined");
|
||||||
|
if (! members.includes(userStore.user.keycloakID)) {
|
||||||
|
members.push(userStore.user.keycloakID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(members);
|
||||||
return (await api.post("/chats/create/" + chatName, members)).data;
|
return (await api.post("/chats/create/" + chatName, members)).data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user