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 })