/ src / store.js
store.js
  1  import { createStore } from 'vuex'
  2  
  3  import modules from './modules'
  4  import loader from './modules/loader'
  5  import eventstream from './modules/eventstream'
  6  import upgrades from './modules/upgrades'
  7  import context from './modules/context'
  8  
  9  export default createStore({
 10    modules: {
 11        loader, eventstream, upgrades, context,
 12        ao: modules.ao,
 13        members: modules.members,
 14        tasks: modules.tasks,
 15        resources: modules.resources,
 16        cash: modules.cash,
 17        sessions: modules.sessions,
 18        hashMap: modules.hashMap,
 19    },
 20    getters: {
 21        pinGroups(state){
 22            let groupings = [], uniqBase = []
 23            state.cash.pins.forEach(taskId => {
 24                let g = state.tasks[state.hashMap[taskId]]
 25                let baseSplit = g.guild.split(':')
 26                let baseG = baseSplit[0]
 27                let i = uniqBase.indexOf(baseG)
 28                if (i === -1){
 29                    uniqBase.push(baseG)
 30                    groupings.push([g.taskId])
 31                    return true
 32                } else {
 33                    groupings[i].push(g.taskId)
 34                }
 35                return false
 36            })
 37            return {
 38                uniqBase,
 39                groupings
 40            }
 41        },
 42        memberCard(state, getters){
 43            return state.tasks[state.hashMap[getters.member.memberId]]
 44        },
 45        contextCard(state){
 46            return state.tasks[state.hashMap[ state.context[state.context.length - 1]]]
 47        },
 48        contextDeck(state, getters){
 49            return getters.contextCard.subTasks
 50                .map(t => state.tasks[state.hashMap[t]])
 51        },
 52        contextCompleted(state, getters){
 53            let upValence = []
 54            let downValence = []
 55            getters.contextCard.highlights.forEach(h => {
 56                if (h.valence){
 57                    upValence.push(h.memberId)
 58                } else {
 59                    downValence.push(h.memberId)
 60                }
 61            })
 62            return getters.contextCard.completed
 63                .map(tId => state.tasks[state.hashMap[tId]])
 64                .filter(t => {
 65                    return (
 66                        upValence.every(mId => t.claimed.indexOf(mId) > -1) &&
 67                        downValence.every(mId => t.claimed.indexOf(mId) === -1)
 68                    )
 69                })
 70                .sort( (a, b) => a.lastClaimed < b.lastClaimed)
 71        },
 72        completedByColor(state, getters){
 73            let red = 0
 74            let yellow = 0
 75            let green = 0
 76            let blue = 0
 77            let purple = 0
 78            getters.contextCompleted.forEach(t => {
 79                switch (t.color){
 80                    case "red": red += t.claims.length
 81                        break
 82                    case "yellow": yellow  += t.claims.length
 83                        break
 84                    case "green": green += t.claims.length
 85                        break
 86                    case "blue": blue += t.claims.length
 87                        break
 88                    case "purple": purple += t.claims.length
 89                        break
 90                }
 91            })
 92            return {
 93                red, yellow, green, blue, purple
 94            }
 95        },
 96        contextMember(state, getters){
 97            let contextMem = false
 98            state.members.some(m => {
 99                if (m.memberId === getters.contextCard.taskId){
100                    contextMem = m
101                }
102            })
103            return contextMem
104        },
105        contextResource(state, getters){
106          let contextRes = false
107          state.resources.some(r => {
108              if (r.resourceId === getters.contextCard.taskId){
109                  contextRes = r
110              }
111          })
112          return contextRes
113        },
114        contextRelevantMembers(state, getters){
115            let byCompletion = []
116            getters.contextCard.deck.forEach(mId => {
117                byCompletion.push(mId)
118            })
119            getters.contextCompleted.forEach(c => {
120                c.claimed.forEach(mId => {
121                    if (getters.contextCard.deck.indexOf(mId) > -1){
122                        byCompletion.push(mId)
123                    }
124                })
125            })
126  
127            // Remove Non-unique values
128            return [...new Set(byCompletion)]
129        },
130  
131        // fivestack view
132        red(state, getters){
133            return getters.contextDeck.filter(d => d.color === 'red')
134        },
135        yellow(state, getters){
136            return getters.contextDeck.filter(d => d.color === 'yellow')
137        },
138        green(state, getters){
139            return getters.contextDeck.filter(d => d.color === 'green')
140        },
141        purple(state, getters){
142            return getters.contextDeck.filter(d => d.color === 'purple')
143        },
144        blue(state, getters){
145            return getters.contextDeck.filter(d => d.color === 'blue')
146        },
147        isLoggedIn(state, getters){
148            return getters.member.memberId
149        },
150        member(state){
151            let loggedInMember = {}
152            let memberId = false
153            state.sessions.some(session => {
154                if (state.loader.session === session.session){
155                    memberId = session.ownerId
156                    return true
157                }
158            })
159  
160            state.members.some( m => {
161                if (m.memberId === memberId) {
162                    Object.assign(loggedInMember, m)
163                    return true
164                }
165            })
166            return loggedInMember
167        }
168    },
169    middlewares: [],
170    strict: process.env.NODE_ENV !== 'production'
171  })