mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2026-04-03 16:15:36 +00:00
123 lines
2.8 KiB
Vue
123 lines
2.8 KiB
Vue
<template>
|
|
<div class="chat-page">
|
|
<add-chat-room-by-user-search
|
|
v-if="showSearch"
|
|
ref="searchPanel"
|
|
@add-chat-room="addChatRoom"
|
|
@add-group-chat-room="addGroupChatRoom"
|
|
@close-user-search="showSearch = false"
|
|
/>
|
|
<client-only>
|
|
<chat
|
|
:userId="getShowChat.showChat ? getShowChat.chatUserId : null"
|
|
ref="chat"
|
|
@toggle-user-search="toggleSearch"
|
|
:show-room="showRoom"
|
|
/>
|
|
</client-only>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapGetters, mapMutations } from 'vuex'
|
|
import AddChatRoomByUserSearch from '~/components/Chat/AddChatRoomByUserSearch'
|
|
import Chat from '../components/Chat/Chat.vue'
|
|
|
|
export default {
|
|
components: {
|
|
AddChatRoomByUserSearch,
|
|
Chat,
|
|
},
|
|
data() {
|
|
return {
|
|
showSearch: false,
|
|
}
|
|
},
|
|
mounted() {
|
|
this.showChat({ showChat: false, chatUserId: null, groupId: null })
|
|
this.openFromQuery()
|
|
},
|
|
watch: {
|
|
'$route.query': 'openFromQuery',
|
|
},
|
|
computed: {
|
|
...mapGetters({
|
|
getShowChat: 'chat/showChat',
|
|
}),
|
|
},
|
|
methods: {
|
|
...mapMutations({
|
|
showChat: 'chat/SET_OPEN_CHAT',
|
|
}),
|
|
toggleSearch() {
|
|
this.showSearch = !this.showSearch
|
|
if (this.showSearch) {
|
|
this.$nextTick(() => {
|
|
this.$refs.searchPanel?.$el?.scrollIntoView({ behavior: 'smooth', block: 'start' })
|
|
})
|
|
}
|
|
},
|
|
openFromQuery() {
|
|
const { userId, groupId } = this.$route.query
|
|
if (!userId && !groupId) return
|
|
// Wait for client-only chat component to be available
|
|
const tryOpen = () => {
|
|
if (this.$refs.chat) {
|
|
if (groupId) {
|
|
this.$refs.chat.newGroupRoom(groupId)
|
|
} else if (userId) {
|
|
this.$refs.chat.newRoom(userId)
|
|
}
|
|
// Clean query params from URL
|
|
this.$router.replace({ path: '/chat', query: {} })
|
|
} else {
|
|
setTimeout(tryOpen, 100)
|
|
}
|
|
}
|
|
tryOpen()
|
|
},
|
|
addChatRoom(user) {
|
|
this.$refs.chat.newRoom(user)
|
|
},
|
|
addGroupChatRoom(groupId) {
|
|
this.$refs.chat.newGroupRoom(groupId)
|
|
},
|
|
showRoom(roomId) {
|
|
this.showChat({ showChat: true, chatUserId: roomId })
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@media (max-width: 768px) {
|
|
.layout-default:has(.chat-page) {
|
|
> .ds-container {
|
|
max-width: 100% !important;
|
|
padding-left: 0 !important;
|
|
padding-right: 0 !important;
|
|
}
|
|
.main-container {
|
|
padding-top: 0 !important;
|
|
padding-bottom: 0 !important;
|
|
}
|
|
.chat-page {
|
|
padding-top: var(--header-height, 66px);
|
|
height: 100dvh;
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
> * {
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
> :last-child {
|
|
flex: 1;
|
|
min-height: 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|