Pārlūkot izejas kodu

:sparkles: added getter helper | added exhibition and event to navigation | added modules for grabbing event and exhibition data

tags/0.9.0
j 5 gadus atpakaļ
vecāks
revīzija
2ac1b73516

+ 6
- 0
vue-theme/src/components/navigation/navigation.vue Parādīt failu

@@ -17,6 +17,12 @@ nav.main.f-row.center
17 17
         li
18 18
             router-link(:to="`/artists`")
19 19
                 p.t-up artists
20
+        li
21
+            router-link(:to="`/events`")
22
+                p.t-up events
23
+        li
24
+            router-link(:to="`/exhibitions`")
25
+                p.t-up exhibitions
20 26
         li
21 27
             router-link(:to="`/episodes`")
22 28
                 p.t-up episodes

+ 4
- 17
vue-theme/src/pages/index.vue Parādīt failu

@@ -31,25 +31,10 @@
31 31
 </template>
32 32
 
33 33
 <script>
34
-import { mapGetters } from 'vuex'
34
+import { postTypeGetters } from './mixin-post-types'
35 35
 
36 36
 export default {
37
-    computed: {
38
-        ...mapGetters({
39
-            somePages: 'somePages',
40
-            allPages: 'allPages',
41
-            allPagesLoaded: 'allPagesLoaded',
42
-
43
-            allPosts: 'allPosts',
44
-            allPostsLoaded: 'allPostsLoaded',
45
-            
46
-            allArtists: 'allArtists',
47
-            allArtistsLoaded: 'allArtistsLoaded',
48
-            
49
-            allEpisodes: 'allEpisodes',
50
-            allEpisodesLoaded: 'allEpisodesLoaded',
51
-        }),
52
-    },
37
+    mixins: [postTypeGetters],
53 38
     created() {
54 39
         console.log(wp)
55 40
         console.log(this.$store.state.title)
@@ -59,6 +44,8 @@ export default {
59 44
 
60 45
         this.$store.dispatch('getAllArtists')
61 46
         this.$store.dispatch('getAllEpisodes')
47
+        this.$store.dispatch('getAllEvents')
48
+        this.$store.dispatch('getAllExhibitions')
62 49
     }
63 50
 }
64 51
 </script>

+ 3
- 14
vue-theme/src/pages/list.vue Parādīt failu

@@ -25,8 +25,8 @@
25 25
 </template>
26 26
 
27 27
 <script>
28
-import { mapGetters } from 'vuex'
29 28
 import sidebar from '@/components/sidebars/sidebar'
29
+import { postTypeGetters } from './mixin-post-types'
30 30
 
31 31
 import { convertTitleCase, typeFromRoute, sortTypes } from '@/utils/helpers'
32 32
 
@@ -36,20 +36,8 @@ export default {
36 36
         sidebar: { type: Boolean },
37 37
         sortBy: { type: String }
38 38
     },
39
+    mixins: [postTypeGetters],
39 40
     computed: {
40
-        ...mapGetters({
41
-            allPages: 'allPages',
42
-            allPagesLoaded: 'allPagesLoaded',
43
-
44
-            allPosts: 'allPosts',
45
-            allPostsLoaded: 'allPostsLoaded',
46
-
47
-            allArtists: 'allArtists',
48
-            allArtistsLoaded: 'allArtistsLoaded',
49
-
50
-            allEpisodes: 'allEpisodes',
51
-            allEpisodesLoaded: 'allEpisodesLoaded',
52
-        }),
53 41
         isGrid() {
54 42
             return this.$route.query.grid === 'true'
55 43
         },
@@ -97,6 +85,7 @@ export default {
97 85
         }
98 86
     },
99 87
     created() {
88
+        console.log(this)
100 89
         this.setHeroAndGetPosts()
101 90
     }
102 91
 }

+ 26
- 0
vue-theme/src/pages/mixin-post-types.js Parādīt failu

@@ -0,0 +1,26 @@
1
+import { convertTitleCase } from '@/utils/helpers'
2
+import { mapGetters } from 'vuex'
3
+
4
+const postTypes = [
5
+    'post',
6
+    'page',
7
+    'artist',
8
+    'episode',
9
+    'event',
10
+    'exhibition'
11
+]
12
+
13
+const getterHelper = {}
14
+for(let type of postTypes) {
15
+    const capitalized = convertTitleCase(type)
16
+    getterHelper[`all${capitalized}s`] = `all${capitalized}s` 
17
+    getterHelper[`all${capitalized}sLoaded`] = `all${capitalized}sLoaded` 
18
+}
19
+
20
+const postTypeGetters = {
21
+    computed: {
22
+        ...mapGetters(getterHelper)
23
+    }
24
+}
25
+
26
+export { postTypeGetters }

+ 2
- 14
vue-theme/src/pages/single.vue Parādīt failu

@@ -33,9 +33,9 @@
33 33
 </template>
34 34
 
35 35
 <script>
36
-import { mapGetters } from 'vuex'
37 36
 import sidebar from '@/components/sidebars/sidebar'
38 37
 import gallery from '@/components/gallery/'
38
+import { postTypeGetters } from './mixin-post-types'
39 39
 
40 40
 import { convertTitleCase, typeFromRoute } from '@/utils/helpers'
41 41
 
