From 80690333838c224e74c20301ddaacadd4b838c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Fromme?= Date: Thu, 25 Oct 2018 18:21:18 +0200 Subject: [PATCH] Implement teamer section --- .../Private/Assets/js/myep/_router.js | 17 ++ .../Private/Assets/js/myep/_store.js | 86 ++++++++- .../Assets/js/myep/components/Address.vue | 3 +- .../Private/Assets/js/myep/components/App.vue | 6 +- .../Assets/js/myep/components/Teamer.vue | 169 ++++++++++++++++++ 5 files changed, 270 insertions(+), 11 deletions(-) create mode 100644 web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Teamer.vue diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js index 8e1dc817..0374ebdf 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js @@ -14,10 +14,21 @@ const guard = (to, from, next) => { } }; +const guardTeamer = (to, from, next) => { + if (store.state.loading) { + next(false); + } else if (store.state.loggedIn && store.state.teamer) { + next(); + } else { + next({ name: 'login' }); + } +}; + 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' export default new VueRouter({ routes: [ @@ -51,6 +62,12 @@ export default new VueRouter({ component: CrmData, beforeEnter: guard }, + { + name: 'teamer', + path: '/teamer', + component: Teamer, + beforeEnter: guardTeamer + }, { path: '*', redirect: { name: 'login' } diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js index 6a5c3e92..bb80dd97 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js @@ -6,8 +6,6 @@ import EventBus from '../_bus' const configElement = document.getElementById('appconfig'); const config = JSON.parse(configElement.innerHTML); -axios.defaults.headers.common['Accept'] = 'application/json'; -axios.defaults.headers.put['Content-Type'] = 'application/json'; axios.defaults.baseURL = config.myEpApiBaseUrl; const createAuthenticatingClient = () => { @@ -25,7 +23,11 @@ export default new Vuex.Store({ config: config, loading: false, loggedIn: !!sessionStorage.getItem('token'), - countries: [] + teamer: !!sessionStorage.getItem('teamerId'), + countries: [], + abilities: [], + timeFrames: [], + jobProfiles: [] }, mutations: { loginSuccess (state) { @@ -37,6 +39,9 @@ export default new Vuex.Store({ logout (state) { state.loggedIn = false; }, + isTeamer (state) { + state.teamer = true; + }, loadingBegin (state) { state.loading = true; }, @@ -45,6 +50,15 @@ export default new Vuex.Store({ }, setCountries (state, countries) { state.countries = countries; + }, + setAbilities (state, abilities) { + state.abilities = abilities; + }, + setTimeFrames (state, timeFrames) { + state.timeFrames = timeFrames; + }, + setJobProfiles (state, jobProfiles) { + state.jobProfiles = jobProfiles; } }, actions: { @@ -59,6 +73,10 @@ export default new Vuex.Store({ method: 'post' }).then((response) => { sessionStorage.setItem('token', response.data.token); + sessionStorage.setItem('teamerId', response.data.teamer_id); + if (response.data.teamer_id) { + commit('isTeamer'); + } commit('loginSuccess'); commit('loadingFinish'); }).catch((error) => { @@ -75,6 +93,7 @@ export default new Vuex.Store({ } }).then(() => { sessionStorage.removeItem('token'); + sessionStorage.removeItem('teamerId'); commit('logout'); }); }, @@ -93,12 +112,27 @@ export default new Vuex.Store({ throw error; }); }, - loadCountries ({ commit }) { + loadSelectableValues ({ commit }) { axios({ url: '/api/countries', }).then((response) => { - commit('setCountries', response.data); - }) + commit('setCountries', response.data['hydra:member']); + }); + axios({ + url: '/api/teamer-abilities', + }).then((response) => { + commit('setAbilities', response.data['hydra:member']); + }); + axios({ + url: '/api/timeframes', + }).then((response) => { + commit('setTimeFrames', response.data['hydra:member']); + }); + axios({ + url: '/api/teamer-job-profiles', + }).then((response) => { + commit('setJobProfiles', response.data['hydra:member']); + }); }, loadAddress ({ commit }) { commit('loadingBegin'); @@ -108,7 +142,7 @@ export default new Vuex.Store({ return client.get('/api/addresses') .then((response) => { commit('loadingFinish'); - return response.data[0]; + return response.data['hydra:member'][0]; }).catch((error) => { commit('loadingFinish'); commit('logout'); @@ -140,7 +174,7 @@ export default new Vuex.Store({ return client.get('/api/events') .then((response) => { commit('loadingFinish'); - return response.data; + return response.data['hydra:member']; }).catch((error) => { commit('loadingFinish'); commit('logout'); @@ -156,7 +190,7 @@ export default new Vuex.Store({ return client.get('/api/crm-selections') .then((response) => { commit('loadingFinish'); - return response.data[0]; + return response.data['hydra:member'][0]; }).catch((error) => { commit('loadingFinish'); commit('logout'); @@ -178,11 +212,45 @@ export default new Vuex.Store({ EventBus.$emit('forcedLogout'); throw error; }); + }, + loadTeamerData ({ commit }) { + commit('loadingBegin'); + + const client = createAuthenticatingClient(); + + return client.get('/api/teamers/' + sessionStorage.getItem('teamerId')) + .then((response) => { + commit('loadingFinish'); + return response.data; + }).catch((error) => { + commit('loadingFinish'); + commit('logout'); + EventBus.$emit('forcedLogout'); + throw error; + }); + }, + saveTeamerData ({ commit }, data) { + commit('loadingBegin'); + + const client = createAuthenticatingClient(); + + return client.put('/api/teamers/' + sessionStorage.getItem('teamerId'), data) + .then(() => { + commit('loadingFinish'); + }).catch((error) => { + commit('loadingFinish'); + commit('logout'); + EventBus.$emit('forcedLogout'); + throw error; + }); } }, getters: { authToken () { return sessionStorage.getItem('token') + }, + teamerId () { + return sessionStorage.getItem('teamerId') } } }); diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Address.vue b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Address.vue index 5ccef7ec..46c1e14f 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Address.vue +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Address.vue @@ -69,7 +69,8 @@ Land:
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue index d73f8f5f..751b8c4c 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue @@ -4,6 +4,7 @@ Adressdaten Reise-Historie Mein Profil + Teamer
  • Logout
  • @@ -30,6 +31,9 @@ isLoggedIn () { return this.$store.state.loggedIn; }, + isTeamer () { + return this.$store.state.teamer; + }, loaderUrl () { return this.$store.state.config.loaderUrl; }, @@ -38,7 +42,7 @@ } }, created () { - this.$store.dispatch('loadCountries'); + this.$store.dispatch('loadSelectableValues'); EventBus.$on('forcedLogout', () => { this.$router.push({ name: 'login' }) }); diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Teamer.vue b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Teamer.vue new file mode 100644 index 00000000..773b1b57 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/Teamer.vue @@ -0,0 +1,169 @@ + + +