32 lines
790 B
JavaScript
32 lines
790 B
JavaScript
import { defineStore } from 'pinia'
|
|
|
|
export const useShoutStore = defineStore('shout', {
|
|
state: () => ({
|
|
messages: [],
|
|
channel: { state: '' },
|
|
joined: false
|
|
}),
|
|
actions: {
|
|
initializeShout (socket) {
|
|
const channel = socket.channel('chat:public')
|
|
channel.joinPush.receive('ok', () => {
|
|
this.joined = true
|
|
})
|
|
channel.onClose(() => {
|
|
this.joined = false
|
|
})
|
|
channel.onError(() => {
|
|
this.joined = false
|
|
})
|
|
channel.on('new_msg', (msg) => {
|
|
this.messages.push(msg)
|
|
this.messages = this.messages.slice(-19, 20)
|
|
})
|
|
channel.on('messages', ({ messages }) => {
|
|
this.messages = messages.slice(-19, 20)
|
|
})
|
|
channel.join()
|
|
this.channel = channel
|
|
}
|
|
}
|
|
})
|