+
@@ -92,7 +92,7 @@
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/teamer.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/teamer.js
deleted file mode 100644
index 63e1ebd9..00000000
--- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/teamer.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import EventBus from '../../_bus';
-import axios from 'axios';
-
-export default {
- namespaced: true,
- state: {},
- actions: {
- load ({ commit, rootState }) {
- commit('loadingBegin', null, { root: true });
-
- const client = axios.create({
- headers: {
- 'X-Auth-Token': rootState.authToken
- }
- });
-
- return client.get('/api/teamers/' + rootState.memberId)
- .then((response) => {
- commit('loadingFinish', null, { root: true });
- return response.data;
- }).catch((error) => {
- commit('loadingFinish', null, { root: true });
- commit('alert', {
- message: 'Es ist ein Fehler aufgetreten :(',
- class: 'alert-danger'
- }, { root: true });
- commit('logout', null, { root: true });
- EventBus.$emit('forcedLogout');
- throw error;
- });
- },
- save ({ commit, rootState }, data) {
- commit('loadingBegin', null, { root: true });
-
- const client = axios.create({
- headers: {
- 'X-Auth-Token': rootState.authToken
- }
- });
-
- return client.put('/api/teamers/' + rootState.memberId, data)
- .then(() => {
- commit('loadingFinish', null, { root: true });
- commit('alert', {
- message: 'Die Änderungen wurden gespeichert',
- class: 'alert-success'
- }, { root: true });
- }).catch((error) => {
- commit('loadingFinish', null, { root: true });
- commit('alert', {
- message: 'Es ist ein Fehler aufgetreten :(',
- class: 'alert-danger'
- }, { root: true });
- commit('logout', null, { root: true });
- EventBus.$emit('forcedLogout');
- throw error;
- });
- }
- }
-}
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/router/index.js
similarity index 70%
rename from public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js
rename to public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/router/index.js
index 5db0b8ff..64777b52 100644
--- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/router/index.js
@@ -1,30 +1,28 @@
import Vue from 'vue';
import VueRouter from 'vue-router';
-import store from './../_store';
+import store from '../store';
Vue.use(VueRouter);
const guard = (to, from, next) => {
if (store.state.loading) {
next(false);
- } else if (store.state.loggedIn) {
- if (to.meta.requiresTeamer && !store.getters.isTeamer) {
- next(false);
- } else {
- next();
- }
- } else {
+ } else if (store.getters.isLoggedIn === false) {
next({ name: 'login' });
+ } else if (to.meta.requiresTeamer && store.getters.isTeamer === false) {
+ next(false);
+ } else {
+ next();
}
};
-import Address from './components/Address.vue'
-import Events from './components/Events.vue'
-import Login from './components/Login.vue'
-import CrmData from './components/CrmData.vue'
-import Teamer from './components/Teamer.vue'
-import Newsletter from './components/Newsletter.vue'
-import Registration from './components/Registration'
+import Address from '../myep/Address'
+import Events from '../myep/Events'
+import Login from '../myep/Login'
+import CrmData from '../myep/CrmData'
+import Teamer from '../myep/Teamer'
+import Newsletter from '../myep/Newsletter'
+import Registration from '../myep/Registration'
export default new VueRouter({
routes: [
@@ -33,7 +31,7 @@ export default new VueRouter({
path: '/',
component: Login,
beforeEnter (from, to, next) {
- if (!store.state.loggedIn) {
+ if (store.getters.isLoggedIn === false) {
next();
} else {
next({ name: 'address' });
@@ -45,7 +43,7 @@ export default new VueRouter({
path: '/register',
component: Registration,
beforeEnter (from, to, next) {
- if (!store.state.loggedIn) {
+ if (store.getters.isLoggedIn === false) {
next();
} else {
next({ name: 'address' });
@@ -87,5 +85,8 @@ export default new VueRouter({
path: '*',
redirect: { name: 'login' }
}
- ]
+ ],
+ scrollBehavior (to, from, savedPosition) {
+ return { selector: '#myep-main', offset: { x: 0, y: 160 } }
+ }
});
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/index.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/index.js
new file mode 100644
index 00000000..2b4b6eb9
--- /dev/null
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/index.js
@@ -0,0 +1,208 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import axios from 'axios'
+
+import AddressStore from './modules/address'
+import CrmDataStore from './modules/crmdata'
+import TeamerStore from './modules/teamer'
+import EventsStore from './modules/events'
+import NewsletterStore from './modules/newsletter'
+
+Vue.use(Vuex);
+
+const defaultUserData = {
+ isTeamer: false,
+ email: '',
+ firstName: '',
+ lastName: '',
+ gender: '',
+ dateOfBirth: null,
+ street: '',
+ zipCode: '',
+ city: '',
+ phoneMobile: '',
+ phonePrivate: '',
+ newsletter: false
+};
+
+export default new Vuex.Store({
+ modules: {
+ address: AddressStore,
+ crmdata: CrmDataStore,
+ teamer: TeamerStore,
+ events: EventsStore,
+ newsletter: NewsletterStore
+ },
+ state: {
+ config: {},
+ watchlist: [],
+ loading: false,
+ authToken: null,
+ userData: defaultUserData,
+ countries: [],
+ alert: {
+ message: '',
+ class: ''
+ }
+ },
+ mutations: {
+ initSession (state) {
+ const authToken = sessionStorage.getItem('token');
+ if (authToken) {
+ state.authToken = authToken;
+ }
+ },
+ initConfig (state) {
+ const configElement = document.getElementById('appconfig');
+ state.config = JSON.parse(configElement.innerHTML);
+ axios.defaults.baseURL = state.config.myEpApiBaseUrl;
+ },
+ initWatchlist (state) {
+ if (!sessionStorage.getItem('watchlist')) {
+ sessionStorage.setItem('watchlist', JSON.stringify([]));
+ }
+ state.watchlist = JSON.parse(sessionStorage.getItem('watchlist'));
+ },
+ setWatchlist (state, list) {
+ state.watchlist = list;
+ sessionStorage.setItem('watchlist', JSON.stringify(state.watchlist));
+ },
+ setUserData (state, data) {
+ state.userData = data;
+ },
+ login (state, token) {
+ state.authToken = token;
+ sessionStorage.setItem('token', token);
+ },
+ logout (state) {
+ state.authToken = null;
+ state.watchlist = [];
+ state.userData = defaultUserData;
+ sessionStorage.removeItem('token');
+ sessionStorage.removeItem('watchlist');
+ },
+ alert (state, payload) {
+ state.alert = payload;
+ },
+ loadingBegin (state) {
+ state.loading = true;
+ state.alert = { message: '', class: ''};
+ },
+ loadingFinish (state) {
+ state.loading = false;
+ },
+ setCountries (state, countries) {
+ state.countries = countries;
+ }
+ },
+ actions: {
+ init({ commit }) {
+ commit('initConfig');
+ commit('initWatchlist');
+ },
+ initSession({ commit, dispatch }) {
+ commit('initSession');
+ return dispatch('loadSelectableValues')
+ },
+ login({ commit, dispatch }, credentials) {
+ commit('loadingBegin');
+ return axios({
+ url: '/api/login_check',
+ method: 'post',
+ data: {
+ username: credentials.email,
+ password: credentials.password
+ }
+ }).then(response => {
+ commit('login', response.data.token);
+ }).catch(error => {
+ commit('logout');
+ commit('alert', {
+ message: 'Der Login ist fehlgeschlagen :(',
+ class: 'alert-danger'
+ });
+ throw error;
+ }).finally(() => {
+ commit('loadingFinish');
+ });
+ },
+ logout({ commit, state }) {
+ commit('loadingBegin');
+ const client = axios.create({
+ headers: {
+ 'Authorization': 'Bearer ' + state.authToken,
+ }
+ });
+ return client({
+ url: '/api/logout'
+ }).then(() => {
+ commit('logout');
+ }).catch(error => {
+ commit('alert', {
+ message: 'Der Logout ist fehlgeschlagen :(',
+ class: 'alert-danger'
+ });
+ throw error;
+ }).finally(() => {
+ commit('loadingFinish');
+ });
+ },
+ resetPassword({ commit }, email) {
+ commit('loadingBegin');
+ return axios({
+ url: '/api/reset-password',
+ data: { email: email },
+ method: 'post'
+ }).then(response => {
+ return response;
+ }).catch(error => {
+ throw error;
+ }).finally(() => {
+ commit('loadingFinish');
+ });
+ },
+ register({ commit }, userData) {
+ commit('loadingBegin');
+ return axios({
+ url: '/api/register',
+ data: userData,
+ method: 'post'
+ }).then(response => {
+ return response;
+ }).catch(error => {
+ throw error;
+ }).finally(() => {
+ commit('loadingFinish');
+ });
+ },
+ loadSelectableValues ({ commit }) {
+ commit('loadingBegin');
+ return axios({
+ url: '/api/countries',
+ }).then(response => {
+ commit('setCountries', response.data);
+ }).finally(() => {
+ commit('loadingFinish');
+ });
+ },
+ watchlistToggle ({ commit, state }, uid) {
+ let list = state.watchlist;
+ let watchlistIndex = list.indexOf(uid);
+ if (watchlistIndex === -1) {
+ list.push(uid)
+ } else {
+ list.splice(watchlistIndex, 1)
+ }
+ commit('setWatchlist', list);
+ if (!!state.authToken) {
+ axios.put('/api/watchlist', list)
+ }
+ },
+ },
+ getters: {
+ watchlistCount: state => state.watchlist.length,
+ onWatchlist: (state) => (uid) => state.watchlist.indexOf(uid) !== -1,
+ isLoggedIn: state => !!state.authToken,
+ isTeamer: state => state.userData.isTeamer,
+ }
+});
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/address.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/address.js
similarity index 68%
rename from public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/address.js
rename to public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/address.js
index 3ca0b8f7..6aaba9f2 100644
--- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/address.js
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/address.js
@@ -1,4 +1,3 @@
-import EventBus from '../../_bus';
import axios from 'axios';
export default {
@@ -10,23 +9,24 @@ export default {
const client = axios.create({
headers: {
- 'X-Auth-Token': rootState.authToken
+ 'Authorization': 'Bearer ' + rootState.authToken,
}
});
- return client.get('/api/addresses')
- .then((response) => {
- commit('loadingFinish', null, { root: true });
- return response.data['hydra:member'][0];
- }).catch((error) => {
- commit('loadingFinish', null, { root: true });
+ return client.get('/api/address')
+ .then(response => {
+ commit('setUserData', response.data, { root: true });
+ if (response.data.watchlist) {
+ commit('setWatchlist', response.data.watchlist, { root: true });
+ }
+ }).catch(() => {
commit('alert', {
message: 'Es ist ein Fehler aufgetreten :(',
class: 'alert-danger'
}, { root: true });
commit('logout', null, { root: true });
- EventBus.$emit('forcedLogout');
- throw error;
+ }).finally(() => {
+ commit('loadingFinish', null, { root: true });
});
},
save ({ commit, rootState }, data) {
@@ -34,25 +34,25 @@ export default {
const client = axios.create({
headers: {
- 'X-Auth-Token': rootState.authToken
+ 'Authorization': 'Bearer ' + rootState.authToken,
}
});
- return client.put('/api/addresses/' + data.id, data)
+ return client.put('/api/address', data)
.then(() => {
- commit('loadingFinish', null, { root: true });
commit('alert', {
message: 'Die Änderungen wurden gespeichert',
class: 'alert-success'
}, { root: true });
})
- .catch((error) => {
- commit('loadingFinish', null, { root: true });
+ .catch(error => {
commit('alert', {
message: 'Es ist ein Fehler aufgetreten :(',
class: 'alert-danger'
}, { root: true });
throw error;
+ }).finally(() => {
+ commit('loadingFinish', null, { root: true });
});
}
}
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/crmdata.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/crmdata.js
similarity index 85%
rename from public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/crmdata.js
rename to public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/crmdata.js
index 5d394dd8..fae24675 100644
--- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/crmdata.js
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/crmdata.js
@@ -1,4 +1,3 @@
-import EventBus from '../../_bus';
import axios from 'axios';
export default {
@@ -10,14 +9,14 @@ export default {
const client = axios.create({
headers: {
- 'X-Auth-Token': rootState.authToken
+ 'Authorization': 'Bearer ' + rootState.authToken
}
});
return client.get('/api/crm-selections')
.then((response) => {
commit('loadingFinish', null, { root: true });
- return response.data['hydra:member'][0];
+ return response.data;
}).catch((error) => {
commit('loadingFinish', null, { root: true });
commit('alert', {
@@ -25,7 +24,6 @@ export default {
class: 'alert-danger'
}, { root: true });
commit('logout', null, { root: true });
- EventBus.$emit('forcedLogout');
throw error;
});
},
@@ -34,7 +32,7 @@ export default {
const client = axios.create({
headers: {
- 'X-Auth-Token': rootState.authToken
+ 'Authorization': 'Bearer ' + rootState.authToken
}
});
@@ -52,7 +50,6 @@ export default {
class: 'alert-danger'
}, { root: true });
commit('logout', null, { root: true });
- EventBus.$emit('forcedLogout');
throw error;
});
}
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/events.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/events.js
similarity index 89%
rename from public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/events.js
rename to public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/events.js
index d55f97f4..5232859f 100644
--- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/events.js
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/events.js
@@ -10,14 +10,14 @@ export default {
const client = axios.create({
headers: {
- 'X-Auth-Token': rootState.authToken
+ 'Authorization': 'Bearer ' + rootState.authToken
}
});
return client.get('/api/events')
.then((response) => {
commit('loadingFinish', null, { root: true });
- return response.data['hydra:member'];
+ return response.data;
}).catch((error) => {
commit('loadingFinish', null, { root: true });
commit('alert', {
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/newsletter.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/newsletter.js
similarity index 84%
rename from public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/newsletter.js
rename to public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/newsletter.js
index a134f6f6..5cf3c614 100644
--- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/stores/newsletter.js
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/newsletter.js
@@ -10,20 +10,18 @@ export default {
const client = axios.create({
headers: {
- 'X-Auth-Token': rootState.authToken
+ 'Authorization': 'Bearer ' + rootState.authToken
}
});
- return client.put('/api/newsletters/' + data.id, data)
+ return client.put('/api/newsletter', data)
.then(() => {
- commit('loadingFinish', null, { root: true });
commit('alert', {
message: 'Die Änderungen wurden gespeichert',
class: 'alert-success'
}, { root: true });
})
.catch((error) => {
- commit('loadingFinish', null, { root: true });
commit('alert', {
message: 'Es ist ein Fehler aufgetreten :(',
class: 'alert-danger'
@@ -31,6 +29,8 @@ export default {
commit('logout', null, { root: true });
EventBus.$emit('forcedLogout');
throw error;
+ }).finally(() => {
+ commit('loadingFinish', null, { root: true });
});
}
}
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/teamer.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/teamer.js
new file mode 100644
index 00000000..496b9676
--- /dev/null
+++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/store/modules/teamer.js
@@ -0,0 +1,75 @@
+import EventBus from '../../_bus';
+import axios from 'axios';
+
+export default {
+ namespaced: true,
+ state: {
+ abilities: [],
+ timeFrames: [],
+ jobProfiles: []
+ },
+ mutations: {
+ setAbilities (state, abilities) {
+ state.abilities = abilities;
+ },
+ setTimeFrames (state, timeFrames) {
+ state.timeFrames = timeFrames;
+ },
+ setJobProfiles (state, jobProfiles) {
+ state.jobProfiles = jobProfiles;
+ }
+ },
+ actions: {
+ save ({ commit, rootState }, data) {
+ commit('loadingBegin', null, { root: true });
+
+ const client = axios.create({
+ headers: {
+ 'Authorization': 'Bearer ' + rootState.authToken
+ }
+ });
+
+ return client.put('/api/teamer/', data)
+ .then(() => {
+ commit('alert', {
+ message: 'Die Änderungen wurden gespeichert',
+ class: 'alert-success'
+ }, { root: true });
+ }).catch(error => {
+ commit('alert', {
+ message: 'Es ist ein Fehler aufgetreten :(',
+ class: 'alert-danger'
+ }, { root: true });
+ commit('logout', null, { root: true });
+ EventBus.$emit('forcedLogout');
+ throw error;
+ }).finally(() => {
+ commit('loadingFinish', null, { root: true });
+ });
+ },
+ loadSelectableValues ({ commit, rootState }) {
+ commit('loadingBegin', null, { root: true });
+
+ const client = axios.create({
+ headers: {
+ 'Authorization': 'Bearer ' + rootState.authToken
+ }
+ });
+
+ return client.get('/api/teamer-data')
+ .then(response => {
+ commit('setAbilities', response.data.abilities);
+ commit('setTimeFrames', response.data.timeFrames);
+ commit('setJobProfiles', response.data.jobProfiles);
+ }).catch(error => {
+ }).finally(() => {
+ commit('loadingFinish', null, { root: true });
+ });
+ }
+ },
+ getters: {
+ abilities: state => state.abilities,
+ jobProfiles: state => state.jobProfiles,
+ timeFrames: state => state.timeFrames
+ }
+}