Skip to content

Commit ba1c7d5

Browse files
committed
lesson12-mutations&actions1-finish
1 parent 1a5e9fe commit ba1c7d5

File tree

5 files changed

+124
-17
lines changed

5 files changed

+124
-17
lines changed

db.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,24 @@
7171
"name": "Mary Gordon"
7272
}
7373
]
74+
},
75+
{
76+
"id": 2564147,
77+
"user": {
78+
"id": "abc123",
79+
"name": "Adam Jahr"
80+
},
81+
"category": "nature",
82+
"organizer": {
83+
"id": "abc123",
84+
"name": "Adam Jahr"
85+
},
86+
"title": "Working?",
87+
"description": "",
88+
"___location": "",
89+
"date": "",
90+
"time": "",
91+
"attendees": []
7492
}
7593
]
7694
}

src/services/EventService.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,8 @@ export default {
1515
},
1616
getEvent(id) {
1717
return apiClient.get('/events/' + id)
18+
},
19+
postEvent(event) {
20+
return apiClient.post('/events', event)
1821
}
1922
}

src/store.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,20 @@ export default new Vuex.Store({
1515
'food',
1616
'community'
1717
],
18-
events: [
19-
{ id: 1, title: '...', organizer: '...' },
20-
{ id: 2, title: '...', organizer: '...' },
21-
{ id: 3, title: '...', organizer: '...' },
22-
{ id: 4, title: '...', organizer: '...' }
23-
]
18+
events: []
19+
},
20+
mutations: {
21+
ADD_EVENT(state, event) {
22+
state.events.push(event)
23+
}
24+
},
25+
actions: {
26+
createEvent({ commit }, event) {
27+
return EventService.postEvent(event).then(() => {
28+
commit('ADD_EVENT', event)
29+
})
30+
}
2431
},
25-
mutations: {},
26-
actions: {},
2732
getters: {
2833
getEventById: state => id => {
2934
return state.events.find(event => event.id === id)

src/views/EventCreate.vue

Lines changed: 89 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,99 @@
11
<template>
22
<div>
3-
<h1>Create an Event, {{ user.name }}</h1>
4-
<p>This event was created by {{ user.name }}</p>
5-
<p>{{ getEventById(2) }}</p>
3+
<h1>Create an Event</h1>
4+
<form @submit.prevent="createEvent">
5+
<label>Select a category</label>
6+
<select v-model="event.category">
7+
<option v-for="cat in categories" :key="cat">{{ cat }}</option>
8+
</select>
9+
10+
<h3>Name & describe your event</h3>
11+
<div class="field">
12+
<label>Title</label>
13+
<input v-model="event.title" type="text" placeholder="Add an event title"/>
14+
</div>
15+
16+
<div class="field">
17+
<label>Description</label>
18+
<input v-model="event.description" type="text" placeholder="Add a description"/>
19+
</div>
20+
21+
<h3>Where is your event?</h3>
22+
<div class="field">
23+
<label>Location</label>
24+
<input v-model="event.___location" type="text" placeholder="Add a ___location"/>
25+
</div>
26+
27+
<h3>When is your event?</h3>
28+
29+
<div class="field">
30+
<label>Date</label>
31+
<datepicker v-model="event.date" placeholder="Select a date"/>
32+
</div>
33+
34+
<div class="field">
35+
<label>Select a time</label>
36+
<select v-model="event.time">
37+
<option v-for="time in times" :key="time">{{ time }}</option>
38+
</select>
39+
</div>
40+
41+
<input type="submit" class="button -fill-gradient" value="Submit"/>
42+
</form>
643
</div>
744
</template>
845

9-
<script>
10-
import { mapState, mapGetters } from 'vuex'
1146

47+
<script>
48+
import Datepicker from 'vuejs-datepicker'
1249
export default {
13-
computed: {
14-
...mapGetters(['getEventById']),
15-
...mapState(['user', 'categories'])
50+
components: {
51+
Datepicker
52+
},
53+
data() {
54+
const times = []
55+
for (let i = 1; i <= 24; i++) {
56+
times.push(i + ':00')
57+
}
58+
return {
59+
times,
60+
categories: this.$store.state.categories,
61+
event: this.createFreshEventObject()
62+
}
63+
},
64+
methods: {
65+
createEvent() {
66+
this.$store
67+
.dispatch('createEvent', this.event)
68+
.then(() => {
69+
this.$router.push({
70+
name: 'event-show',
71+
params: { id: this.event.id }
72+
})
73+
this.event = this.createFreshEventObject()
74+
console.log('I was ran')
75+
})
76+
.catch(() => {
77+
console.log('There was a problem creating your event')
78+
})
79+
},
80+
createFreshEventObject() {
81+
const user = this.$store.state.user
82+
const id = Math.floor(Math.random() * 10000000)
83+
84+
return {
85+
id: id,
86+
user: user,
87+
category: '',
88+
organizer: user,
89+
title: '',
90+
description: '',
91+
___location: '',
92+
date: '',
93+
time: '',
94+
attendees: []
95+
}
96+
}
1697
}
1798
}
1899
</script>

src/views/EventShow.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div class="event-header">
44
<span class="eyebrow">@{{ event.time }} on {{ event.date }}</span>
55
<h1 class="title">{{ event.title }}</h1>
6-
<h5>Organized by {{ event.organizer }}</h5>
6+
<h5>Organized by {{ event.organizer ? event.organizer.name : '' }}</h5>
77
<h5>Category: {{ event.category }}</h5>
88
</div>
99

0 commit comments

Comments
 (0)