/ src / modules / loader.js
loader.js
  1  import request from 'superagent'
  2  
  3  const HARDCODED_DEV_URL = 'http://localhost:8003'
  4  
  5  let ao_server
  6  
  7  if (import.meta.env.DEV) {
  8      // In dev, refer to the backend location
  9      ao_server = HARDCODED_DEV_URL
 10  } else {
 11      // When built, default to /
 12      ao_server = ''
 13  }
 14  
 15  // Consider replacing socketIO with normal websocket
 16  import io from 'socket.io-client'
 17  let socket = io(ao_server)
 18  
 19  function attachEventStream(commit, dispatch){
 20      socket.off('eventstream')
 21      socket.on('eventstream', ev => {
 22          dispatch('displayEvent', ev)
 23          commit('applyEvent', ev)
 24      })
 25  }
 26  
 27  
 28  function attachSocket(commit, dispatch, callback){
 29      socket = io(ao_server)
 30      socket.off('connect')
 31      socket.on('connect', () => {
 32          socket.emit('authentication', {
 33              session: state.session,
 34              token: state.token
 35          })
 36      })
 37  
 38      socket.off('authenticated')
 39      socket.on('authenticated', ()=> {
 40          console.log('rcv authenticated')
 41          attachEventStream(commit, dispatch)
 42          callback()
 43      })
 44  }
 45  
 46  const actions = {
 47      loadCurrent({ commit, dispatch, state, rootState }){
 48          attachSocket(commit, dispatch, () => {
 49              console.log('qual', rootState.tasks, rootState.members)
 50              commit("setReqStatus", "pending")
 51              let startTs = Date.now()
 52              if (rootState.tasks.length === 0){
 53                request
 54                    .post(ao_server + '/tasks/gg')
 55                    .set("Authorization", state.token)
 56                    .end((err, res)=> {
 57                         commit('loadCards', res.body)
 58                    })
 59              }
 60              if (rootState.members.length === 0){
 61                  request
 62                      .post(ao_server + '/state')
 63                      .set("Authorization", state.token)
 64                      .end((err, res)=>{
 65                        if (!(err || !res.body)) {
 66                          commit('setCurrent', res.body)
 67                          commit("setReqStatus", Date.now() - startTs)
 68                          res.body.sessions.forEach(s => {
 69                            if (s.session === state.session){
 70                              commit("goGo", [ s.ownerId ])
 71                            }
 72                          })
 73                        }
 74                      })
 75              }
 76          })
 77      },
 78      makeEvent({commit, state}, newEv){
 79          let startTs = Date.now()
 80          commit("setReqStatus", "pending")
 81          request
 82              .post(ao_server + '/events')
 83              .send(newEv)
 84              .set("Authorization", state.token)
 85              .end((err, res)=>{
 86                  if (err || !res.body) {
 87                      commit("setReqStatus", "failed", res.body)
 88                      console.log({err, res})
 89                  } else {
 90                      commit("setReqStatus", Date.now() - startTs)
 91                  }
 92              })
 93      }
 94  }
 95  
 96  const state = {
 97      token: '',
 98      session: '',
 99      reqStatus: 'ready',
100      pendingFlash: [0,0,0,0,0],
101  }
102  
103  const mutations = {
104      setReqStatus(loader, status){
105          loader.reqStatus = status
106      },
107      setAuth(loader, auth){
108          loader.token = auth.token
109          loader.session = auth.session
110      },
111  }
112  
113  export default {
114      state,
115      mutations,
116      actions
117  }