aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/api.js13
-rw-r--r--src/modules/chat.js33
-rw-r--r--src/modules/users.js12
3 files changed, 47 insertions, 11 deletions
diff --git a/src/modules/api.js b/src/modules/api.js
index e61382eb..ccd6cfb7 100644
--- a/src/modules/api.js
+++ b/src/modules/api.js
@@ -1,10 +1,12 @@
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
import {isArray} from 'lodash'
+import { Socket } from 'phoenix'
const api = {
state: {
backendInteractor: backendInteractorService(),
- fetchers: {}
+ fetchers: {},
+ socket: null
},
mutations: {
setBackendInteractor (state, backendInteractor) {
@@ -15,6 +17,9 @@ const api = {
},
removeFetcher (state, {timeline}) {
delete state.fetchers[timeline]
+ },
+ setSocket (state, socket) {
+ state.socket = socket
}
},
actions: {
@@ -37,6 +42,12 @@ const api = {
const fetcher = store.state.fetchers[timeline]
window.clearInterval(fetcher)
store.commit('removeFetcher', {timeline})
+ },
+ initializeSocket (store, token) {
+ // Set up websocket connection
+ let socket = new Socket('/socket', {params: {token: token}})
+ socket.connect()
+ store.dispatch('initializeChat', socket)
}
}
}
diff --git a/src/modules/chat.js b/src/modules/chat.js
new file mode 100644
index 00000000..b1244ebe
--- /dev/null
+++ b/src/modules/chat.js
@@ -0,0 +1,33 @@
+const chat = {
+ state: {
+ messages: [],
+ channel: null
+ },
+ 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)
+ }
+ },
+ actions: {
+ initializeChat (store, socket) {
+ const channel = socket.channel('chat:public')
+ 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 chat
diff --git a/src/modules/users.js b/src/modules/users.js
index a75271a4..8303ecc1 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -1,7 +1,6 @@
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
import { compact, map, each, merge } from 'lodash'
import { set } from 'vue'
-import { Socket } from 'phoenix'
// TODO: Unify with mergeOrAdd in statuses.js
export const mergeOrAdd = (arr, obj, item) => {
@@ -20,9 +19,6 @@ export const mergeOrAdd = (arr, obj, item) => {
}
export const mutations = {
- setSocket (state, socket) {
- state.socket = socket
- },
setMuted (state, { user: {id}, muted }) {
const user = state.usersObject[id]
set(user, 'muted', muted)
@@ -54,8 +50,7 @@ export const defaultState = {
currentUser: false,
loggingIn: false,
users: [],
- usersObject: {},
- socket: null
+ usersObject: {}
}
const users = {
@@ -103,10 +98,7 @@ const users = {
commit('setBackendInteractor', backendInteractorService(userCredentials))
if (user.token) {
- // Set up websocket connection
- let socket = new Socket('/socket', {params: {token: user.token}})
- socket.connect()
- store.commit('setSocket', socket)
+ store.dispatch('initializeSocket', user.token)
}
// Start getting fresh tweets.