aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/api.js22
-rw-r--r--src/modules/chat.js33
-rw-r--r--src/modules/users.js4
3 files changed, 58 insertions, 1 deletions
diff --git a/src/modules/api.js b/src/modules/api.js
index e61382eb..c91fb97b 100644
--- a/src/modules/api.js
+++ b/src/modules/api.js
@@ -1,10 +1,13 @@
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,
+ chatDisabled: false
},
mutations: {
setBackendInteractor (state, backendInteractor) {
@@ -15,6 +18,12 @@ const api = {
},
removeFetcher (state, {timeline}) {
delete state.fetchers[timeline]
+ },
+ setSocket (state, socket) {
+ state.socket = socket
+ },
+ setChatDisabled (state, value) {
+ state.chatDisabled = value
}
},
actions: {
@@ -37,6 +46,17 @@ const api = {
const fetcher = store.state.fetchers[timeline]
window.clearInterval(fetcher)
store.commit('removeFetcher', {timeline})
+ },
+ initializeSocket (store, token) {
+ // Set up websocket connection
+ if (!store.state.chatDisabled) {
+ let socket = new Socket('/socket', {params: {token: token}})
+ socket.connect()
+ store.dispatch('initializeChat', socket)
+ }
+ },
+ disableChat (store) {
+ store.commit('setChatDisabled', true)
}
}
}
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 30f8dc27..8303ecc1 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -97,6 +97,10 @@ const users = {
// Set our new backend interactor
commit('setBackendInteractor', backendInteractorService(userCredentials))
+ if (user.token) {
+ store.dispatch('initializeSocket', user.token)
+ }
+
// Start getting fresh tweets.
store.dispatch('startFetching', 'friends')