From 294ce3a3880e7fee79ab9a43c0d63ab7e98be8f7 Mon Sep 17 00:00:00 2001 From: Alexander Fletcher Date: Sun, 29 May 2022 21:53:55 +0800 Subject: [PATCH] FIX #220 - Players marked as executed should have the mark follow them on player swaps and seat moves --- src/store/index.js | 3 ++- src/store/subscriptions.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/store/subscriptions.js diff --git a/src/store/index.js b/src/store/index.js index feb528d..009fed2 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -2,6 +2,7 @@ import Vue from "vue"; import Vuex from "vuex"; import persistence from "./persistence"; import socket from "./socket"; +import subscriptions from "./subscriptions"; import players from "./modules/players"; import session from "./modules/session"; import editionJSON from "../editions.json"; @@ -262,5 +263,5 @@ export default new Vuex.Store({ state.modals.edition = false; } }, - plugins: [persistence, socket] + plugins: [persistence, socket, subscriptions] }); diff --git a/src/store/subscriptions.js b/src/store/subscriptions.js new file mode 100644 index 0000000..949f4f8 --- /dev/null +++ b/src/store/subscriptions.js @@ -0,0 +1,35 @@ +// Subscription to handle players moving/swapping when marked for execution + +module.exports = store => { + const handlePlayersMove = (mutation, state) => { + const fromPlayerIndex = mutation.payload[0]; + if (fromPlayerIndex === state.session.markedPlayer) { + store.commit("session/setMarkedPlayer", mutation.payload[1]); + } + }; + + const handlePlayersSwap = (mutation, state) => { + const fromPlayerIndex = mutation.payload[0]; + if (fromPlayerIndex === state.session.markedPlayer) { + store.commit("session/setMarkedPlayer", mutation.payload[1]); + return; + } + + const toPlayerIndex = mutation.payload[1]; + if (toPlayerIndex === state.session.markedPlayer) { + store.commit("session/setMarkedPlayer", mutation.payload[0]); + return; + } + }; + + store.subscribe((mutation, state) => { + switch (mutation.type) { + case "players/move": + handlePlayersMove(mutation, state); + break; + case "players/swap": + handlePlayersSwap(mutation, state); + break; + } + }); +};