module.exports = store => { // initialize data if (localStorage.getItem("background")) { store.commit("setBackground", localStorage.background); } if (localStorage.getItem("zoom")) { store.commit("setZoom", parseFloat(localStorage.getItem("zoom"))); } if (localStorage.isPublic !== undefined) { store.commit("toggleGrimoire", JSON.parse(localStorage.isPublic)); } if (localStorage.roles !== undefined) { store.commit("setCustomRoles", JSON.parse(localStorage.roles)); store.commit("setEdition", { id: "custom" }); } if (localStorage.edition !== undefined) { // this will initialize state.roles for official editions store.commit("setEdition", JSON.parse(localStorage.edition)); } if (localStorage.bluffs !== undefined) { JSON.parse(localStorage.bluffs).forEach((role, index) => { store.commit("players/setBluff", { index, role: store.state.roles.get(role) || {} }); }); } if (localStorage.fabled !== undefined) { store.commit("players/setFabled", { fabled: JSON.parse(localStorage.fabled).map(id => store.state.fabled.get(id) ) }); } if (localStorage.players) { store.commit( "players/set", JSON.parse(localStorage.players).map(player => ({ ...player, role: store.state.roles.get(player.role) || {} })) ); } /**** Session related data *****/ if (localStorage.getItem("playerId")) { store.commit("session/setPlayerId", localStorage.getItem("playerId")); } if (localStorage.getItem("session")) { const [spectator, sessionId] = JSON.parse(localStorage.getItem("session")); store.commit("session/setSpectator", spectator); store.commit("session/setSessionId", sessionId); } // listen to mutations store.subscribe(({ type, payload }, state) => { switch (type) { case "toggleGrimoire": localStorage.setItem( "isPublic", JSON.stringify(state.grimoire.isPublic) ); break; case "setBackground": if (payload) { localStorage.setItem("background", payload); } else { localStorage.removeItem("background"); } break; case "setZoom": if (payload !== 0) { localStorage.setItem("zoom", payload); } else { localStorage.removeItem("zoom"); } break; case "setEdition": localStorage.setItem("edition", JSON.stringify(payload)); if (state.edition.isOfficial) { localStorage.removeItem("roles"); } break; case "setCustomRoles": if (!payload.length) { localStorage.removeItem("roles"); } else { localStorage.setItem( "roles", JSON.stringify(store.getters.customRoles) ); } break; case "players/setBluff": localStorage.setItem( "bluffs", JSON.stringify(state.players.bluffs.map(({ id }) => id)) ); break; case "players/setFabled": localStorage.setItem( "fabled", JSON.stringify(state.players.fabled.map(({ id }) => id)) ); break; case "players/add": case "players/update": case "players/remove": case "players/clear": case "players/set": case "players/swap": case "players/move": if (state.players.players.length) { localStorage.setItem( "players", JSON.stringify( state.players.players.map(player => ({ ...player, // simplify the stored data role: player.role.id || {} })) ) ); } else { localStorage.removeItem("players"); } break; case "session/setSessionId": if (payload) { localStorage.setItem( "session", JSON.stringify([state.session.isSpectator, payload]) ); } else { localStorage.removeItem("session"); } break; case "session/setPlayerId": if (payload) { localStorage.setItem("playerId", payload); } else { localStorage.removeItem("playerId"); } break; } }); };