aboutsummaryrefslogtreecommitdiff
path: root/src/modules/shout.js
blob: 88aefbfea806577c6a8c865226a919c0191a9a72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
const shout = {
  state: {
    messages: [],
    channel: { state: '' },
    joined: false
  },
  mutations: {
    setChannel (state, channel) {
      state.channel = channel
    },
    addMessage (state, message) {
      state.messages.push(message)
      state.messages = state.messages.slice(-19, 20)
    },
    setMessages (state, messages) {
      state.messages = messages.slice(-19, 20)
    },
    setJoined (state, joined) {
      state.joined = joined
    }
  },
  actions: {
    initializeShout (store, socket) {
      const channel = socket.channel('chat:public')
      channel.joinPush.receive('ok', () => {
        store.commit('setJoined', true)
      })
      channel.onClose(() => {
        store.commit('setJoined', false)
      })
      channel.onError(() => {
        store.commit('setJoined', false)
      })
      channel.on('new_msg', (msg) => {
        store.commit('addMessage', msg)
      })
      channel.on('messages', ({ messages }) => {
        store.commit('setMessages', messages)
      })
      channel.join()
      store.commit('setChannel', channel)
    }
  }
}

export default shout