Implement Newsletter un/registration into MyE&P

This commit is contained in:
Björn Fromme
2018-11-08 12:57:07 +01:00
parent 074572a8b7
commit f16339fdc6
5 changed files with 108 additions and 1 deletions
@@ -22,6 +22,7 @@ import Address from './components/Address.vue'
import Events from './components/Events.vue'
import Login from './components/Login.vue'
import Teamer from './components/Teamer.vue'
import Newsletter from './components/Newsletter.vue'
export default new VueRouter({
routes: [
@@ -43,6 +44,12 @@ export default new VueRouter({
component: Address,
beforeEnter: guard
},
{
name: 'newsletter',
path: '/newsletter',
component: Newsletter,
beforeEnter: guard
},
{
name: 'events',
path: '/vorgaenge',
@@ -6,6 +6,7 @@ import AddressStore from './stores/address'
import CrmDataStore from './stores/crmdata'
import TeamerStore from './stores/teamer'
import EventsStore from './stores/events'
import NewsletterStore from './stores/newsletter'
const configElement = document.getElementById('appconfig');
const config = JSON.parse(configElement.innerHTML);
@@ -19,7 +20,8 @@ export default new Vuex.Store({
address: AddressStore,
crmdata: CrmDataStore,
teamer: TeamerStore,
events: EventsStore
events: EventsStore,
newsletter: NewsletterStore
},
state: {
config: config,
@@ -13,6 +13,7 @@
<div class="collapse navbar-collapse" id="myep-navbar">
<ul class="nav navbar-nav">
<router-link :to="{ name: 'address' }" tag="li" active-class="active" :class="{ disabled: loading }"><a>Adressdaten</a></router-link>
<router-link :to="{ name: 'newsletter' }" tag="li" active-class="active" :class="{ disabled: loading }"><a>Newsletter</a></router-link>
<router-link :to="{ name: 'events' }" tag="li" active-class="active" :class="{ disabled: loading }"><a>Reise-Historie</a></router-link>
<router-link :to="{ name: 'teamer' }" tag="li" active-class="active" :class="{ disabled: loading }" v-if="isTeamer"><a>Teamer</a></router-link>
</ul>
@@ -0,0 +1,60 @@
<template>
<div class="form-wrapper form--border" id="myep-main" v-show="!loading">
<h1>Newsletter</h1>
<div class="row">
<div class="col-xs-12">
<p v-html="statusMessage"></p>
<button type="submit" class="button" :disabled="loading" @click.prevent="toggleReqistration()">
{{ address.newsletter ? 'Abmelden' : 'Anmelden' }}
</button>
</div>
</div>
</div>
</template>
<script>
import EventBus from '../../_bus'
export default {
data () {
return {
address: {}
}
},
created () {
this.fetchAddress();
},
methods: {
fetchAddress () {
this.$store.dispatch('address/load')
.then((data) => {
this.address = data;
EventBus.$emit('scrollTo', '#myep-main');
});
},
toggleReqistration () {
this.address.newsletter = !this.address.newsletter;
const data = {
id: this.address.id,
email: this.address.email,
registration: this.address.newsletter
};
this.$store.dispatch('newsletter/registration', data)
.then(() => {
EventBus.$emit('scrollTo', '#myep-main');
});
}
},
computed: {
loading () {
return this.$store.state.loading;
},
statusMessage () {
let message = 'Du bist aktuell';
message += this.address.newsletter ? ' ' : ' <strong>nicht</strong> ';
message += 'zum Newsletter angemeldet.';
return message;
}
}
}
</script>
@@ -0,0 +1,37 @@
import EventBus from '../../_bus';
import axios from 'axios';
export default {
namespaced: true,
state: {},
actions: {
registration ({ commit }, data) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
}
});
return client.put('/api/newsletters/' + data.id, 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;
});
}
}
}