diff --git a/package.json b/package.json index ede907a..21c4e88 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "sass-loader": "^6.0.6", "vue": "^2.5.2", "vue-router": "^3.0.1", - "vuex": "^3.0.1" + "vuex": "^3.0.1", + "vuex-persistedstate": "^2.5.4" }, "devDependencies": { "autoprefixer": "^7.1.2", diff --git a/src/App.vue b/src/App.vue index 5361a20..1e16639 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,9 @@ export default { components: { HeaderBar, AppFooter + }, + created () { + this.$store.commit('initState') } } diff --git a/src/store/index.js b/src/store/index.js index 4bba56b..f39e454 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,5 +1,6 @@ import Vue from 'vue' import Vuex from 'vuex' +import createPersistedState from 'vuex-persistedstate' import SkillJson from '@/assets/game_data/skills.json' import SeasonJson from '@/assets/game_data/seasons.json' @@ -9,18 +10,24 @@ import ItemJson from '@/assets/game_data/items.json' Vue.use(Vuex) -var state = { - StoredItems: {}, +var prestate = { seasons: loadSeasons(), skills: loadSkills(), rooms: loadRooms() } -state.bundles = loadBundles(state.rooms) -state.items = loadItems(state.bundles, state.skills, state.seasons) +prestate.bundles = loadBundles(prestate.rooms) +prestate.items = loadItems(prestate.bundles, prestate.skills, prestate.seasons) export default new Vuex.Store({ - state: state, + state: { + StoredItems: {} + }, + plugins: [ + createPersistedState({ + reducer: state => ({ StoredItems: state.StoredItems }) + }) + ], getters: { IsBundleItemRedeemed: (state) => (BundleItem) => { return state.StoredItems.hasOwnProperty(BundleItem.id) @@ -38,6 +45,13 @@ export default new Vuex.Store({ }, UndoRedeemItem (state, BundleItem) { Vue.delete(state.StoredItems, BundleItem.id) + }, + initState (state) { + Vue.set(state, 'seasons', prestate.seasons) + Vue.set(state, 'skills', prestate.skills) + Vue.set(state, 'rooms', prestate.rooms) + Vue.set(state, 'bundles', prestate.bundles) + Vue.set(state, 'items', prestate.items) } } }) diff --git a/yarn.lock b/yarn.lock index f92a427..953b81a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1908,6 +1908,10 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +deepmerge@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.0.tgz#511a54fff405fc346f0240bb270a3e9533a31102" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -5759,6 +5763,10 @@ shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" +shvl@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/shvl/-/shvl-1.3.1.tgz#6c20a17b4a20b08e9f8cab60c50a92229fcc176e" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6550,6 +6558,13 @@ vue@^2.5.2: version "2.5.13" resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1" +vuex-persistedstate@^2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-2.5.4.tgz#a19710ad7f9a08cea4e65fc585924d9fdac7384a" + dependencies: + deepmerge "^2.1.0" + shvl "^1.3.0" + vuex@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.0.1.tgz#e761352ebe0af537d4bb755a9b9dc4be3df7efd2"