Skip to content

Commit a8d8b87

Browse files
author
Alan Smith
committed
Use vuex instead of component data
1 parent 3c6765c commit a8d8b87

File tree

7 files changed

+49
-37
lines changed

7 files changed

+49
-37
lines changed

src/components/App/App.js

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import EventList from '@sections/EventList/EventList.vue';
22
import AddEvent from '@modals/AddEvent/AddEvent.vue';
3-
import { get, set } from '@/utils/storage';
3+
import { get } from '@/utils/storage';
44

55
export default {
66
name: 'App',
@@ -10,35 +10,29 @@ export default {
1010
AddEvent,
1111
},
1212

13-
data() {
14-
return {
15-
events: [],
16-
};
17-
},
18-
1913
methods: {
20-
onAddEvent(event) {
21-
this.events.push(event);
22-
set('events', this.events);
23-
},
24-
2514
openAddEvent() {
2615
this.$refs.addEvent.open();
2716
},
28-
29-
onRemoveEvent(eventId) {
30-
const index = this.events.findIndex(event => event.eventId === eventId);
31-
this.events.splice(index, 1);
32-
set('events', this.events);
33-
},
3417
},
3518

3619
created() {
3720
const events = get('events') || [];
3821

3922
events.forEach((event) => {
4023
event.eventDate = new Date(event.eventDate);
41-
this.events.push(event);
4224
});
25+
26+
this.$store.dispatch('setEvents', events);
27+
28+
this.$store.subscribe((mutation) => {
29+
if (['ADD_EVENT', 'REMOVE_EVENT'].includes(mutation.type)) {
30+
this.$store.dispatch('syncEvents');
31+
}
32+
});
33+
},
34+
35+
destroyed() {
36+
4337
},
4438
};

src/components/App/App.vue

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
<template>
22
<div class="c-app">
3-
<event-list
4-
:events="events"
5-
@remove-event="onRemoveEvent"/>
3+
<event-list/>
64
<div
75
class="c-app__add-event-button"
86
@click="openAddEvent">Add Event</div>
9-
<add-event
10-
ref="addEvent"
11-
@add="onAddEvent"/>
7+
<add-event ref="addEvent"/>
128
</div>
139
</template>
1410
<script src="./App.js"></script>

src/components/modals/AddEvent/AddEvent.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default {
4444
const date = new Date(this.eventDate);
4545
const eventId = this.generateEventId();
4646

47-
this.$emit('add', {
47+
this.$store.dispatch('addEvent', {
4848
eventId,
4949
eventName: this.eventName,
5050
eventDate: date,

src/components/sections/Event/Event.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export default {
7373
},
7474

7575
onClickRemove() {
76-
this.$emit('remove-event', this.eventId);
76+
this.$store.dispatch('removeEvent', this.eventId);
7777
},
7878
},
7979
};

src/components/sections/EventList/EventList.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@ import Event from '@sections/Event/Event.vue';
33
export default {
44
name: 'EventList',
55

6-
props: {
7-
events: {
8-
type: Array,
9-
required: true,
10-
},
11-
},
12-
136
components: {
147
Event,
158
},
169

10+
computed: {
11+
events() {
12+
return this.$store.state.events;
13+
},
14+
},
15+
1716
methods: {
1817
onRemoveEvent(id) {
1918
this.$emit('remove-event', id);

src/components/sections/EventList/EventList.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
:event-id="event.eventId"
77
:event-name="event.eventName"
88
:event-date="event.eventDate"
9-
:background="event.background"
10-
@remove-event="onRemoveEvent"/>
9+
:background="event.background"/>
1110
</div>
1211
</template>
1312
<script src="./EventList.js"></script>

src/store.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,40 @@
11
import Vue from 'vue';
22
import Vuex from 'vuex';
3+
import { set } from '@/utils/storage';
34

45
Vue.use(Vuex);
56

67
export default new Vuex.Store({
78
state: {
8-
9+
events: [],
910
},
11+
1012
mutations: {
13+
ADD_EVENT(state, event) {
14+
state.events.push(event);
15+
},
1116

17+
REMOVE_EVENT(state, eventId) {
18+
const index = state.events.findIndex(event => event.eventId === eventId);
19+
state.events.splice(index, 1);
20+
},
1221
},
22+
1323
actions: {
24+
setEvents({ commit }, events) {
25+
events.forEach(event => commit('ADD_EVENT', event));
26+
},
27+
28+
addEvent({ commit }, event) {
29+
commit('ADD_EVENT', event);
30+
},
31+
32+
removeEvent({ commit }, eventId) {
33+
commit('REMOVE_EVENT', eventId);
34+
},
1435

36+
syncEvents({ state }) {
37+
set('events', state.events);
38+
},
1539
},
1640
});

0 commit comments

Comments
 (0)