@@ -44,6 +44,7 @@ export default {
44 44
     props: {
45 45
         sidebar: { type: Boolean }
46 46
     },
47
+    mixins: [postTypeGetters],
47 48
     data() {
48 49
         return {
49 50
             // Gallery control
@@ -52,19 +53,6 @@ export default {
52 53
         }
53 54
     },
54 55
     computed: {
55
-        ...mapGetters({
56
-            allPages: 'allPages',
57
-            allPagesLoaded: 'allPagesLoaded',
58
-
59
-            allPosts: 'allPosts',
60
-            allPostsLoaded: 'allPostsLoaded',
61
-
62
-            allArtists: 'allArtists',
63
-            allArtistsLoaded: 'allArtistsLoaded',
64
-
65
-            allEpisodes: 'allEpisodes',
66
-            allEpisodesLoaded: 'allEpisodesLoaded',
67
-        }),
68 56
         type() { // Checks for type and fixes Episodes route edge case 
69 57
             return typeFromRoute(this.$route)
70 58
         },

+ 5
- 1
vue-theme/src/store/index.js Parādīt failu

@@ -9,6 +9,8 @@ import page from './modules/page'
9 9
 import post from './modules/post'
10 10
 import artist from './modules/artist'
11 11
 import episode from './modules/episode'
12
+import event from './modules/event'
13
+import exhibition from './modules/exhibition'
12 14
 
13 15
 const debug = process.env.NODE_ENV !== 'production'
14 16
 
@@ -44,7 +46,9 @@ const store = new Vuex.Store({
44 46
       post,
45 47
       page,
46 48
       artist,
47
-      episode
49
+      episode,
50
+      event,
51
+      exhibition
48 52
   },
49 53
   strict: debug,
50 54
 })

+ 41
- 0
vue-theme/src/store/modules/event.js Parādīt failu

@@ -0,0 +1,41 @@
1
+import api from '../../utils/api'
2
+
3
+const state = {
4
+    all: {},
5
+    loaded: false,
6
+    event: null,
7
+}
8
+
9
+const getters = {
10
+    allEvents: state => state.all,
11
+    allEventsLoaded: state => state.loaded,
12
+    event: state => id => {
13
+        let field = typeof id === 'number' ? 'id' : 'slug'
14
+        let event = state.all.filter(event => event[field] === id)
15
+        return (event[0]) ? event[0] : false
16
+    },
17
+    eventContent: state => id => {
18
+        let field = typeof id === 'number' ? 'id' : 'slug'
19
+        let event = state.all.filter(event => event[field] === id)
20
+        return (event[0]) ? event[0].content.rendered : false
21
+    },
22
+}
23
+
24
+const actions = {
25
+    getAllEvents({ commit }, sortType) {
26
+        commit('CLEAR_EVENTS')
27
+        commit('EVENTS_LOADED', false)
28
+        api.getByType('events', sortType, events => {
29
+            commit('STORE_FETCHED_EVENTS', { events })
30
+            commit('EVENTS_LOADED', true)
31
+        })
32
+    }
33
+}
34
+
35
+const mutations = {
36
+    STORE_FETCHED_EVENTS(state, { events }) { state.all = events },
37
+    CLEAR_EVENTS(state) { state.all = [] },
38
+    EVENTS_LOADED(state, val) { state.loaded = val },
39
+}
40
+
41
+export default { state, getters, actions, mutations }

+ 41
- 0
vue-theme/src/store/modules/exhibition.js Parādīt failu

@@ -0,0 +1,41 @@
1
+import api from '../../utils/api'
2
+
3
+const state = {
4
+    all: {},
5
+    loaded: false,
6
+    exhibition: null,
7
+}
8
+
9
+const getters = {
10
+    allExhibitions: state => state.all,
11
+    allExhibitionsLoaded: state => state.loaded,
12
+    exhibition: state => id => {
13
+        let field = typeof id === 'number' ? 'id' : 'slug'
14
+        let exhibition = state.all.filter(exhibition => exhibition[field] === id)
15
+        return (exhibition[0]) ? exhibition[0] : false
16
+    },
17
+    exhibitionContent: state => id => {
18
+        let field = typeof id === 'number' ? 'id' : 'slug'
19
+        let exhibition = state.all.filter(exhibition => exhibition[field] === id)
20
+        return (exhibition[0]) ? exhibition[0].content.rendered : false
21
+    },
22
+}
23
+
24
+const actions = {
25
+    getAllExhibitions({ commit }, sortType) {
26
+        commit('CLEAR_EXHIBITIONS')
27
+        commit('EXHIBITIONS_LOADED', false)
28
+        api.getByType('exhibitions', sortType, exhibitions => {
29
+            commit('STORE_FETCHED_EXHIBITIONS', { exhibitions })
30
+            commit('EXHIBITIONS_LOADED', true)
31
+        })
32
+    }
33
+}
34
+
35
+const mutations = {
36
+    STORE_FETCHED_EXHIBITIONS(state, { exhibitions }) { state.all = exhibitions },
37
+    CLEAR_EXHIBITIONS(state) { state.all = [] },
38
+    EXHIBITIONS_LOADED(state, val) { state.loaded = val },
39
+}
40
+
41
+export default { state, getters, actions, mutations }

+ 1
- 0
vue-theme/src/utils/helpers.js Parādīt failu

@@ -1,4 +1,5 @@
1 1
 const convertTitleCase = (type) => {
2
+    if(typeof type !== 'string') return ''
2 3
     return type.charAt(0).toUpperCase() + type.slice(1)
3 4
 }
4 5
 

Notiek ielāde…
Atcelt
Saglabāt