townsquare/src/store/persistence.js

95 lines
2.6 KiB
JavaScript
Raw Normal View History

2020-05-02 19:46:51 +00:00
module.exports = store => {
2020-05-02 20:23:05 +00:00
// initialize data
2020-05-02 19:46:51 +00:00
if (localStorage.background !== undefined) {
store.commit("setBackground", localStorage.background);
}
if (localStorage.isPublic !== undefined) {
store.commit("toggleGrimoire", JSON.parse(localStorage.isPublic));
2020-05-02 19:46:51 +00:00
}
if (localStorage.edition !== undefined) {
2020-05-03 21:05:17 +00:00
// this will initialize state.roles!
2020-05-02 19:46:51 +00:00
store.commit("setEdition", localStorage.edition);
}
2020-05-03 21:05:17 +00:00
if (localStorage.bluffs !== undefined) {
JSON.parse(localStorage.bluffs).forEach((role, index) => {
store.commit("setBluff", {
index,
role: store.state.roles.get(role) || {}
});
});
}
2020-05-02 20:23:05 +00:00
if (localStorage.players) {
store.commit(
2020-05-03 21:05:17 +00:00
"players/set",
2020-05-02 20:23:05 +00:00
JSON.parse(localStorage.players).map(player => ({
...player,
role: store.state.roles.get(player.role) || {}
}))
);
}
if (localStorage.getItem("session")) {
const [spectator, sessionId] = JSON.parse(localStorage.getItem("session"));
store.commit("setSpectator", spectator);
store.commit("setSessionId", sessionId);
}
2020-05-02 19:46:51 +00:00
2020-05-02 20:23:05 +00:00
// listen to mutations
2020-05-02 19:46:51 +00:00
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 "setEdition":
localStorage.setItem("edition", payload);
break;
2020-05-03 21:05:17 +00:00
case "setBluff":
2020-05-02 20:23:05 +00:00
localStorage.setItem(
2020-05-03 21:05:17 +00:00
"bluffs",
JSON.stringify(state.grimoire.bluffs.map(({ id }) => id))
2020-05-02 20:23:05 +00:00
);
break;
case "setSessionId":
if (payload) {
localStorage.setItem(
"session",
JSON.stringify([state.session.isSpectator, payload])
);
} else {
localStorage.removeItem("session");
}
break;
2020-05-03 21:05:17 +00:00
case "players/add":
case "players/update":
case "players/remove":
case "players/clear":
case "players/set":
2020-05-12 20:22:36 +00:00
case "players/swap":
2020-05-03 21:05:17 +00:00
if (state.players.players.length) {
localStorage.setItem(
"players",
JSON.stringify(
state.players.players.map(player => ({
...player,
// simplify the stored data
2020-05-04 21:05:36 +00:00
role: player.role.id || {}
2020-05-03 21:05:17 +00:00
}))
)
);
} else {
localStorage.removeItem("players");
}
break;
2020-05-02 19:46:51 +00:00
}
});
};