Untitled
unknown
plain_text
2 years ago
3.0 kB
7
Indexable
<script>
import { defineComponent } from 'vue';
import axios from "axios";
import AppLayout from '@/Layouts/AppLayout.vue';
import MessageContainer from "@/Pages/Chat/messageContainer.vue";
import InputMessage from "@/Pages/Chat/InputMessage.vue";
import ChatRoomSelection from "@/Pages/Chat/chatRoomSelection.vue";
export default defineComponent({
components: {
ChatRoomSelection,
AppLayout,
MessageContainer,
InputMessage
},
data: function (){
return{
chatRooms:[],
currentRoom:[],
messages:[]
}
},
watch:{
currentRoom(val, oldVal){
if( oldVal.id ){
this.disconnect( oldVal );
}
this.connect();
}
},
methods:{
connect(){
if( this.currentRoom.id){
let vm = this;
this.getMessages();
window.Echo.private("chat." + this.currentRoom.id)
.listen('.message.new', e => {
vm.getMessages();
})
}
},
disconnect(room){
window.Echo.leave("chat." + room.id)
},
getRooms(){
axios.get('/chat/rooms')
.then(response => {
this.chatRooms = response.data;
this.setRoom( response.data[0] );
})
.catch( error => {
console.log( error );
})
},
setRoom( room ){
this.currentRoom = room;
},
getMessages(){
axios.get('/chat/room/' + this.currentRoom.id + '/messages')
.then( response => {
this.messages = response.data
})
.catch( error => {
console.log( error );
})
}
},
created() {
this.getRooms();
}
})
</script>
<template>
<AppLayout title="Dashboard">
<template #header>
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
<chat-room-selection
v-if="currentRoom.id"
:rooms="chatRooms"
:currentRoom="currentRoom"
v-on:roomchanged="setRoom( $event )"/>
</h2>
</template>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-xl sm:rounded-lg">
<message-container :messages = "messages"/>
<input-message
:room="currentRoom"
v-on:messagesent="getMessages()"
/>
</div>
</div>
</div>
</AppLayout>
</template>
Editor is loading...