Store members' watchlist in db
This commit is contained in:
@@ -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();
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user