Store members' watchlist in db

This commit is contained in:
Björn Fromme
2018-12-20 16:38:52 +01:00
parent 138bb84ab6
commit cccee74afa
2 changed files with 34 additions and 21 deletions
@@ -21,12 +21,12 @@ export default new Vuex.Store({
state: { state: {
config: {}, config: {},
watchlist: [], watchlist: [],
watchlistId: null,
loading: false, loading: false,
authToken: sessionStorage.getItem('token'), authToken: sessionStorage.getItem('token'),
loggedIn: !!sessionStorage.getItem('token'), loggedIn: !!sessionStorage.getItem('token'),
isTeamer: JSON.parse(sessionStorage.getItem('isTeamer')), isTeamer: JSON.parse(sessionStorage.getItem('isTeamer')),
memberId: JSON.parse(sessionStorage.getItem('memberId')), memberId: JSON.parse(sessionStorage.getItem('memberId')),
memberName: sessionStorage.getItem('memberName'),
countries: [], countries: [],
abilities: [], abilities: [],
timeFrames: [], timeFrames: [],
@@ -44,31 +44,30 @@ export default new Vuex.Store({
}, },
initWatchlist (state, list = null) { initWatchlist (state, list = null) {
if (list) { if (list) {
sessionStorage.setItem('watchlist', JSON.stringify(list.items)); sessionStorage.setItem('watchlist', JSON.stringify(list));
sessionStorage.setItem('watchlistId', JSON.stringify(list.id));
} else if (!sessionStorage.getItem('watchlist')) { } else if (!sessionStorage.getItem('watchlist')) {
sessionStorage.setItem('watchlist', JSON.stringify([])); sessionStorage.setItem('watchlist', JSON.stringify({ id: null, items: [] }));
sessionStorage.setItem('watchlistId', JSON.stringify(null));
} }
state.watchlist = JSON.parse(sessionStorage.getItem('watchlist')); state.watchlist = JSON.parse(sessionStorage.getItem('watchlist'));
state.watchlistId = JSON.parse(sessionStorage.getItem('watchlistId'));
}, },
watchlistToggle (state, uid) { watchlistToggle (state, uid) {
let list = state.watchlist; let list = state.watchlist.items;
let watchlistIndex = list.indexOf(uid); let watchlistIndex = list.indexOf(uid);
if (watchlistIndex === -1) { if (watchlistIndex === -1) {
list.push(uid) list.push(uid)
} else { } else {
list.splice(watchlistIndex, 1) list.splice(watchlistIndex, 1)
} }
state.watchlist = list; state.watchlist.items = list;
sessionStorage.setItem('watchlist', JSON.stringify(list)); sessionStorage.setItem('watchlist', JSON.stringify(state.watchlist));
if (state.watchlistId) {
axios({ if (state.loggedIn) {
url: '/api/watchlists/' + state.watchlistId, const client = axios.create({
data: state.watchlist, headers: {
method: 'put' 'X-Auth-Token': state.authToken
}
}); });
client.put('/api/watchlists/' + state.watchlist.id, state.watchlist);
} }
}, },
loginSuccess (state, token) { loginSuccess (state, token) {
@@ -84,9 +83,12 @@ export default new Vuex.Store({
state.isTeamer = false; state.isTeamer = false;
state.teamerId = null; state.teamerId = null;
state.authToken = null; state.authToken = null;
state.watchlist = { id: null, items: [] };
sessionStorage.removeItem('token'); sessionStorage.removeItem('token');
sessionStorage.removeItem('isTeamer'); sessionStorage.removeItem('isTeamer');
sessionStorage.removeItem('memberId'); sessionStorage.removeItem('memberId');
sessionStorage.removeItem('memberName');
sessionStorage.removeItem('watchlist');
}, },
alert (state, payload) { alert (state, payload) {
state.message.text = payload.message; state.message.text = payload.message;
@@ -96,9 +98,11 @@ export default new Vuex.Store({
state.isTeamer = true; state.isTeamer = true;
sessionStorage.setItem('isTeamer', JSON.stringify(true)); sessionStorage.setItem('isTeamer', JSON.stringify(true));
}, },
setMember (state, memberId) { setMember (state, member) {
state.memberId = memberId; state.memberId = member.id;
sessionStorage.setItem('memberId', memberId); state.memberName = member.name;
sessionStorage.setItem('memberId', member.id);
sessionStorage.setItem('memberName', member.name);
}, },
loadingBegin (state) { loadingBegin (state) {
state.loading = true; state.loading = true;
@@ -134,7 +138,7 @@ export default new Vuex.Store({
withCredentials: true withCredentials: true
}).then((response) => { }).then((response) => {
let memberId = parseInt(response.data.member_id); let memberId = parseInt(response.data.member_id);
commit('setMember', memberId); commit('setMember', { id: memberId, name: response.data.member_name });
if (response.data.watchlist) { if (response.data.watchlist) {
commit('initWatchlist', response.data.watchlist); commit('initWatchlist', response.data.watchlist);
} }
@@ -154,6 +158,7 @@ export default new Vuex.Store({
}); });
}, },
logout({ commit, state }) { logout({ commit, state }) {
commit('loadingBegin');
return axios({ return axios({
url: '/api/logout', url: '/api/logout',
headers: { headers: {
@@ -161,6 +166,14 @@ export default new Vuex.Store({
} }
}).then(() => { }).then(() => {
commit('logout'); commit('logout');
commit('loadingFinish');
}).catch((error) => {
commit('alert', {
message: 'Der Logout ist fehlgeschlagen :(',
class: 'alert-danger'
});
commit('loadingFinish');
throw error;
}); });
}, },
resetPassword({ commit }, email) { resetPassword({ commit }, email) {
@@ -204,10 +217,10 @@ export default new Vuex.Store({
}, },
getters: { getters: {
watchlistCount: state => { watchlistCount: state => {
return state.watchlist.length; return state.watchlist.items.length;
}, },
onWatchlist: (state) => (uid) => { onWatchlist: (state) => (uid) => {
return state.watchlist.indexOf(uid) !== -1; return state.watchlist.items.indexOf(uid) !== -1;
}, },
authToken: state => { authToken: state => {
return state.authToken; return state.authToken;
@@ -88,7 +88,7 @@
}); });
}, },
mounted () { mounted () {
this.watchlist = this.$store.state.watchlist; this.watchlist = this.$store.state.watchlist.items;
Vue.nextTick(() => { Vue.nextTick(() => {
this.loadList(); this.loadList();
}) })