{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?5189","webpack:///./src/App.vue?42b0","webpack:///src/App.vue","webpack:///./src/App.vue?7283","webpack:///./src/App.vue?155a","webpack:///./src/registerServiceWorker.js","webpack:///./src/store/modules/collection.js","webpack:///./src/store/modules/members.js","webpack:///./src/store/modules/groups.js","webpack:///./src/store/modules/plays.js","webpack:///./src/store/modules/record.js","webpack:///./src/store/index.js","webpack:///./src/router/index.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/firebase.js","webpack:///./src/assets/enumGameType.js","webpack:///./src/mockData/mockShelf.js","webpack:///./src/mockData/mockMembers.js","webpack:///./src/mockData/mockHistory.js","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_e","scopedSlots","_u","fn","ref","on","_g","_b","model","callback","$$v","profileDropdown","expression","userMember","_v","_s","firstName","$event","logOut","loggedIn","mini","$vuetify","breakpoint","smAndUp","sideDrawer","_l","item","title","path","icon","stopPropagation","staticStyle","mobileDrawerBotom","class","notDisabled","staticRenderFns","components","GroupSelect","computed","methods","component","VApp","VAppBar","VAvatar","VBottomNavigation","VBottomSheet","VBtn","VCol","VContainer","VDivider","VFadeTransition","VFooter","VIcon","VImg","VList","VListItem","VListItemContent","VListItemIcon","VListItemTitle","VMain","VMenu","VNavigationDrawer","VRow","VSheet","VSpacer","VSubheader","register","process","ready","log","registered","cached","updatefound","updated","offline","namespaced","state","games","detailGame","loadingGames","loadingAddNew","loadingUpdate","loadingDelete","getters","mutations","SAVE_GAMES","SET_DETAIL_GAME","game","LOADING_STATUS_GAMES","ifLoading","LOADING_STATUS_DETAIL_GAME","loadingDetailGame","LOADING_STATUS_ADD_NEW","LOADING_STATUS_UPDATE","LOADING_STATUS_DELETE","actions","fetch","context","commit","url","rootState","groups","currentGroup","_id","axios","headers","authorization","user","idToken","response","fetchOneForDetail","id","addToCurrentGroup","newGameFormatted","board_game_id","name_original","year_published","min_players","max_players","min_playtime","max_playtime","min_age","description","description_preview","image_url","thumb_url","images","price","msrp","discount","primary_publisher","developers","artists","names","num_user_ratings","average_user_rating","official_url","rules_url","reddit_all_time_count","reddit_week_count","reddit_day_count","historical_low_price","historical_low_date","rank","trending_rank","post","dispatch","add","update","payload","currentGameId","updatedGame","put","cascadeDelete","gameToDelete","root","delete","members","detailMember","newlyAddedMember","loadingMembers","loadingDetailMember","map","member","readableDate","formatISO","parseISO","dateJoined","Date","representation","winPercentageDisplay","winRate","toFixed","SAVE_MEMBERS","SET_DETAIL_MEMBER","SET_NEWLY_ADDED_MEMBER","LOADING_STATUS_MEMBERS","LOADING_STATUS_DETAIL_MEMBER","newMember","JSON","stringify","groupId","currentMemberId","updatedMember","memberToDelete","loadingGroups","loadingCurrentGroup","ifShowJoinGroup","addByJoinCodeError","SAVE_GROUPS","SET_CURRENT_GROUP","group","LOADING_STATUS_GROUPS","LOADING_STATUS_CURRENT_GROUP","SET_SHOW_JOIN_GROUP","ifShow","SET_ADD_BY_JOIN_CODE_ERROR","addMemberToGroupByJoinCode","joinCode","setCurrentGroup","changeShowJoinGroup","plays","detailPlay","loadingPlays","loadingDetailPlay","rootGetters","play","winnerDisplay","winners","find","fullName","date","SAVE_PLAYS","SET_DETAIL_PLAY","LOADING_STATUS_PLAYS","LOADING_STATUS_DETAIL_PLAY","playToDelete","deleteFromMember","deleteFromGame","recordStep","players","recordGameType","recordPoints","recordRank","recordCoopWin","recordDescription","recordDate","loadingRecordNew","ifCanAdvance","values","indexOf","numRanked","updateRecordStep","step","updatePlayers","clearRecordValues","updateGame","updateRecordGameType","updateRecordPoints","pointAssignment","updateRecordRank","ranking","updateRecordCoopWin","ifGroupWin","updateRecordDescription","text","updateRecordDate","clearRecordState","LOADING_STATUS_RECORD_NEW","gamePlayers","playerObj","points","highestPoints","Math","max","keys","membersWithWinningPoints","filter","lowestPoints","min","newPlay","numPlayers","coopWin","Vue","use","Vuex","store","Store","registerErrorMessage","ifMemberEditComponent","ifGameEditComponent","SET_LOGGED_IN","SET_USER_DATA","SET_USER_IDTOKEN","firebaseIdToken","SET_USER_MEMBER","SET_REGISTER_ERROR_MESSAGE","errorMessage","setIfMemberEditComponent","isEditing","setIfGameEditComponent","registerNewUser","newUserInfo","newFirebaseUser","email","password","newMongoMember","lastName","profilePicture","firebaseUID","uid","completeOnboarding","onboardingComplete","createNewFirebaseUser","newUser","firebase","auth","createUserWithEmailAndPassword","responseData","updateProfile","displayName","setUserData","setLoggedIn","ifLoggedIn","setIdToken","setUserMember","collection","record","VueRouter","routes","meta","hideForAuth","requiresAuth","requiresOnboardingComplete","router","scrollBehavior","x","y","beforeEach","to","from","next","matched","some","currentUser","getIdToken","Vuetify","theme","themes","light","primary","secondary","firebaseConfig","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","initializeApp","analytics","onAuthStateChanged","gameType","POINTS","HIGH_WINS","LOW_WINS","RANKED","CO_OP","mockShelf","thumb","small","medium","large","original","publishers","mechanics","categories","designers","matches_specs","spec","weight_amount","weight_units","size_height","size_depth","size_units","size_width","mockMembers","gamesPlayed","totalWins","mockHistory","boardGameId","playersId","winnerId","enumGameType","rankWinToLose","boardWin","datePlayed","1","2","3","4","library","faPlus","faChessRook","faFistRaised","faTrophy","faDice","faChartBar","FontAwesomeIcon","FontAwesomeLayers","app","shelf","history","config","productionTip","vuetify","render","h","App","$mount"],"mappings":"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P,CACEY,GAAI,aACJZ,IAAK,gEAEP,CACEY,GAAI,aACJZ,IAAK,iEAGTkQ,UAAW,CAAC,GAAI,qBAChBlO,WAAY,GACZC,QAAS,GACTC,MAAO,CACL,gBACA,WACA,YACA,2BAEFC,iBAAkB,GAClBC,oBAAqB,mBACrBC,aACE,kLACFC,UAAW,gCACX6N,cAAe,KACfC,KAAM,GACN7N,sBAAuB,GACvBC,kBAAmB,EACnBC,iBAAkB,EAClBC,qBAAsB,KACtBC,oBAAqB,2BACrBC,KAAM,IACNC,cAAe,GAEjB,CACEjC,GAAI,aACJvJ,KAAM,QACN4J,eAAgB,KAChBC,YAAa,EACbC,YAAa,EACbC,aAAc,GACdC,aAAc,GACdC,QAAS,GACTC,YACE,yvDACFC,oBACE,2tDACFC,UACE,6FACFC,UACE,6FACFC,OAAQ,CACN+N,MACE,2FACFC,MACE,6FACFC,OACE,6FACFC,MACE,6FACFC,SACE,8FAEJ9P,IAAK,uDACL4B,MAAO,OACPC,KAAM,QACNC,SAAU,OACVC,kBAAmB,SACnBgO,WAAY,CACV,SACA,eACA,YACA,0BACA,iBAEFC,UAAW,CACT,CACEpP,GAAI,aACJZ,IAAK,gEAEP,CACEY,GAAI,aACJZ,IAAK,gEAEP,CACEY,GAAI,aACJZ,IAAK,iEAGTiQ,WAAY,CACV,CACErP,GAAI,aACJZ,IAAK,iEAGTkQ,UAAW,CAAC,gBACZlO,WAAY,GACZC,QAAS,CACP,cACA,eACA,cACA,gBACA,kBACA,gBACA,iBACA,cACA,gBACA,kBACA,wBAEFC,MAAO,CACL,yBACA,oBACA,uBACA,uBACA,mBACA,sBACA,kBACA,uBACA,kBACA,sBACA,gBACA,sBACA,mBACA,SACA,wBACA,oBACA,oBACA,uBACA,yBACA,uBACA,uBACA,4BACA,6BACA,sBACA,QACA,sBACA,qBACA,qBACA,mBACA,2BACA,2BACA,0BACA,yBACA,2BACA,qDACA,2BACA,oBACA,oBACA,qBACA,yBACA,sBACA,0BACA,wBACA,wBACA,uBACA,uBACA,eACA,oBACA,uBACA,UACA,YACA,oBACA,MACA,MACA,KA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","file":"js/app.f0e81a0a.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-07709945\":\"e17cf415\",\"chunk-27c26622\":\"4ff1442f\",\"chunk-3405610c\":\"eb28a560\",\"chunk-6d5579c8\":\"3e18d1a2\",\"chunk-7fa3858c\":\"57d9923d\",\"chunk-36700d67\":\"a6e6005a\",\"chunk-8b1e55fa\":\"1c8a773f\",\"chunk-0f983f5c\":\"908d1279\",\"chunk-672f6645\":\"35b0dd15\",\"chunk-ec2e2d12\":\"5082e4c8\",\"chunk-66c1b376\":\"8aa35a20\",\"chunk-0c28de54\":\"ebc2f886\",\"chunk-2d225be2\":\"8d185446\",\"chunk-cb1ed474\":\"e74dfa57\",\"chunk-57faf3d6\":\"c6f9c7d9\",\"chunk-14182a54\":\"01f42647\",\"chunk-2d0a43ec\":\"7105a7b6\",\"chunk-0028c112\":\"da03ba1e\",\"chunk-2d0b24d9\":\"b43873c9\",\"chunk-75174527\":\"9ac93721\",\"chunk-e88d7d70\":\"a49f8964\",\"chunk-ac20b2ec\":\"54cef903\",\"chunk-b756425c\":\"b3812b2d\",\"chunk-bcbabd06\":\"36080802\",\"chunk-2d22d70a\":\"580ec97a\",\"chunk-5e5d8550\":\"342a28c2\",\"chunk-2b962e4f\":\"d444f9ac\",\"chunk-575483de\":\"f4dbe43f\",\"chunk-08d81cfa\":\"31a2733e\",\"chunk-cfa57374\":\"c03077a8\",\"chunk-a8c81d12\":\"b1a278f4\",\"chunk-2d0cc1e8\":\"d0f06492\",\"chunk-aeac0424\":\"06ccdd7d\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-07709945\":1,\"chunk-27c26622\":1,\"chunk-3405610c\":1,\"chunk-6d5579c8\":1,\"chunk-7fa3858c\":1,\"chunk-36700d67\":1,\"chunk-8b1e55fa\":1,\"chunk-0f983f5c\":1,\"chunk-672f6645\":1,\"chunk-ec2e2d12\":1,\"chunk-66c1b376\":1,\"chunk-0c28de54\":1,\"chunk-cb1ed474\":1,\"chunk-57faf3d6\":1,\"chunk-0028c112\":1,\"chunk-e88d7d70\":1,\"chunk-ac20b2ec\":1,\"chunk-b756425c\":1,\"chunk-bcbabd06\":1,\"chunk-5e5d8550\":1,\"chunk-2b962e4f\":1,\"chunk-575483de\":1,\"chunk-08d81cfa\":1,\"chunk-cfa57374\":1,\"chunk-a8c81d12\":1,\"chunk-aeac0424\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-07709945\":\"ce2af5c2\",\"chunk-27c26622\":\"a64c1653\",\"chunk-3405610c\":\"2e1014b6\",\"chunk-6d5579c8\":\"8fc9db4f\",\"chunk-7fa3858c\":\"1ccf2aff\",\"chunk-36700d67\":\"1bbdaac2\",\"chunk-8b1e55fa\":\"c880b8ce\",\"chunk-0f983f5c\":\"ec2b69f3\",\"chunk-672f6645\":\"fbcb1f23\",\"chunk-ec2e2d12\":\"8b8853c5\",\"chunk-66c1b376\":\"608afba2\",\"chunk-0c28de54\":\"27902d06\",\"chunk-2d225be2\":\"31d6cfe0\",\"chunk-cb1ed474\":\"8284c8aa\",\"chunk-57faf3d6\":\"822b026f\",\"chunk-14182a54\":\"31d6cfe0\",\"chunk-2d0a43ec\":\"31d6cfe0\",\"chunk-0028c112\":\"4ff1dd5f\",\"chunk-2d0b24d9\":\"31d6cfe0\",\"chunk-75174527\":\"31d6cfe0\",\"chunk-e88d7d70\":\"1bbdaac2\",\"chunk-ac20b2ec\":\"4b3fadd8\",\"chunk-b756425c\":\"cab59e1c\",\"chunk-bcbabd06\":\"cab59e1c\",\"chunk-2d22d70a\":\"31d6cfe0\",\"chunk-5e5d8550\":\"7d3f0686\",\"chunk-2b962e4f\":\"b02e2882\",\"chunk-575483de\":\"94dcd77a\",\"chunk-08d81cfa\":\"255bd048\",\"chunk-cfa57374\":\"55435544\",\"chunk-a8c81d12\":\"7d3f0686\",\"chunk-2d0cc1e8\":\"31d6cfe0\",\"chunk-aeac0424\":\"5dd01877\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-app-bar',{attrs:{\"app\":\"\",\"clipped-left\":\"\",\"color\":\"primary\",\"dark\":\"\"}},[_c('router-link',{staticClass:\"d-flex align-center logo-container\",attrs:{\"to\":\"/\",\"tag\":\"div\"}},[_c('v-img',{staticClass:\"shrink mr-2\",attrs:{\"alt\":\"ScoreBoard Logo\",\"contain\":\"\",\"src\":'../img/logo/default_2.png',\"transition\":\"scale-transition\",\"width\":\"160\"}})],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-spacer'),(_vm.loggedIn)?_c('v-col',[_c('v-list-item',{staticClass:\"group-select-item-height d-none d-sm-flex group-selection-justification\"},[_c('GroupSelect',{attrs:{\"dropBelow\":true,\"dropAbove\":false}})],1)],1):_vm._e(),_c('v-col',{staticClass:\"align-self-center profile-column\"},[(_vm.loggedIn)?_c('v-menu',{attrs:{\"close-on-click\":\"\",\"close-on-content-click\":\"\",\"offset-y\":\"\",\"transition\":\"slide-y-transition\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-avatar',_vm._g(_vm._b({},'v-avatar',attrs,false),on),[_c('v-img',{staticClass:\"profile-picture-border\",attrs:{\"src\":\"https://randomuser.me/api/portraits/men/86.jpg\"}})],1)]}}],null,false,458028976),model:{value:(_vm.profileDropdown),callback:function ($$v) {_vm.profileDropdown=$$v},expression:\"profileDropdown\"}},[_c('v-list',[_c('v-subheader',[(_vm.userMember != null)?_c('span',{staticClass:\"text-truncate\"},[_vm._v(\"Hi, \"+_vm._s(_vm.userMember.firstName))]):_vm._e()]),_c('v-list-item',{staticClass:\"px-4\",attrs:{\"disabled\":\"\"},on:{\"click\":function($event){}}},[_c('v-icon',{staticClass:\"pr-3\"},[_vm._v(\"mdi-cog\")]),_c('span',{staticClass:\"mx-auto\"},[_vm._v(\"Settings\")])],1),_c('v-divider'),_c('v-list-item',{staticClass:\"px-4\",on:{\"click\":_vm.logOut}},[_c('v-icon',{staticClass:\"pr-3\"},[_vm._v(\"mdi-logout\")]),_c('span',{staticClass:\"mx-auto\"},[_vm._v(\"Log Out\")])],1)],1)],1):_vm._e()],1)],1),(!_vm.loggedIn)?_c('v-btn',{attrs:{\"to\":\"/login\",\"color\":\"secondary\"}},[_vm._v(\" Log In \")]):_vm._e()],1),(_vm.loggedIn)?_c('v-navigation-drawer',{attrs:{\"app\":\"\",\"clipped\":\"\",\"disable-route-watcher\":\"\",\"width\":175,\"mini-variant\":_vm.mini,\"permanent\":_vm.$vuetify.breakpoint.smAndUp},on:{\"update:miniVariant\":function($event){_vm.mini=$event},\"update:mini-variant\":function($event){_vm.mini=$event}},model:{value:(_vm.sideDrawer),callback:function ($$v) {_vm.sideDrawer=$$v},expression:\"sideDrawer\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"link\":\"\",\"to\":item.path}},[_c('v-list-item-icon',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-divider'),_c('v-row',[(!_vm.mini)?_c('v-spacer'):_vm._e(),(!_vm.mini)?_c('v-col',{staticClass:\"text-right\"},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();_vm.mini = !_vm.mini}}},[_c('v-icon',[_vm._v(\"mdi-chevron-left\")])],1)],1):_c('v-col',{staticClass:\"text-center\"},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();_vm.mini = !_vm.mini}}},[_c('v-icon',[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],2)],1):_vm._e(),_c('v-main',[_c('v-fade-transition',{attrs:{\"mode\":\"out-in\",\"duration\":\"150\"}},[_c('router-view',{staticClass:\"full-screen\"})],1),_c('v-footer',{attrs:{\"color\":\"primary\"}},[_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-col',{staticClass:\"text-center py-0\",attrs:{\"cols\":\"12\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"color\":\"white\",\"exact\":\"\",\"href\":\"https://github.com/smophat7/score-board-pwa\",\"target\":\"_blank\"}},[_c('v-icon',[_vm._v(\"mdi-github\")])],1)],1),_c('v-col',{staticClass:\"text-center py-0\",attrs:{\"cols\":\"12\"}},[_c('p',{staticClass:\"my-auto\",staticStyle:{\"color\":\"white\"}},[_vm._v(\"© 2022 Spencer Moffat\")])]),_c('br')],1)],1)],1),(_vm.loggedIn)?_c('v-bottom-sheet',{staticClass:\"d-sm-none\",model:{value:(_vm.mobileDrawerBotom),callback:function ($$v) {_vm.mobileDrawerBotom=$$v},expression:\"mobileDrawerBotom\"}},[_c('v-sheet',{staticClass:\"text-center\",attrs:{\"height\":\"200px\"}},[_c('v-container',[_c('GroupSelect',{attrs:{\"dropBelow\":false,\"dropAbove\":true}})],1),_c('div',{staticClass:\"py-3\"},[_vm._v(\" More options, pages, and account controls can go here \")]),_c('v-btn',{staticClass:\"mt-6\",attrs:{\"text\":\"\",\"color\":\"red\"},on:{\"click\":function($event){_vm.mobileDrawerBotom = !_vm.mobileDrawerBotom}}},[_vm._v(\" Close \")])],1)],1):_vm._e(),(_vm.loggedIn)?_c('v-bottom-navigation',{staticClass:\"d-sm-none\",attrs:{\"app\":\"\",\"color\":\"primary\",\"grow\":\"\"}},[_vm._l((_vm.items),function(item){return _c('v-btn',{key:item.title,attrs:{\"link\":\"\",\"to\":item.path}},[_c('span',[_vm._v(_vm._s(item.title))]),_c('v-icon',[_vm._v(_vm._s(item.icon))])],1)}),_c('v-btn',{class:{ 'v-btn--active': _vm.notDisabled },attrs:{\"active-class\":\"no-active\"},on:{\"click\":function($event){_vm.mobileDrawerBotom = !_vm.mobileDrawerBotom, _vm.notDisabled = false}}},[_c('span',[_vm._v(\"More\")]),_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1)],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=9243e4aa&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBottomNavigation } from 'vuetify/lib/components/VBottomNavigation';\nimport { VBottomSheet } from 'vuetify/lib/components/VBottomSheet';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFadeTransition } from 'vuetify/lib/components/transitions';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VApp,VAppBar,VAvatar,VBottomNavigation,VBottomSheet,VBtn,VCol,VContainer,VDivider,VFadeTransition,VFooter,VIcon,VImg,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle,VMain,VMenu,VNavigationDrawer,VRow,VSheet,VSpacer,VSubheader})\n","/* eslint-disable no-console */\n\nimport { register } from \"register-service-worker\";\n\nif (process.env.NODE_ENV === \"production\") {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n \"App is being served from cache by a service worker.\\n\" +\n \"For more details, visit https://goo.gl/AFskqB\"\n );\n },\n registered() {\n console.log(\"Service worker has been registered.\");\n },\n cached() {\n console.log(\"Content has been cached for offline use.\");\n },\n updatefound() {\n console.log(\"New content is downloading.\");\n },\n updated() {\n console.log(\"New content is available; please refresh.\");\n },\n offline() {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n },\n error(error) {\n console.error(\"Error during service worker registration:\", error);\n }\n });\n}\n","import axios from \"axios\";\n\nexport default {\n namespaced: true,\n state: {\n games: [],\n detailGame: null,\n loadingGames: false,\n loadingAddNew: false,\n loadingUpdate: false,\n loadingDelete: false,\n },\n getters: { },\n mutations: {\n SAVE_GAMES(state, games) {\n state.games = games;\n },\n SET_DETAIL_GAME(state, game) {\n state.detailGame = game;\n },\n LOADING_STATUS_GAMES(state, ifLoading) {\n state.loadingGames = ifLoading;\n },\n LOADING_STATUS_DETAIL_GAME(state, ifLoading) {\n state.loadingDetailGame = ifLoading;\n },\n LOADING_STATUS_ADD_NEW(state, ifLoading) {\n state.loadingAddNew = ifLoading;\n },\n LOADING_STATUS_UPDATE(state, ifLoading) {\n state.loadingUpdate = ifLoading;\n },\n LOADING_STATUS_DELETE(state, ifLoading) {\n state.loadingDelete = ifLoading;\n },\n },\n actions: {\n async fetch(context) {\n context.commit(\"LOADING_STATUS_GAMES\", true);\n // let url = \"/api/collection\";\n let url = \"/api/collection/\" + context.rootState.groups.currentGroup._id;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SAVE_GAMES\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_GAMES\", false);\n },\n async fetchOneForDetail(context, id) {\n context.commit(\"LOADING_STATUS_DETAIL_GAME\", true);\n let url = \"/api/collection/single/\" + id;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_DETAIL_GAME\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_DETAIL_GAME\", false);\n },\n async addToCurrentGroup(context, game) {\n context.commit(\"LOADING_STATUS_ADD_NEW\", true);\n\n // Only keep the attributes from the Board Game Atlas\n // API that I have in my mongoose schema\n let newGameFormatted = {\n board_game_id: game.id,\n name: game.name,\n name_original: game.name,\n year_published: game.year_published,\n min_players: game.min_players,\n max_players: game.max_players,\n min_playtime: game.min_playtime,\n max_playtime: game.max_playtime,\n min_age: game.min_age,\n description: game.description,\n description_preview: game.description_preview,\n image_url: game.image_url,\n thumb_url: game.thumb_url,\n images: game.images,\n url: game.url,\n price: game.price,\n msrp: game.msrp,\n discount: game.discount,\n primary_publisher: game.primary_publisher.name,\n developers: game.developers,\n artists: game.artists,\n names: game.names,\n num_user_ratings: game.num_user_ratings,\n average_user_rating: game.average_user_rating,\n official_url: game.official_url,\n rules_url: game.rules_url,\n reddit_all_time_count: game.reddit_all_time_count,\n reddit_week_count: game.reddit_week_count,\n reddit_day_count: game.reddit_day_count,\n historical_low_price: game.historical_low_price,\n historical_low_date: game.historical_low_date,\n rank: game.rank,\n trending_rank: game.trending_rank,\n };\n let url = \"/api/collection/\" + context.rootState.groups.currentGroup._id;\n try {\n await axios.post(url, newGameFormatted, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_ADD_NEW\", false);\n await context.dispatch(\"fetch\");\n },\n async add(context, game) {\n context.commit(\"LOADING_STATUS_ADD_NEW\", true);\n\n // Only keep the attributes from the Board Game Atlas\n // API that I have in my mongoose schema\n let newGameFormatted = {\n board_game_id: game.id,\n name: game.name,\n name_original: game.name,\n year_published: game.year_published,\n min_players: game.min_players,\n max_players: game.max_players,\n min_playtime: game.min_playtime,\n max_playtime: game.max_playtime,\n min_age: game.min_age,\n description: game.description,\n description_preview: game.description_preview,\n image_url: game.image_url,\n thumb_url: game.thumb_url,\n images: game.images,\n url: game.url,\n price: game.price,\n msrp: game.msrp,\n discount: game.discount,\n primary_publisher: game.primary_publisher.name,\n developers: game.developers,\n artists: game.artists,\n names: game.names,\n num_user_ratings: game.num_user_ratings,\n average_user_rating: game.average_user_rating,\n official_url: game.official_url,\n rules_url: game.rules_url,\n reddit_all_time_count: game.reddit_all_time_count,\n reddit_week_count: game.reddit_week_count,\n reddit_day_count: game.reddit_day_count,\n historical_low_price: game.historical_low_price,\n historical_low_date: game.historical_low_date,\n rank: game.rank,\n trending_rank: game.trending_rank,\n };\n let url = \"/api/collection\";\n try {\n await axios.post(url, newGameFormatted, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_ADD_NEW\", false);\n await context.dispatch(\"fetch\");\n },\n async update(context, payload) {\n let currentGameId = payload.currentGameId;\n let updatedGame = payload.updatedGame;\n context.commit(\"LOADING_STATUS_UPDATE\", true);\n let url = \"/api/collection/\" + currentGameId;\n try {\n let response = await axios.put(url, updatedGame, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_DETAIL_GAME\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_UPDATE\", false);\n await context.dispatch(\"fetch\");\n },\n async cascadeDelete(context, gameToDelete) {\n context.commit(\"LOADING_STATUS_DELETE\", true);\n await context.dispatch(\"plays/deleteFromGame\", gameToDelete, { root: true });\n await context.dispatch(\"delete\", gameToDelete);\n context.commit(\"LOADING_STATUS_DELETE\", false);\n },\n async delete(context, gameToDelete) {\n let url = \"/api/collection/\" + gameToDelete._id;\n try {\n await axios.delete(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n await context.dispatch(\"fetch\");\n },\n },\n}","import axios from \"axios\";\nimport { formatISO, parseISO } from 'date-fns';\n\nexport default {\n namespaced: true,\n state: {\n members: [],\n detailMember: null,\n newlyAddedMember: null,\n loadingMembers: false,\n loadingDetailMember: false,\n loadingAddNew: false,\n loadingUpdate: false,\n loadingDelete: false,\n },\n getters: {\n members: state => {\n return state.members.map(member => {\n return {\n ...member,\n readableDate: formatISO(parseISO(member.dateJoined, 'YYYY-MM-DD', new Date()), {representation: 'date'}),\n winPercentageDisplay: (member.winRate * 100).toFixed(1) + \"%\",\n }\n });\n },\n detailMember: state => {\n state.detailMember[\"readableDateJoined\"] = formatISO(parseISO(state.detailMember.dateJoined, 'YYYY-MM-DD', new Date()), {representation: 'date'});\n state.detailMember['winPercentageDisplay'] = (state.detailMember.winRate * 100).toFixed(1) + \"%\";\n return state.detailMember;\n },\n },\n mutations: {\n SAVE_MEMBERS(state, members) {\n state.members = members;\n },\n SET_DETAIL_MEMBER(state, member) {\n state.detailMember = member;\n },\n SET_NEWLY_ADDED_MEMBER(state, member) {\n state.newlyAddedMember = member;\n },\n LOADING_STATUS_MEMBERS(state, ifLoading) {\n state.loadingMembers = ifLoading;\n },\n LOADING_STATUS_DETAIL_MEMBER(state, ifLoading) {\n state.loadingDetailMember = ifLoading;\n },\n LOADING_STATUS_ADD_NEW(state, ifLoading) {\n state.loadingAddNew = ifLoading;\n },\n LOADING_STATUS_UPDATE(state, ifLoading) {\n state.loadingUpdate = ifLoading;\n },\n LOADING_STATUS_DELETE(state, ifLoading) {\n state.loadingDelete = ifLoading;\n },\n },\n actions: {\n async fetch(context) {\n context.commit(\"LOADING_STATUS_MEMBERS\", true);\n // let url = \"/api/members\";\n let url = \"/api/members/\" + context.rootState.groups.currentGroup._id;\n // let url = \"/api/groups/\" + context.rootState.groups.currentGroup._id + \"/members\"\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n // console.log(JSON.stringify(response));\n context.commit(\"SAVE_MEMBERS\", response.data);\n }\n catch (error) {\n console.log(error)\n }\n context.commit(\"LOADING_STATUS_MEMBERS\", false);\n },\n async fetchOneForDetail(context, id) {\n context.commit(\"LOADING_STATUS_DETAIL_MEMBER\", true);\n let url = \"/api/members/single/\" + id;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_DETAIL_MEMBER\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_DETAIL_MEMBER\", false);\n },\n async add(context, newMember) {\n context.commit(\"LOADING_STATUS_ADD_NEW\", true);\n let url = \"/api/members\";\n try {\n let response = await axios.post(url, newMember, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_NEWLY_ADDED_MEMBER\", JSON.stringify(response.data));\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_ADD_NEW\", false);\n },\n async addToCurrentGroup(context, newMember) {\n context.commit(\"LOADING_STATUS_ADD_NEW\", true);\n // console.log(\"addNewMember: \" + newMember);\n // console.log(\"addNewMember.firstName: \" + newMember.firstName);\n let groupId = context.rootState.groups.currentGroup._id;\n let url = \"/api/members/\" + groupId;\n try {\n // let response = await axios.post(url, newMember, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n let response = await axios.post(url, newMember, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n // console.log(\"stringified response from adding new Mongo member: \" + response.data);\n context.commit(\"SET_NEWLY_ADDED_MEMBER\", JSON.stringify(response.data));\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_ADD_NEW\", false);\n // await context.dispatch(\"fetch\");\n },\n async update(context, payload) {\n let currentMemberId = payload.currentMemberId;\n let updatedMember = payload.updatedMember;\n context.commit(\"LOADING_STATUS_UPDATE\", true);\n let url = \"/api/members/\" + currentMemberId;\n try {\n let response = await axios.put(url, updatedMember, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_DETAIL_MEMBER\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_UPDATE\", false);\n await context.dispatch(\"fetch\");\n },\n async cascadeDelete(context, memberToDelete) {\n context.commit(\"LOADING_STATUS_DELETE\", true);\n await context.dispatch(\"plays/deleteFromMember\", memberToDelete, { root: true });\n await context.dispatch(\"delete\", memberToDelete);\n context.commit(\"LOADING_STATUS_DELETE\", false);\n },\n async delete(context, memberToDelete) {\n let url = \"/api/members/\" + memberToDelete._id;\n try {\n await axios.delete(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n await context.dispatch(\"fetch\");\n },\n }\n}","import axios from \"axios\";\n\nexport default {\n namespaced: true,\n state: {\n groups: [],\n currentGroup: null,\n loadingGroups: false,\n loadingCurrentGroup: false,\n loadingAddNew: false,\n loadingUpdate: false,\n loadingDelete: false,\n ifShowJoinGroup: false,\n addByJoinCodeError: null,\n },\n getters: { },\n mutations: {\n SAVE_GROUPS(state, groups) {\n state.groups = groups;\n },\n SET_CURRENT_GROUP(state, group) {\n state.currentGroup = group;\n },\n LOADING_STATUS_GROUPS(state, ifLoading) {\n state.loadingGroups = ifLoading;\n },\n LOADING_STATUS_CURRENT_GROUP(state, ifLoading) {\n state.loadingCurrentGroup = ifLoading;\n },\n LOADING_STATUS_ADD_NEW(state, ifLoading) {\n state.loadingAddNew = ifLoading;\n },\n LOADING_STATUS_UPDATE(state, ifLoading) {\n state.loadingUpdate = ifLoading;\n },\n LOADING_STATUS_DELETE(state, ifLoading) {\n state.loadingDelete = ifLoading;\n },\n SET_SHOW_JOIN_GROUP(state, ifShow) {\n state.ifShowJoinGroup = ifShow;\n },\n SET_ADD_BY_JOIN_CODE_ERROR(state, error) {\n state.addByJoinCodeError = error;\n },\n },\n actions: {\n async fetch(context) {\n context.commit(\"LOADING_STATUS_GROUPS\", true);\n let url = \"/api/groups/\" + context.rootState.user.member._id;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SAVE_GROUPS\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_GROUPS\", false);\n },\n // async fetchOneForDetail(context, id) {\n // context.commit(\"LOADING_STATUS_CURRENT_GROUP\", true);\n // let url = \"/api/groups/\" + id;\n // try {\n // let response = await axios.get(url);\n // context.commit(\"SET_CURRENT_GROUP\", response.data);\n // }\n // catch (error) {\n // console.log(error);\n // }\n // context.commit(\"LOADING_STATUS_CURRENT_GROUP\", false);\n // },\n async add(context, group) {\n context.commit(\"LOADING_STATUS_ADD_NEW\", true);\n let url = \"/api/groups\";\n try {\n let response = await axios.post(url, group, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.dispatch(\"setCurrentGroup\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_ADD_NEW\", false);\n await context.dispatch(\"fetch\");\n },\n // WASN'T QUITE WORKING WHEN I LAST LEFT IT\n // async addMemberToGroup(context, member) {\n // console.log(\"newlyAddedMember to add to group is is: \" + member);\n // console.log(\"current Group id is: \" + context.state.currentGroup._id);\n // let url = \"api/groups/addMemberToGroup/\" + context.state.currentGroup._id;\n // try {\n // await axios.put(url, member, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n // }\n // catch(error) {\n // console.log(error);\n // }\n // },\n async addMemberToGroupByJoinCode(context, joinCode) {\n let url = \"api/groups/addMemberToGroupByJoinCode/\" + joinCode;\n try {\n let response = await axios.put(url, context.rootState.user.member, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.dispatch(\"setCurrentGroup\", response.data);\n }\n catch(error) {\n context.commit(\"SET_ADD_BY_JOIN_CODE_ERROR\", error.response.data.message);\n }\n },\n setCurrentGroup(context, currentGroup) {\n context.commit(\"SET_CURRENT_GROUP\", currentGroup);\n },\n changeShowJoinGroup(context, ifShow) {\n context.commit(\"SET_SHOW_JOIN_GROUP\", ifShow);\n },\n // async update(context, payload) {\n // let currentGameId = payload.currentGameId;\n // let updatedGame = payload.updatedGame;\n // context.commit(\"LOADING_STATUS_UPDATE\", true);\n // let url = \"/api/collection/\" + currentGameId;\n // try {\n // let response = await axios.put(url, updatedGame);\n // context.commit(\"SET_DETAIL_GROUP\", response.data);\n // }\n // catch (error) {\n // console.log(error);\n // }\n // context.commit(\"LOADING_STATUS_UPDATE\", false);\n // await context.dispatch(\"fetch\");\n // },\n // async cascadeDelete(context, gameToDelete) {\n // context.commit(\"LOADING_STATUS_DELETE\", true);\n // await context.dispatch(\"plays/deleteFromGame\", gameToDelete, { root: true });\n // await context.dispatch(\"delete\", gameToDelete);\n // context.commit(\"LOADING_STATUS_DELETE\", false);\n // },\n // async delete(context, gameToDelete) {\n // let url = \"/api/collection/\" + gameToDelete._id;\n // try {\n // await axios.delete(url);\n // }\n // catch (error) {\n // console.log(error);\n // }\n // await context.dispatch(\"fetch\");\n // },\n },\n}","import axios from \"axios\";\nimport { formatISO, parseISO } from 'date-fns';\n\nexport default {\n namespaced: true,\n state: {\n plays: [],\n detailPlay: null,\n loadingPlays: false,\n loadingDetailPlay: false,\n loadingAddNew: false,\n // loadingUpdate: false,\n loadingDelete: false,\n },\n getters: {\n plays: (state, getters, rootState, rootGetters) => {\n // Returns array of Play objects with some added properties for display purposes\n return state.plays.map(play => { \n // Create winnerDisplay (\"Multiple\", \"Group\", someone's name, etc.)\n let winnerDisplay = \"\";\n if (play.type === \"points.high_wins\" || play.type === \"points.low_wins\" || play.type === \"ranked\") {\n if (play.winners.length === 0) {\n winnerDisplay = \"None\";\n }\n if (play.winners.length === 1) {\n winnerDisplay = rootGetters[\"members/members\"].find((member) => {\n return member._id === play.winners[0]._id;\n }).fullName;\n }\n else {\n winnerDisplay = \"Multiple\";\n }\n }\n else { // TO-DO: what happens with co-op games?\n winnerDisplay = \"???\";\n }\n\n // Return the modified Play object\n return {\n ...play,\n readableDate: formatISO(parseISO(play.date, 'YYYY-MM-DD', new Date()), {representation: 'date'}),\n winnerDisplay: winnerDisplay,\n }\n });\n },\n detailPlay: state => {\n state.detailPlay[\"readableDateJoined\"] = formatISO(parseISO(state.detailPlay.date, 'YYYY-MM-DD', new Date()), {representation: 'date'});\n return state.detailPlay;\n },\n },\n mutations: {\n SAVE_PLAYS(state, plays) {\n state.plays = plays;\n },\n SET_DETAIL_PLAY(state, play) {\n state.detailPlay = play;\n },\n LOADING_STATUS_PLAYS(state, ifLoading) {\n state.loadingPlays = ifLoading;\n },\n LOADING_STATUS_DETAIL_PLAY(state, ifLoading) {\n state.loadingDetailPlay = ifLoading;\n },\n LOADING_STATUS_ADD_NEW(state, ifLoading) {\n state.loadingAddNew = ifLoading;\n },\n // LOADING_STATUS_UPDATE(state, ifLoading) {\n // state.loadingUpdate = ifLoading;\n // },\n LOADING_STATUS_DELETE(state, ifLoading) {\n state.loadingDelete = ifLoading;\n },\n },\n actions: {\n async fetch(context) {\n context.commit(\"LOADING_STATUS_PLAYS\", true);\n let url = \"/api/plays/\" + context.rootState.groups.currentGroup._id;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SAVE_PLAYS\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_PLAYS\", false);\n },\n async fetchOneForDetail(context, id) {\n context.commit(\"LOADING_STATUS_DETAIL_PLAY\", true);\n let url = \"/api/plays/single/\" + id;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_DETAIL_PLAY\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_DETAIL_PLAY\", false);\n },\n async delete(context, playToDelete) {\n context.commit(\"LOADING_STATUS_DELETE\", true);\n let url = \"/api/plays/\" + playToDelete._id;\n try {\n await axios.delete(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_DELETE\", false);\n await context.dispatch(\"fetch\");\n },\n async deleteFromMember(context, memberToDelete) {\n context.commit(\"LOADING_STATUS_DELETE\", true);\n let url = \"/api/plays/fromMembers/\" + memberToDelete._id;\n try {\n await axios.delete(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_DELETE\", false);\n await context.dispatch(\"fetch\");\n },\n async deleteFromGame(context, gameToDelete) {\n context.commit(\"LOADING_STATUS_DELETE\", true);\n let url = \"/api/plays/fromGames/\" + gameToDelete._id;\n try {\n await axios.delete(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_DELETE\", false);\n await context.dispatch(\"fetch\");\n }\n }\n}","import axios from \"axios\";\nimport { parseISO } from \"date-fns\";\n\nexport default {\n namespaced: true,\n state: {\n recordStep: 1, // Which step of the record game wizard the user is in\n players: [], // Players in the game play being recorded\n game: null, // Which game is being recorded\n recordGameType: \"\", // Which game type is being recorded\n recordPoints: null, // In points game, an object with keys (member id) to value (points)\n recordRank: [], // In ranked game, array of arrays for each possible ranked position\n recordCoopWin: false, // In co-op, true if the players won\n recordDescription: \"\", // What written description is to be recorded\n recordDate: new Date(), // Date the game was played\n loadingRecordNew: false,\n },\n getters: {\n ifCanAdvance: state => {\n switch (state.recordStep) {\n case 1: // User has selected the game\n return state.game != null;\n case 2: // User has selected at least one player\n return state.players.length > 0;\n case 3: // User has selected a game type\n return state.recordGameType != \"\";\n case 4: // User has assigned points for all players\n // I DON'T LIKE HOW HACKY THIS IS. I NEED TO BE ABLE TO ACCESS THE ENUM DIRECTLY\n if (state.recordGameType === \"points.high_wins\" ||\n state.recordGameType === \"points.low_wins\") {\n if (state.recordPoints != null) {\n return (Object.values(state.recordPoints).indexOf(\"\") <= -1 && Object.values(state.recordPoints).indexOf(null) <= -1);\n }\n else { return false; }\n }\n else if (state.recordGameType === \"ranked\") {\n let numRanked = 0;\n for (let i = 0; i < state.recordRank.length; i++) {\n numRanked += state.recordRank[i].length;\n }\n return numRanked === state.players.length;\n }\n else if (state.recordGameType === \"co_op\") {\n return true;\n }\n }\n },\n },\n mutations: {\n updateRecordStep(state, step) {\n state.recordStep = step;\n },\n updatePlayers(state, players) {\n state.players = players;\n },\n clearRecordValues(state) {\n state.players = [];\n },\n updateGame(state, game) {\n state.game = game;\n },\n updateRecordGameType(state, type) {\n state.recordGameType = type;\n },\n updateRecordPoints(state, pointAssignment) {\n state.recordPoints = pointAssignment;\n },\n updateRecordRank(state, ranking) {\n state.recordRank = ranking;\n },\n updateRecordCoopWin(state, ifGroupWin) {\n state.recordCoopWin = ifGroupWin;\n },\n updateRecordDescription(state, text) {\n state.recordDescription = text;\n },\n updateRecordDate(state, date) {\n state.recordDate = date;\n },\n clearRecordState(state) {\n state.recordStep = 1;\n state.players = [];\n state.game = null;\n state.recordRank = null;\n state.recordCoopWin = false;\n state.recordDescription = \"\";\n state.recordDate = new Date();\n },\n LOADING_STATUS_RECORD_NEW(state, ifLoading) {\n state.loadingRecordNew = ifLoading;\n },\n },\n actions: {\n async add(context) {\n context.commit(\"LOADING_STATUS_RECORD_NEW\", true);\n\n // Create array of member ids instead of member objects to include in newPlay for DB\n let gamePlayers = context.state.players.map(playerObj => {\n return playerObj._id;\n });\n\n // Get an array of the winner(s) - Member IDs\n let winners = [];\n switch (context.state.recordGameType) {\n case \"points.high_wins\":\n let points = Object.values(context.state.recordPoints);\n let highestPoints = Math.max(...points);\n let keys = Object.keys(context.state.recordPoints);\n let membersWithWinningPoints = keys.filter(key => {\n return context.state.recordPoints[key] === highestPoints;\n })\n winners = membersWithWinningPoints;\n break;\n case \"points.low_wins\":\n points = Object.values(context.state.recordPoints);\n let lowestPoints = Math.min(...points);\n keys = Object.keys(context.state.recordPoints);\n membersWithWinningPoints = keys.filter(key => {\n return context.state.recordPoints[key] === lowestPoints;\n })\n winners = membersWithWinningPoints;\n break;\n case \"ranked\":\n for (let i = 0; i < context.state.recordRank.length; i++) {\n if (context.state.recordRank[i] != null) {\n winners = context.state.recordRank[i]\n break;\n }\n }\n break;\n case \"co_op\": // DO THIS ONE LATER\n winners = [];\n break;\n default:\n break;\n }\n\n // Create new play object to post to DB\n let newPlay = {\n players: gamePlayers,\n winners: winners,\n numPlayers: gamePlayers.length,\n game: context.state.game._id,\n type: context.state.recordGameType,\n points: context.state.recordPoints,\n ranking: context.state.recordRank,\n coopWin: context.state.recordCoopWin,\n description: context.state.recordDescription,\n date: parseISO(context.state.recordDate, 'YYYY-MM-DD', new Date()),\n };\n\n // Post new Play object to DB\n let url = \"/api/plays/\" + context.rootState.groups.currentGroup._id;\n try {\n await axios.post(url, newPlay, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n }\n catch (error) {\n console.log(error);\n }\n context.commit(\"LOADING_STATUS_RECORD_NEW\", false);\n }\n },\n}","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport axios from \"axios\";\nimport firebase from \"firebase\";\n\nimport collection from \"./modules/collection\";\nimport members from \"./modules/members\";\nimport groups from \"./modules/groups\";\nimport plays from \"./modules/plays\";\nimport record from \"./modules/record\";\n\nVue.use(Vuex);\n\nconst store = new Vuex.Store({\n state: {\n user: {\n loggedIn: false,\n data: null,\n idToken: null,\n member: null,\n },\n registerErrorMessage: null,\n ifMemberEditComponent: false, // Controls what to view within MemberDetails.vue\n ifGameEditComponent: false, // Controls what to view within GameDetails.vue\n },\n getters: { },\n mutations: {\n SET_LOGGED_IN(state, value) {\n state.user.loggedIn = value;\n },\n SET_USER_DATA(state, data) {\n state.user.data = data;\n },\n SET_USER_IDTOKEN(state, firebaseIdToken) {\n state.user.idToken = firebaseIdToken;\n },\n SET_USER_MEMBER(state, userMember) {\n state.user.member = userMember;\n },\n SET_REGISTER_ERROR_MESSAGE(state, errorMessage) {\n state.registerErrorMessage = errorMessage;\n },\n setIfMemberEditComponent(state, isEditing) {\n state.ifMemberEditComponent = isEditing;\n },\n setIfGameEditComponent(state, isEditing) {\n state.ifGameEditComponent = isEditing;\n },\n },\n actions: {\n // resetToBaseState(context) {\n // console.log(\"reseting to base state\");\n // context.commit(\"SET_USER_IDTOKEN\", null);\n // context.commit(\"SET_USER_MEMBER\", null);\n // context.commit(\"SET_REGISTER_ERROR_MESSAGE\", null);\n // context.dispatch(\"groups/setCurrentGroup\", null, {root:true});\n // },\n // async registerNewUser(context, newUserInfo) {\n // // Create a new Firebase user\n // let newFirebaseUser = {\n // email: newUserInfo.email,\n // password: newUserInfo.password,\n // }\n // await context.dispatch('createNewFirebaseUser', newFirebaseUser);\n \n // // Create a new MongoDB member and default with group\n // let newMongoMember = {\n // firstName: newUserInfo.firstName,\n // lastName: newUserInfo.lastName,\n // profilePicture: \"default-profile.jpg\", // EDIT to supply individualized URL or picture data\n // firebaseUID: context.state.user.data.uid, \n // };\n // let url = \"api/members/register\";\n // try {\n // let response = await axios.post(url, newMongoMember, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n // context.commit(\"SET_USER_MEMBER\", response.data);\n // }\n // catch (error) {\n // console.log(error);\n // }\n\n // // Refreshing the app state accordingly\n // await context.dispatch(\"groups/fetch\", {root:true});\n // await context.dispatch(\"groups/setCurrentGroup\", context.rootState.groups.groups[0], {root:true});\n // },\n async registerNewUser(context, newUserInfo) {\n let newFirebaseUser = {\n email: newUserInfo.email,\n password: newUserInfo.password,\n }\n await context.dispatch('createNewFirebaseUser', newFirebaseUser);\n console.log(\"just made a new Firebase user in registerNewUser\");\n\n if (context.state.user.loggedIn) {\n console.log(\"about to create new Mongo Member\");\n let newMongoMember = {\n firstName: newUserInfo.firstName,\n lastName: newUserInfo.lastName,\n fullName: newUserInfo.firstName + \" \" + newUserInfo.lastName,\n profilePicture: \"default-profile.jpg\", // TODO supply individualized URL or picture data\n firebaseUID: context.state.user.data.uid,\n };\n await context.dispatch(\"members/add\", newMongoMember, {root:true});\n console.log(\"about to setUserMember from registration thing\");\n await context.dispatch(\"setUserMember\");\n \n // console.log(\"about to create NewGroup\");\n // let newGroup = {\n // name: newUserInfo.firstName + \"'s Group\",\n // members: [context.state.user.member._id],\n // joinCode: Math.random().toString(36).substr(2, 8).toUpperCase(), // Randomly generated all-caps alphanumeric string, 8-chars\n // };\n // await context.dispatch(\"groups/add\", newGroup, {root:true});\n // console.log(\"about to fetch all the groups this member belongs to\");\n // await context.dispatch(\"groups/fetch\", {root:true});\n // console.log(\"about to set the current group\");\n // await context.dispatch(\"groups/setCurrentGroup\", context.rootState.groups.groups[0], {root:true});\n }\n else {\n console.log(\"Not logged in, so I didn't try to make a new mongo member or group or anything. I'm assuming registration failed?\");\n }\n },\n async completeOnboarding(context) {\n let url = \"/api/members/onboardingStatus/\" + context.state.user.member._id;\n // console.log(\"memberid: \" + context.state.user.member._id);\n // console.log(\"idtoken: \" + context.rootState.user.idToken);\n try {\n // await axios.get(\"/api/members\", { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n let response = await axios.put(url, { onboardingComplete: true }, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n context.commit(\"SET_USER_MEMBER\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n },\n async createNewFirebaseUser(context, newUser) {\n let email = newUser.email;\n let password = newUser.password;\n try {\n // console.log(\"About to create new user with email and password\");\n let responseData = await firebase.auth().createUserWithEmailAndPassword(email, password);\n let fullName = this.firstName + \" \" + this.lastName;\n await responseData.user.updateProfile({ displayName: fullName });\n }\n catch(error) {\n context.commit(\"SET_REGISTER_ERROR_MESSAGE\", error.message);\n }\n },\n setUserData(context, user) {\n context.commit(\"SET_LOGGED_IN\", user !== null);\n if (user) {\n context.commit(\"SET_USER_DATA\", {\n displayName: user.displayName,\n email: user.email,\n uid: user.uid,\n });\n }\n else {\n context.commit(\"SET_USER_DATA\", null);\n }\n },\n setLoggedIn(context, ifLoggedIn) {\n context.commit(\"SET_LOGGED_IN\", ifLoggedIn);\n },\n setIdToken(context, idToken) {\n context.commit(\"SET_USER_IDTOKEN\", idToken);\n },\n async setUserMember(context) {\n // console.log(\"in setUserMember\");\n // console.log(\"context.state.user.data.uid: \");\n // console.log(context.state.user.data.uid);\n let url = \"api/members/firebase/\" + context.state.user.data.uid;\n try {\n let response = await axios.get(url, { headers: { authorization: `Bearer ${context.rootState.user.idToken}` }});\n // console.log(\"axios.get member from UID response.data: \" + JSON.stringify(response.data));\n // console.log(\"set_user_member response.data: \" + response.data);\n context.commit(\"SET_USER_MEMBER\", response.data);\n }\n catch (error) {\n console.log(error);\n }\n },\n },\n modules: {\n collection,\n members,\n groups,\n plays,\n record,\n },\n});\n\nexport default store;","import Vue from \"vue\";\nimport VueRouter from \"vue-router\";\nimport store from \"@/store/index.js\";\n\nimport firebase from 'firebase/app';\nimport 'firebase/auth';\n\n\nVue.use(VueRouter);\n\nconst routes = [\n {\n path: '/',\n name: 'LandingPage',\n component: () => import(\"../components/AppView/LandingPage/LandingPage.vue\"),\n meta: {\n hideForAuth: true,\n },\n },\n {\n path: '/register',\n name: 'Register',\n component: () => import(\"../components/UserAuthentication/Registration/Register.vue\"),\n meta: {\n hideForAuth: true,\n },\n },\n {\n path: '/onboarding',\n name: 'Onboarding',\n component: () => import(\"../components/UserAuthentication/Registration/Onboarding.vue\"),\n meta: {\n requiresAuth: true,\n },\n },\n {\n path: '/login',\n name: 'Login',\n component: () => import(\"../components/UserAuthentication/Login.vue\"),\n meta: {\n hideForAuth: true,\n },\n },\n {\n path: '/joinGroup',\n name: 'JoinGroupWithJoinCode',\n component: () => import(\"../components/GroupManagement/JoinGroup.vue\"),\n meta: {\n requiresAuth: true,\n requiresOnboardingComplete: true,\n },\n },\n {\n path: '/analytics',\n name: 'Analytics',\n component: () => import(\"../components/Analytics/Analytics.vue\"),\n meta: {\n requiresAuth: true,\n requiresOnboardingComplete: true,\n },\n },\n {\n path: '/members',\n name: 'Members',\n component: () => import(\"../components/Members/Members.vue\"),\n meta: {\n requiresAuth: true,\n requiresOnboardingComplete: true,\n },\n },\n {\n path: '/collection',\n name: 'Collection',\n component: () => import(\"../components/Collection/Collection.vue\"),\n meta: {\n requiresAuth: true,\n requiresOnboardingComplete: true,\n },\n },\n {\n path: '/plays',\n name: 'Plays',\n component: () => import(\"../components/Plays/Plays.vue\"),\n meta: {\n requiresAuth: true,\n requiresOnboardingComplete: true,\n },\n },\n {\n path: '/record',\n name: 'Record',\n component: () => import(\"../components/Plays/Record/RecordGame.vue\"),\n meta: {\n requiresAuth: true,\n requiresOnboardingComplete: true,\n },\n },\n];\n\nconst router = new VueRouter({\n routes,\n // Scrolls to top when you change s\n scrollBehavior () {\n return { x: 0, y: 0 }\n }\n});\n\n// Navigation guards that check for authentication/onboarding meta properties in routes\nrouter.beforeEach(async (to, from, next) => {\n const requiresAuth = to.matched.some(x => x.meta.requiresAuth);\n const hideForAuth = to.matched.some(x => x.meta.hideForAuth);\n const requiresOnboardingComplete = to.matched.some(x => x.meta.requiresOnboardingComplete);\n\n // If the user refreshes the page and we lose some state, this if clause will catch that and do some of the stuff normally \n // done in firebase.js, only if the desired page requiresAuth or requiresOnboardingComplete. A bit of code duplication, but\n // these things only get called if there is a manual page refresh to set the state correctly for everything else to use.\n // This is the only reason that this whole router.beforeEach() thing needs to be async.\n if ((requiresAuth || requiresOnboardingComplete) && (store.state.user == null || store.state.user.member == null)) {\n let user = firebase.auth().currentUser;\n await store.dispatch(\"setUserData\", user);\n if (user) {\n try {\n let idToken = await user.getIdToken(/* forceRefresh */ true)\n await store.dispatch(\"setIdToken\", idToken);\n await store.dispatch(\"setUserMember\");\n await store.dispatch(\"groups/fetch\");\n await store.dispatch(\"groups/setCurrentGroup\", store.state.groups.groups[0]);\n await store.dispatch(\"collection/fetch\");\n await store.dispatch(\"members/fetch\");\n }\n catch(error) {\n console.log(error);\n }\n }\n }\n\n // Authentication checks\n if (requiresAuth && !store.state.user.loggedIn) {\n next('/login');\n }\n else if (hideForAuth && store.state.user.loggedIn) {\n next('/collection');\n }\n \n // Onboarding-complete check\n if (requiresOnboardingComplete) {\n if (store.state.user.loggedIn) {\n if (!store.state.user.member.onboardingComplete) {\n next('/onboarding');\n }\n else {\n next();\n }\n }\n else {\n next();\n }\n }\n\n // Default is just to continue\n else {\n next();\n }\n});\n\nexport default router;\n","import Vue from \"vue\";\nimport Vuetify from \"vuetify/lib\";\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n theme: {\n themes: {\n light: {\n primary: '#3949ab',\n secondary: '#2e7d32',\n }\n }\n },\n // options: {\n // customProperties: true,\n // },\n});","import firebase from 'firebase/app';\n// import 'firebase/auth';\n// import * as firebase from 'firebase/app';\nimport 'firebase/auth';\nimport store from \"./store\";\n// import axios from \"axios\"\n\n// Firebase set-up\nconst firebaseConfig = {\n apiKey: \"AIzaSyCHRAKHuQO4J0h09MjGuoxh4k2tXyoY4xU\",\n authDomain: \"scoreboard-e0619.firebaseapp.com\",\n projectId: \"scoreboard-e0619\",\n storageBucket: \"scoreboard-e0619.appspot.com\",\n messagingSenderId: \"40389477417\",\n appId: \"1:40389477417:web:188ad04b5f19f86f660838\",\n //measurementId: \"G-LSJW4083L5\"\n};\n// Initialize Firebase\nfirebase.initializeApp(firebaseConfig);\nfirebase.analytics();\n\n// Utils\nconst auth = firebase.auth()\n\n// Watch for Firebase user change and state in Vuex store\nfirebase.auth().onAuthStateChanged(async user => {\n // console.log(\"Auth state change! Updating crap\");\n await store.dispatch(\"setUserData\", user);\n if (user) {\n try {\n let idToken = await user.getIdToken(/* forceRefresh */ true)\n await store.dispatch(\"setIdToken\", idToken);\n // console.log(\"setIdToken!\");\n await store.dispatch(\"setUserMember\");\n // console.log(\"setUserMember!\");\n await store.dispatch(\"groups/fetch\");\n // console.log(\"all groups: \" + store.state.groups.groups);\n await store.dispatch(\"groups/setCurrentGroup\", store.state.groups.groups[0]);\n \n // Re-fetch everything (probably a way to specify only the active page, which would be better, just need to record that in state\n await store.dispatch(\"collection/fetch\");\n await store.dispatch(\"plays/fetch\");\n await store.dispatch(\"members/fetch\");\n }\n catch(error) {\n console.log(error);\n }\n }\n // console.log(\"Done with onAuthStateChanged processes\");\n});\n\nexport { auth }\n","const gameType = {\n POINTS: {\n HIGH_WINS: \"points.high_wins\",\n LOW_WINS: \"points.low_wins\",\n },\n RANKED: \"ranked\",\n CO_OP: \"co_op\",\n};\n \nexport default gameType;","let mockShelf = [\n {\n id: \"EL3YmDLY6W\",\n name: \"Risk\",\n year_published: 1959,\n min_players: 2,\n max_players: 6,\n min_playtime: 120,\n max_playtime: 120,\n min_age: 10,\n description:\n \"

Welcome to the world of Risk. It’s exciting. It’s unpredictable. It’s all about battling your way to global domination, one territory at a time. And it’s easy to get into the game, fast!

\\r\\n

In Risk, you focus on your strategy. You decide on your tactical scheme. You figure out where to place your troops, and who and where you will attack and how often. Every move is a risk that will bring either victory or defeat. Go for the win!

\\r\\n

60th Anniversary Edition:

\\r\\n

Betrayal. Alliances. Surprise attacks. Risk continues to be one of the world's most popular and influential strategic board games decades after its inception. The special 60th Anniversary Edition of Risk celebrates its legacy with premium packaging and game pieces. For true Risk fans, the included game guide reveals the history of Risk. It also features 5 ways to play, including the classic game plus the original 1957 La conquete du monde rules.

\\r\\n

Anything goes on the battlefield of the risk game. Using strategy, smarts, and a little bit of luck, a player will either defeat the enemy or be defeated. Take over the world in this game of strategy conquest!

\",\n description_preview:\n \" Welcome to the world of Risk . It’s exciting. It’s unpredictable. It’s all about battling your way to global domination, one territory at a time. And it’s easy to get into the game, fast! \\r\\n In Risk, you focus on your strategy. You decide on your tactical scheme. You figure out where to place your troops, and who and where you will attack and how often. Every move is a risk that will bring either victory or defeat. Go for the win! \\r\\n 60th Anniversary Edition: \\r\\n Betrayal. Alliances. Surprise attacks. Risk continues to be one of the world's most popular and influential strategic board games decades after its inception. The special 60th Anniversary Edition of Risk celebrates its legacy with premium packaging and game pieces. For true Risk fans, the included game guide reveals the history of Risk. It also features 5 ways to play, including the classic game plus the original 1957 La conquete du monde rules. \\r\\n Anything goes on the battlefield of the risk game. Using strategy, smarts, and a little bit of luck, a player will either defeat the enemy or be defeated. Take over the world in this game of strategy conquest! \",\n image_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n thumb_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n images: {\n thumb:\n \"https://d2k4q26owzy373.cloudfront.net/40x40/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n small:\n \"https://d2k4q26owzy373.cloudfront.net/150x150/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n medium:\n \"https://d2k4q26owzy373.cloudfront.net/350x350/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n large:\n \"https://d2k4q26owzy373.cloudfront.net/700x700/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n original:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559254847937-51zyVWbt8aL.jpg\",\n },\n url: \"https://www.boardgameatlas.com/game/EL3YmDLY6W/risk\",\n price: \"29.99\",\n msrp: \"0.00\",\n discount: \"0.00\",\n primary_publisher: \"Hasbro Games\",\n publishers: [\"Hasbro\"],\n mechanics: [\n {\n id: \"05zCZoLvQJ\",\n url: \"https://www.boardgameatlas.com/mechanic/05zCZoLvQJ/undefined\",\n },\n {\n id: \"bgGxE0pI2B\",\n url: \"https://www.boardgameatlas.com/mechanic/bgGxE0pI2B/undefined\",\n },\n {\n id: \"R0bGq4cAl4\",\n url: \"https://www.boardgameatlas.com/mechanic/R0bGq4cAl4/undefined\",\n },\n {\n id: \"BGrhzIN69D\",\n url: \"https://www.boardgameatlas.com/mechanic/BGrhzIN69D/undefined\",\n },\n {\n id: \"lA3KUtVFCy\",\n url: \"https://www.boardgameatlas.com/mechanic/lA3KUtVFCy/undefined\",\n },\n ],\n categories: [\n {\n id: \"buDTYyPw4D\",\n url: \"https://www.boardgameatlas.com/category/buDTYyPw4D/undefined\",\n },\n {\n id: \"jX8asGGR6o\",\n url: \"https://www.boardgameatlas.com/category/jX8asGGR6o/undefined\",\n },\n ],\n designers: [\"Albert Lamorisse\", \"Michael I. Levin\"],\n developers: [],\n artists: [\"(Uncredited)\"],\n names: [\n \"Risk: The Game of Strategic Conquest\",\n \"Ataque\",\n \"La Conquista del mundo\",\n \"Risc Commander\",\n \"Risco\",\n \"Risiko\",\n \"Risiko Deluxe\",\n \"Risiko!\",\n \"Risk de luxe\",\n \"Risk wereldveroverend\",\n \"Risk Η κατάκτηση του κόσμου\",\n \"Risk Το παιχνίδι της παγκόσμιας κυριαρχίας\",\n \"Risk. Spillet der du erobrer verden\",\n \"Risk. Игра в завоевание мира\",\n \"Risk: Spillet om Verdensherredømmet\",\n 'Risk: Επιχείρηση \"Μυστική Αποστολή\"',\n \"Rizikó\",\n \"Ryzyko\",\n \"War\",\n \"סיכון\",\n \"RISK 60th Anniversary Edition\",\n ],\n num_user_ratings: 180,\n average_user_rating: 2.440632603406325,\n official_url: null,\n rules_url: null,\n matches_specs: null,\n spec: [],\n reddit_all_time_count: 177,\n reddit_week_count: 1,\n reddit_day_count: 10,\n historical_low_price: 20.99,\n historical_low_date: \"2019-04-22T00:42:17.972Z\",\n rank: 324,\n trending_rank: 256,\n },\n {\n id: \"fG5Ax8PA7n\",\n name: \"Monopoly\",\n year_published: 1933,\n min_players: 2,\n max_players: 8,\n min_playtime: 40,\n max_playtime: 300,\n min_age: 8,\n description:\n \"

The thrill of bankrupting an opponent, the possibility of playing a 9 hour game, and the absolution between winning and losing, could change with the roll of the dice. Experience the ups and downs by collecting property color’s sets to build houses, and hopefully upgrading to a hotel. But don’t play just for certain colors, or else your opponent may change their strategy.

The more properties each player owns, the more rent can be charged, but trading is where the game can help you, or hurt you. So, be wise!

Chance cards could be worth money, like $10 for winning second place in a beauty pageant or sending you to “Go” for an extra $200; but you might just get the one that says, “Go To Jail”.

Buy, Sell, Dream and Scheme to Win it All!

Turn a debt into an ultimate victory!

\",\n description_preview:\n \" The thrill of bankrupting an opponent, the possibility of playing a 9 hour game, and the absolution between winning and losing, could change with the roll of the dice. Experience the ups and downs by collecting property color’s sets to build houses, and hopefully upgrading to a hotel. But don’t play just for certain colors, or else your opponent may change their strategy. The more properties each player owns, the more rent can be charged, but trading is where the game can help you, or hurt you. So, be wise! Chance cards could be worth money, like $10 for winning second place in a beauty pageant or sending you to “Go” for an extra $200; but you might just get the one that says, “Go To Jail”. Buy, Sell, Dream and Scheme to Win it All! Turn a debt into an ultimate victory! \",\n image_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1543278754636\",\n thumb_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1543278754636\",\n images: {\n thumb:\n \"https://d2k4q26owzy373.cloudfront.net/40x40/games/uploaded/1543278754636\",\n small:\n \"https://d2k4q26owzy373.cloudfront.net/150x150/games/uploaded/1543278754636\",\n medium:\n \"https://d2k4q26owzy373.cloudfront.net/350x350/games/uploaded/1543278754636\",\n large:\n \"https://d2k4q26owzy373.cloudfront.net/700x700/games/uploaded/1543278754636\",\n original:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1543278754636\",\n },\n url: \"https://www.boardgameatlas.com/game/fG5Ax8PA7n/monopoly\",\n price: \"25.99\",\n msrp: \"19.99\",\n discount: \"-0.30\",\n primary_publisher: \"Hasbro Games\",\n publishers: [\"Hasbro\"],\n mechanics: [\n {\n id: \"AZxlPpi5oq\",\n url: \"https://www.boardgameatlas.com/mechanic/AZxlPpi5oq/undefined\",\n },\n {\n id: \"BGrhzIN69D\",\n url: \"https://www.boardgameatlas.com/mechanic/BGrhzIN69D/undefined\",\n },\n {\n id: \"mGBzR68m8Z\",\n url: \"https://www.boardgameatlas.com/mechanic/mGBzR68m8Z/undefined\",\n },\n {\n id: \"lA3KUtVFCy\",\n url: \"https://www.boardgameatlas.com/mechanic/lA3KUtVFCy/undefined\",\n },\n {\n id: \"AVY6EvSQTP\",\n url: \"https://www.boardgameatlas.com/mechanic/AVY6EvSQTP/undefined\",\n },\n ],\n categories: [\n {\n id: \"N0TkEGfEsF\",\n url: \"https://www.boardgameatlas.com/category/N0TkEGfEsF/undefined\",\n },\n {\n id: \"jZEDOpx07e\",\n url: \"https://www.boardgameatlas.com/category/jZEDOpx07e/undefined\",\n },\n ],\n designers: [\"Charles Darrow\", \"Elizabeth J. Magie (Phillips)\"],\n developers: [],\n artists: [\"Frantz Rey\"],\n names: [\n \"Monopoly board game\",\n \"Monopoly: 80th Anniversary Edition \",\n \"Monopoly Classic Game\",\n \"Monopoly\",\n \"Winning Solutions Monopoly Nostalgia Tin Board Games\",\n \"Monopoly Classic\",\n \"Classic Monopoly\",\n ],\n num_user_ratings: 165,\n average_user_rating: 1.8000000000000005,\n official_url:\n \"https://shop.hasbro.com/en-us/product/monopoly-classic-game:7EABAF97-5056-9047-F577-8F4663C79E75?utm_source=boardgameatlas.com&utm_medium=search&utm_campaign=bga_ads\",\n rules_url: \"https://www.hasbro.com/common/instruct/monins.pdf\",\n matches_specs: null,\n spec: [],\n reddit_all_time_count: 222,\n reddit_week_count: 0,\n reddit_day_count: 1,\n historical_low_price: 12.47,\n historical_low_date: \"2020-09-06T10:42:15.125Z\",\n rank: 566,\n trending_rank: 0,\n },\n {\n id: \"levMwXaCM6\",\n name: \"Monopoly Deal Card Game\",\n year_published: 2008,\n min_players: 2,\n max_players: 5,\n min_playtime: 15,\n max_playtime: 30,\n min_age: 8,\n description:\n \"

Get a handy way to play the classic property-trading game! Be the first collect 3 full property sets of different colors, and you’ll win the Monopoly Deal Card Game. You’ll pick up cards when it's your turn and play Action cards to charge players rent, steal their cards or demand money for your birthday. Build up property sets, gather piles of money and keep wheeling and dealing until you're the Monopoly Deal winner! Monopoly and all related characters are trademarks of Hasbro.

\",\n description_preview:\n \" Get a handy way to play the classic property-trading game! Be the first collect 3 full property sets of different colors, and you’ll win the Monopoly Deal Card Game. You’ll pick up cards when it's your turn and play Action cards to charge players rent, steal their cards or demand money for your birthday. Build up property sets, gather piles of money and keep wheeling and dealing until you're the Monopoly Deal winner! Monopoly and all related characters are trademarks of Hasbro. \",\n image_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n thumb_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n images: {\n thumb:\n \"https://d2k4q26owzy373.cloudfront.net/40x40/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n small:\n \"https://d2k4q26owzy373.cloudfront.net/150x150/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n medium:\n \"https://d2k4q26owzy373.cloudfront.net/350x350/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n large:\n \"https://d2k4q26owzy373.cloudfront.net/700x700/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n original:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559255820851-51PyKtxYE9L.jpg\",\n },\n url:\n \"https://www.boardgameatlas.com/game/levMwXaCM6/monopoly-deal-card-game\",\n price: \"4.99\",\n msrp: \"4.99\",\n discount: \"0.00\",\n primary_publisher: \"Hasbro\",\n publishers: [\n \"Hasbro\",\n \"ASS Altenburger Spielkarten\",\n \"Basic Fun, Inc.\",\n \"Cartamundi\",\n \"Copag Cards\",\n \"Funskool Games\",\n \"Korea Boardgames co., Ltd.\",\n \"Parker Brothers\",\n ],\n mechanics: [\n {\n id: \"WPytek5P8l\",\n url: \"https://www.boardgameatlas.com/mechanic/WPytek5P8l/undefined\",\n },\n {\n id: \"lA3KUtVFCy\",\n url: \"https://www.boardgameatlas.com/mechanic/lA3KUtVFCy/undefined\",\n },\n {\n id: \"T8JEFYwoqy\",\n url: \"https://www.boardgameatlas.com/mechanic/T8JEFYwoqy/undefined\",\n },\n ],\n categories: [\n {\n id: \"eX8uuNlQkQ\",\n url: \"https://www.boardgameatlas.com/category/eX8uuNlQkQ/undefined\",\n },\n {\n id: \"N0TkEGfEsF\",\n url: \"https://www.boardgameatlas.com/category/N0TkEGfEsF/undefined\",\n },\n {\n id: \"7rV11PKqME\",\n url: \"https://www.boardgameatlas.com/category/7rV11PKqME/undefined\",\n },\n {\n id: \"X8J7RM6dxX\",\n url: \"https://www.boardgameatlas.com/category/X8J7RM6dxX/undefined\",\n },\n ],\n designers: [\"\", \"Katharine Chapman\"],\n developers: [],\n artists: [],\n names: [\n \"Monopoly Deal\",\n \"monopoly\",\n \"card game\",\n \"Monopoly Deal Card Game\",\n ],\n num_user_ratings: 90,\n average_user_rating: 2.8666666666666667,\n official_url:\n \"https://hasbrogaming.hasbro.com/en-us/product/monopoly-deal-card-game:E81831FC-FCB7-4E13-9E95-CD4D1AF3DBDB?utm_source=boardgameatlas.com&utm_medium=search&utm_campaign=bga_ads\",\n rules_url: \"http://monopolydealrules.com/\",\n matches_specs: null,\n spec: [],\n reddit_all_time_count: 46,\n reddit_week_count: 0,\n reddit_day_count: 0,\n historical_low_price: 3.99,\n historical_low_date: \"2019-03-15T01:02:16.819Z\",\n rank: 461,\n trending_rank: 0,\n },\n {\n id: \"OIXt3DmJU0\",\n name: \"Catan\",\n year_published: 1995,\n min_players: 3,\n max_players: 4,\n min_playtime: 45,\n max_playtime: 90,\n min_age: 10,\n description:\n \"

The women and men of your expedition build the first two settlements. Fortunately, the land is rich in natural resources. You build roads and new settlements that eventually become cities. Will you succeed in gaining supremacy on Catan? Barter trade dominates the scene. Some resources you have in abundance, other resources are scarce. Ore for wool, brick for lumber - you trade according to what is needed for your current building projects. Proceed strategically! If you found your settlements in the right places and skillfully trade your resources, then the odds will be in your favor. But your opponents are smart too.

\\r\\n

To begin the game, we build the game board using hexagonal terrain tiles. Catan is born - a beautiful island with mountains, pastures, hills, fields, and forests, surrounded by the sea.

\\r\\n

Each of us places two small houses on spaces where three terrain hexes meet. They are our starting settlements.

\\r\\n

And so it begins. I roll two dice. An “11”! Each terrain hex is marked with a die roll number. Each player who owns a settlement adjacent to a terrain hex marked with the number rolled receives a resource produced by this hex. Hills produce brick, forests produce lumber, mountains produce ore, fields produce grain, and pastures produce wool.

\\r\\n

We use these resources to expand across Catan: we build roads and new settlements, or we upgrade our existing settlements to cities. For example, a road costs 1 brick and 1 lumber. If we do not have the necessary resources, we can acquire them by trading with our opponents.

\\r\\n

Each settlement is worth 1 victory point and each city is worth 2 victory points. If you expand cleverly, you may be the first player to reach 10 victory points and thus win the game!

\",\n description_preview:\n \" The women and men of your expedition build the first two settlements. Fortunately, the land is rich in natural resources. You build roads and new settlements that eventually become cities. Will you succeed in gaining supremacy on Catan? Barter trade dominates the scene. Some resources you have in abundance, other resources are scarce. Ore for wool, brick for lumber - you trade according to what is needed for your current building projects. Proceed strategically! If you found your settlements in the right places and skillfully trade your resources, then the odds will be in your favor. But your opponents are smart too. \\r\\n To begin the game, we build the game board using hexagonal terrain tiles. Catan is born - a beautiful island with mountains, pastures, hills, fields, and forests, surrounded by the sea. \\r\\n Each of us places two small houses on spaces where three terrain hexes meet. They are our starting settlements. \\r\\n And so it begins. I roll two dice. An “11”! Each terrain hex is marked with a die roll number. Each player who owns a settlement adjacent to a terrain hex marked with the number rolled receives a resource produced by this hex. Hills produce brick, forests produce lumber, mountains produce ore, fields produce grain, and pastures produce wool. \\r\\n We use these resources to expand across Catan: we build roads and new settlements, or we upgrade our existing settlements to cities. For example, a road costs 1 brick and 1 lumber. If we do not have the necessary resources, we can acquire them by trading with our opponents. \\r\\n Each settlement is worth 1 victory point and each city is worth 2 victory points. If you expand cleverly, you may be the first player to reach 10 victory points and thus win the game! \",\n image_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n thumb_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n images: {\n thumb:\n \"https://d2k4q26owzy373.cloudfront.net/40x40/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n small:\n \"https://d2k4q26owzy373.cloudfront.net/150x150/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n medium:\n \"https://d2k4q26owzy373.cloudfront.net/350x350/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n large:\n \"https://d2k4q26owzy373.cloudfront.net/700x700/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n original:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559258096678-51Eiofu9mqL.jpg\",\n },\n url: \"https://www.boardgameatlas.com/game/OIXt3DmJU0/catan\",\n price: \"0.00\",\n msrp: \"49.00\",\n discount: \"0.15\",\n primary_publisher: \"KOSMOS\",\n publishers: [\n \"KOSMOS\",\n \"Catan Studio\",\n \"999 Games\",\n \"Grow Jogos e Brinquedos\",\n \"Mayfair Games\",\n ],\n mechanics: [\n {\n id: \"R0bGq4cAl4\",\n url: \"https://www.boardgameatlas.com/mechanic/R0bGq4cAl4/undefined\",\n },\n {\n id: \"ohABM4GjbC\",\n url: \"https://www.boardgameatlas.com/mechanic/ohABM4GjbC/undefined\",\n },\n {\n id: \"AVY6EvSQTP\",\n url: \"https://www.boardgameatlas.com/mechanic/AVY6EvSQTP/undefined\",\n },\n ],\n categories: [\n {\n id: \"7rV11PKqME\",\n url: \"https://www.boardgameatlas.com/category/7rV11PKqME/undefined\",\n },\n ],\n designers: [\"Klaus Teuber\"],\n developers: [],\n artists: [\n \"Volkan Baga\",\n \"Tanja Donner\",\n \"Pete Fenlon\",\n \"Jason Hawkins\",\n \"Michaela Kienle\",\n \"Harald Lieske\",\n \"Michael Menzel\",\n \"Marion Pott\",\n \"Matt Schwabel\",\n \"Franz Vohwinkel\",\n \"Stephen Graham Walsh\",\n ],\n names: [\n \"Die Siedler von Catan \",\n \"Catan - Das Spiel\",\n \"Les Colons de Catane\",\n \"Catan (Колонизаторы)\",\n \"Catan: Das Spiel\",\n \"Catan: Die Bordspel\",\n \"Catan: El Juego\",\n \"Catan: Gra planszowa\",\n \"Catan: Il Gioco\",\n \"Catan: Landnemarnir\",\n \"Catan: O Jogo\",\n \"Catan: Osnovna igra\",\n \"Catan: Telepesei\",\n \"Catane\",\n \"Catanin Uudisasukkaat\",\n \"I Coloni di Catan\",\n \"I Coloni di Katan\",\n \"Coloniștii din Catan\",\n \"Colonizadores de Catan\",\n \"Los Colonos de Catán\",\n \"Les Colons de Katane\",\n \"Os Descobridores de Catan\",\n \"Los Descubridores de Catán\",\n \"Els Colons de Catan\",\n \"Katan\",\n \"Katan no Kaitakusya\",\n \"Katanas ieceïotâji\",\n \"Katanas Ieceļotāji\",\n \"Katani Asustajad\",\n \"Katano salos naujakuriai\",\n \"Katano Salos Naujakuriai\",\n \"De Kolonisten van Catan\",\n \"Naseljenci otoka Catan\",\n \"Naseljenici ostrva Katan\",\n \"Naseljenici ostrva Katan / Насељеници острва Катан\",\n \"Die Ontdekkers van Catan\",\n \"Osadníci z Katanu\",\n \"Osadnicy z Catanu\",\n \"Settlers fra Catan\",\n \"The Settlers fra Catan\",\n \"Settlers från Catan\",\n \"The Settlers från Catan\",\n \"The Settlers of Catan\",\n \"Die Siedler von Catan\",\n \"Οι Άποικοι του Κατάν\",\n \"Заселниците на Катан\",\n \"Колонизаторы\",\n \"המתיישבים של קטאן\",\n \"นักบุกเบิกแห่ง Catan\",\n \"カタンの開拓者\",\n \"カタンの開拓者たち\",\n \"カタンの開拓者たち スタンダード版\",\n \"卡坦岛\",\n \"卡坦島\",\n \"카탄\",\n \"카탄의 개척자\",\n ],\n num_user_ratings: 565,\n average_user_rating: 3.1286401958971837,\n official_url:\n \"https://www.catan.com/?utm_source=boardgameatlas.com&utm_medium=search&utm_campaign=bga_ads\",\n rules_url: \"https://www.catan.com/game/catan#prof-easy\",\n weight_amount: 2,\n weight_units: \"lbs \",\n size_height: 11.6,\n size_depth: 3,\n size_units: \"inches \",\n matches_specs: null,\n spec: [],\n reddit_all_time_count: 934,\n reddit_week_count: 1,\n reddit_day_count: 5,\n historical_low_price: 0,\n historical_low_date: \"2020-09-30T21:42:02.137Z\",\n rank: 23,\n trending_rank: 6,\n },\n {\n id: \"xxXmJiNj5e\",\n name: \"Sequence\",\n year_published: 1982,\n min_players: 2,\n max_players: 12,\n min_playtime: 5,\n max_playtime: 20,\n min_age: 7,\n description:\n \"It's fun, it's challenging, it's exciting, it's Sequence! Play a card from your hand, and place a chip on a corresponding space on the game board. When you have five in a row, it's a Sequence. Learn to block your opponents or remove their chips, and watch out for the Jacks - they're wild! With a little strategy and luck, you'll be a winner. Contents: Folding Game Board, 2 Decks of Sequence Cards, 135 Playing Chips and Instructions. For 2-12 players, ages 7 and up.\",\n description_preview:\n \"It's fun, it's challenging, it's exciting, it's Sequence! Play a card from your hand, and place a chip on a corresponding space on the game board. When you have five in a row, it's a Sequence. Learn to block your opponents or remove their chips, and watch out for the Jacks - they're wild! With a little strategy and luck, you'll be a winner. Contents: Folding Game Board, 2 Decks of Sequence Cards, 135 Playing Chips and Instructions. For 2-12 players, ages 7 and up.\",\n image_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n thumb_url:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n images: {\n thumb:\n \"https://d2k4q26owzy373.cloudfront.net/40x40/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n small:\n \"https://d2k4q26owzy373.cloudfront.net/150x150/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n medium:\n \"https://d2k4q26owzy373.cloudfront.net/350x350/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n large:\n \"https://d2k4q26owzy373.cloudfront.net/700x700/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n original:\n \"https://s3-us-west-1.amazonaws.com/5cc.images/games/uploaded/1559257958590-51gFpuIyT8L.jpg\",\n },\n url: \"https://www.boardgameatlas.com/game/xxXmJiNj5e/sequence-game\",\n price: \"17.97\",\n msrp: \"0.00\",\n discount: \"0.00\",\n primary_publisher: \"Goliath\",\n publishers: [\"Goliath\"],\n mechanics: [],\n categories: [],\n designers: [],\n developers: [],\n artists: [],\n names: [\"Sequence\", \"Sequence: Deluxe Edition\"],\n num_user_ratings: 71,\n average_user_rating: 2.9119718309859155,\n official_url: null,\n rules_url: \"https://www.jaxgames.com/sequence-game-rules/\",\n weight_amount: 8,\n weight_units: \"lbs\",\n size_height: 10,\n size_width: 8.5,\n size_depth: 10,\n size_units: \"inches\",\n matches_specs: { id: \"7bPwbFz3BU\" },\n spec: [],\n reddit_all_time_count: 32,\n reddit_week_count: 1,\n reddit_day_count: 2,\n historical_low_price: 9.6,\n historical_low_date: \"2019-03-07T12:20:03.570Z\",\n rank: 545,\n trending_rank: 843,\n },\n ];\n \n export default mockShelf;","let mockMembers = [\n {\n id: 1,\n firstName: \"Kathy\",\n lastName: \"Wyatt\",\n fullName: \"Kathy Wyatt\",\n dateJoined: new Date(\"October 18, 2020 11:13:00\"),\n gamesPlayed: 30,\n totalWins: 12,\n profilePicture: \"profile-cross-eyed.jpg\"\n },\n {\n id: 2,\n firstName: \"Jim\",\n lastName: \"Austin\",\n fullName: \"Jim Austin\",\n dateJoined: new Date(\"September 11, 2020 10:29:00\"),\n gamesPlayed: 8,\n totalWins: 3,\n profilePicture: \"portrait-man-with-tongue.jpg\"\n },\n {\n id: 3,\n firstName: \"Emma\",\n lastName: \"Morgan\",\n fullName: \"Emma Morgan\",\n dateJoined: new Date(\"September 29, 2020 12:57:00\"),\n gamesPlayed: 37,\n totalWins: 18,\n profilePicture: \"portrait-fashionable-woman.jpg\"\n },\n {\n id: 4,\n firstName: \"Steven\",\n lastName: \"Greenberg\",\n fullName: \"Steven Greenberg\",\n dateJoined: new Date(\"November 10, 2020 10:31:00\"),\n gamesPlayed: 48,\n totalWins: 14,\n profilePicture: \"portrait-man-red-hat.jpg\"\n },\n]\n\nexport default mockMembers;","import enumGameType from \"../assets/enumGameType\";\n\nlet mockHistory = [\n {\n id: 1,\n boardGameId: \"EL3YmDLY6W\",\n playersId: [1, 2, 3],\n winnerId: [2],\n type: enumGameType.RANKED,\n rankWinToLose: [2, 3, 1],\n points: {},\n boardWin: false,\n datePlayed: new Date(\"September 21, 2020 10:29:00\"),\n description: \"This is a test note description to see how this would actually work and if it does! This could be interesting... hope this is functional at some point.\",\n\n },\n {\n id: 2,\n boardGameId: \"fG5Ax8PA7n\",\n playersId: [1, 2, 3, 4],\n winnerId: [3],\n type: enumGameType.RANKED,\n rankWinToLose: [3, [2, 1], 4],\n points: {},\n boardWin: false,\n datePlayed: new Date(\"October 3, 2020 10:29:00\"),\n description: \"Another one of those little test descriptions to see how this would actually work and if it does! This could be interesting... hope this is functional at some point.\",\n },\n {\n id: 3,\n boardGameId: \"levMwXaCM6\",\n playersId: [1, 2, 3, 4],\n winnerId: [3, 2],\n type: enumGameType.POINTS.HIGH_WINS,\n rankWinToLose: [[3, 2], 1, 4],\n points:\n {\n 1: 35,\n 2: 42,\n 3: 42,\n 4: 20\n },\n boardWin: false,\n datePlayed: new Date(\"October 5, 2020 10:29:00\"),\n description: \"A third one of those little test descriptions to see how this would actually work and if it does! This could be interesting... hope this is functional at some point.\",\n },\n {\n id: 4,\n boardGameId: \"EL3YmDLY6W\",\n playersId: [1, 3, 4],\n winnerId: [],\n type: enumGameType.CO_OP,\n rankWinToLose: [],\n points: {},\n boardWin: true,\n datePlayed: new Date(\"October 8, 2020 10:29:00\"),\n description: \"A fourth one of those little test descriptions to see how this would actually work and if it does! This could be interesting... hope this is functional at some point.\",\n },\n {\n id: 5,\n boardGameId: \"EL3YmDLY6W\",\n playersId: [2, 3, 4],\n winnerId: [2, 3, 4],\n type: enumGameType.CO_OP,\n rankWinToLose: [],\n points: {},\n boardWin: false,\n datePlayed: new Date(\"October 12, 2020 10:29:00\"),\n description: \"A fifth one of those little test descriptions to see how this would actually work and if it does! This could be interesting... hope this is functional at some point.\",\n },\n]\n\nexport default mockHistory;\n\n","import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport \"./registerServiceWorker\";\nimport router from \"./router\";\nimport store from \"./store\";\nimport vuetify from \"./plugins/vuetify\";\nimport { auth } from './firebase';\n\n// Font-Awesome - only the icons I need\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome';\nimport { faChessRook, faPlus, faFistRaised, faTrophy, faDice, faChartBar } from '@fortawesome/free-solid-svg-icons';\n// import { faPlus } from '@fortawesome/free-solid-svg-icons';\n// import { faFistRaised } from '@fortawesome/free-solid-svg-icons';\n// import { faTrophy } from '@fortawesome/free-solid-svg-icons';\n// import { faDice } from '@fortawesome/free-solid-svg-icons';\n// import { faChartBar } from '@fortawesome/free-solid-svg-icons';\nlibrary.add(faPlus);\nlibrary.add(faChessRook);\nlibrary.add(faFistRaised);\nlibrary.add(faTrophy);\nlibrary.add(faDice);\nlibrary.add(faChartBar);\nVue.component('font-awesome-icon', FontAwesomeIcon);\nVue.component('font-awesome-layers', FontAwesomeLayers);\n\n// Custom enum for game types\nimport enumGameType from './assets/enumGameType.js';\n\n// Mock data to fill stuff in for development purposes\nimport mockShelf from \"./mockData/mockShelf.js\";\nimport mockMembers from \"./mockData/mockMembers.js\";\nimport mockHistory from \"./mockData/mockHistory.js\";\n\nlet data = {\n // Mock shelf data\n shelf: mockShelf,\n members: mockMembers,\n history: mockHistory,\n\n enumGameType,\n};\n\nVue.config.productionTip = false;\n\nlet app\nauth.onAuthStateChanged(() => {\n if (!app) {\n app = new Vue({\n router,\n store,\n data,\n vuetify,\n render: h => h(App)\n }).$mount('#app')\n }\n;})\n"],"sourceRoot":""}