瀏覽代碼

:recycle: renaming of single post data in modules because of name collisions

tags/0.9.0
j 5 年之前
父節點
當前提交
351119cfdd

+ 1
- 0
vue-theme/src/pages/list.vue 查看文件

@@ -88,6 +88,7 @@ export default {
88 88
     created() {
89 89
         let type = convertTitleCase(this.type)
90 90
         console.log('already loaded ?:', this[`all${type}Loaded`])
91
+        console.log(this)
91 92
         if(!this[`all${type}Loaded`]) this.setHeroAndGetPosts()
92 93
     }
93 94
 }

+ 9
- 9
vue-theme/src/pages/mixin-post-types.js 查看文件

@@ -6,12 +6,12 @@ import { mapGetters, mapState } from 'vuex'
6 6
  * list and single components to request data
7 7
  */
8 8
 const postTypes = [
9
-    'post',
10
-    'page',
11
-    'artist',
12
-    'episode',
13
-    'event',
14
-    'exhibition'
9
+    'posts',
10
+    'pages',
11
+    'artists',
12
+    'episodes',
13
+    'events',
14
+    'exhibitions'
15 15
 ]
16 16
 
17 17
 /**
@@ -22,9 +22,9 @@ const postTypes = [
22 22
 const getterHelper = {}
23 23
 for(let type of postTypes) {
24 24
     const capitalized = convertTitleCase(type)
25
-    getterHelper[`all${capitalized}sBySlug`] = `all${capitalized}sBySlug`
26
-    getterHelper[`all${capitalized}s`] = `all${capitalized}s`
27
-    getterHelper[`all${capitalized}sLoaded`] = `all${capitalized}sLoaded`
25
+    getterHelper[`all${capitalized}BySlug`] = `all${capitalized}BySlug`
26
+    getterHelper[`all${capitalized}`] = `all${capitalized}`
27
+    getterHelper[`all${capitalized}Loaded`] = `all${capitalized}Loaded`
28 28
 }
29 29
 
30 30
 const stateHelper = {}

+ 15
- 9
vue-theme/src/pages/single.vue 查看文件

@@ -1,6 +1,9 @@
1 1
 <template lang="pug">
2 2
 .page--single.f-row.between
3
-    article(v-if="post").f-grow.shadow
3
+    article(v-if="!post")
4
+        header
5
+            p loading...
6
+    article(v-else).f-grow.shadow
4 7
         header
5 8
             h1 {{ type }}:{{ $route.params.slug }} {{ post.title }}
6 9
             p(v-if="post.categories") categories: {{ post.categories }}
@@ -49,13 +52,16 @@ export default {
49 52
          * We get the actual post data using the slug
50 53
          */
51 54
         post() {
55
+            if(!this[this.type]) return
56
+            
52 57
             const type = dePluralize(this.type)
53 58
 
54 59
             // State not a getter!
55
-            const typeState = this[type]
56
-            if(!typeState[type]) return
60
+            const singleOfTypeFromState = this[this.type][`single${convertTitleCase(type)}`]
61
+            
62
+            if(!singleOfTypeFromState) return
57 63
 
58
-            return Object.values(typeState[type])[0]
64
+            return singleOfTypeFromState
59 65
         },
60 66
 
61 67
         idsForGallery() {
@@ -132,7 +138,7 @@ export default {
132 138
          * !: posts watcher fires when this finishes
133 139
          */
134 140
         let type = convertTitleCase(this.type)
135
-        let allPostsOfType = this.$store.state[dePluralize(this.type)].all
141
+        let allPostsOfType = this.$store.state[this.type].all
136 142
         
137 143
         /**
138 144
          * Load posts if they're not already in state
@@ -140,11 +146,11 @@ export default {
140 146
         if(!this[`all${type}Loaded`] && allPostsOfType.length < 1) {
141 147
             const res = await this.$store.dispatch(`getAll${type}`)
142 148
             allPostsOfType = res
149
+            console.log(`reloaded ${type}...`)
143 150
         }
144
-
145
-        const single = Object.values(allPostsOfType).filter(post => post.slug == this.$route.params.slug)[0]
146
-        console.log(this.$route.params.slug)
147
-        this.$store.dispatch(`getSingle${dePluralize(type)}`, single.id)
151
+        const singlePostData = Object.values(allPostsOfType).filter(post => post.slug == this.$route.params.slug)[0]
152
+ 
153
+        await this.$store.dispatch(`getSingle${dePluralize(type)}`, singlePostData.id)
148 154
     }
149 155
 }
150 156
 </script>

+ 12
- 12
vue-theme/src/store/index.js 查看文件

@@ -5,12 +5,12 @@ import Vuex from 'vuex'
5 5
 import * as actions from './actions'
6 6
 import * as getters from './getters'
7 7
 
8
-import page from './modules/page'
9
-import post from './modules/post'
10
-import artist from './modules/artist'
11
-import episode from './modules/episode'
12
-import event from './modules/event'
13
-import exhibition from './modules/exhibition'
8
+import pages from './modules/page'
9
+import posts from './modules/post'
10
+import artists from './modules/artist'
11
+import episodes from './modules/episode'
12
+import events from './modules/event'
13
+import exhibitions from './modules/exhibition'
14 14
 
15 15
 const debug = process.env.NODE_ENV !== 'production'
16 16
 
@@ -43,12 +43,12 @@ const store = new Vuex.Store({
43 43
   mutations,
44 44
   state,
45 45
   modules: {
46
-      post,
47
-      page,
48
-      artist,
49
-      episode,
50
-      event,
51
-      exhibition
46
+      posts,
47
+      pages,
48
+      artists,
49
+      episodes,
50
+      events,
51
+      exhibitions
52 52
   },
53 53
   strict: debug,
54 54
 })

+ 6
- 5
vue-theme/src/store/modules/artist.js 查看文件

@@ -3,7 +3,7 @@ import api from '../../utils/api'
3 3
 const state = {
4 4
     all: [],
5 5
     loaded: false,
6
-    artist: null,
6
+    singleArtist: null,
7 7
 }
8 8
 
9 9
 const getters = {
@@ -24,10 +24,11 @@ const actions = {
24 24
             commit('ARTISTS_LOADED', true)
25 25
         })
26 26
     },
27
-    getSingleArtist({ commit }, slug) {
27
+    getSingleArtist({ commit }, id) {
28
+        console.log('getting single Artist...')
28 29
         commit('CLEAR_SINGLE_ARTIST')
29 30
         commit('ARTISTS_LOADED', false)
30
-        api.getSingleType('artists', slug,  artist => {
31
+        api.getSingleType('artists', id,  artist => {
31 32
             commit('STORE_FETCHED_SINGLE_ARTIST', artist)
32 33
             commit('ARTISTS_LOADED', true)
33 34
         })
@@ -36,9 +37,9 @@ const actions = {
36 37
 
37 38
 const mutations = {
38 39
     STORE_FETCHED_ARTISTS(state, { artists }) { state.all = artists },
39
-    STORE_FETCHED_SINGLE_ARTIST(state, artist) { state.artist = artist },
40
+    STORE_FETCHED_SINGLE_ARTIST(state, artist) { state.singleArtist = artist },
40 41
     CLEAR_ARTISTS(state) { state.all = [] },
41
-    CLEAR_SINGLE_ARTIST(state) { state.artist = null },
42
+    CLEAR_SINGLE_ARTIST(state) { state.singleArtist = null },
42 43
     ARTISTS_LOADED(state, val) { state.loaded = val },
43 44
 }
44 45
 

+ 9
- 5
vue-theme/src/store/modules/episode.js 查看文件

@@ -1,13 +1,17 @@
1 1
 import api from '../../utils/api'
2 2
 
3 3
 const state = {
4
-    all: {},
4
+    all: [],
5 5
     loaded: false,
6
-    episode: null,
6
+    singleEpisode: null,
7 7
 }
8 8
 
9 9
 const getters = {
10 10
     allEpisodes: state => state.all,
11
+    allEpisodesBySlug: state => Object.values(state.all).reduce((bySlug, episode) => {
12
+        bySlug[episode.slug] = episode
13
+        return bySlug
14
+    }, {}),
11 15
     allEpisodesLoaded: state => state.loaded,
12 16
 }
13 17
 
@@ -20,10 +24,10 @@ const actions = {
20 24
             commit('EPISODES_LOADED', true)
21 25
         })
22 26
     },
23
-    getSingleEpisode({ commit }, slug) {
27
+    getSingleEpisode({ commit }, id) {
24 28
         commit('CLEAR_SINGLE_EPISODE')
25 29
         commit('EPISODES_LOADED', false)
26
-        api.getSingleType('episodes', slug,  episode => {
30
+        api.getSingleType('episodes', id,  episode => {
27 31
             commit('STORE_FETCHED_SINGLE_EPISODE', episode)
28 32
             commit('EPISODES_LOADED', true)
29 33
         })
@@ -32,7 +36,7 @@ const actions = {
32 36
 
33 37
 const mutations = {
34 38
     STORE_FETCHED_EPISODES(state, { episodes }) { state.all = episodes },
35
-    STORE_FETCHED_SINGLE_EPISODE(state, episode) { state.episode = episode },
39
+    STORE_FETCHED_SINGLE_EPISODE(state, episode) { state.singleEpisode = episode },
36 40
     CLEAR_EPISODES(state) { state.all = [] },
37 41
     CLEAR_SINGLE_EPISODE(state) { state.episode = null },
38 42
     EPISODES_LOADED(state, val) { state.loaded = val },

+ 3
- 3
vue-theme/src/store/modules/event.js 查看文件

@@ -1,9 +1,9 @@
1 1
 import api from '../../utils/api'
2 2
 
3 3
 const state = {
4
-    all: {},
4
+    all: [],
5 5
     loaded: false,
6
-    event: null,
6
+    singleEvent: null,
7 7
 }
8 8
 
9 9
 const getters = {
@@ -25,7 +25,7 @@ const actions = {
25 25
     getAllEvents({ commit }, sortType) {
26 26
         commit('CLEAR_EVENTS')
27 27
         commit('EVENTS_LOADED', false)
28
-        api.getByType('events', sortType, events => {
28
+        return api.getByType('events', sortType, events => {
29 29
             commit('STORE_FETCHED_EVENTS', { events })
30 30
             commit('EVENTS_LOADED', true)
31 31
         })

+ 3
- 3
vue-theme/src/store/modules/exhibition.js 查看文件

@@ -1,9 +1,9 @@
1 1
 import api from '../../utils/api'
2 2
 
3 3
 const state = {
4
-    all: {},
4
+    all: [],
5 5
     loaded: false,
6
-    exhibition: null,
6
+    singleExhibition: null,
7 7
 }
8 8
 
9 9
 const getters = {
@@ -25,7 +25,7 @@ const actions = {
25 25
     getAllExhibitions({ commit }, sortType) {
26 26
         commit('CLEAR_EXHIBITIONS')
27 27
         commit('EXHIBITIONS_LOADED', false)
28
-        api.getByType('exhibitions', sortType, exhibitions => {
28
+        return api.getByType('exhibitions', sortType, exhibitions => {
29 29
             commit('STORE_FETCHED_EXHIBITIONS', { exhibitions })
30 30
             commit('EXHIBITIONS_LOADED', true)
31 31
         })

+ 3
- 3
vue-theme/src/store/modules/page.js 查看文件

@@ -2,9 +2,9 @@ import api from '../../utils/api'
2 2
 
3 3
 // initial state
4 4
 const state = {
5
-    all: {},
5
+    all: [],
6 6
     loaded: false,
7
-    page: null,
7
+    singlePage: null,
8 8
 }
9 9
 
10 10
 // getters
@@ -35,7 +35,7 @@ const getters = {
35 35
 const actions = {
36 36
     getAllPages({ commit }, sortType) {
37 37
         commit('PAGES_LOADED', false)
38
-        api.getByType('pages', sortType, pages => {
38
+        return api.getByType('pages', sortType, pages => {
39 39
             commit('STORE_FETCHED_PAGES', { pages })
40 40
             commit('PAGES_LOADED', true)
41 41
         })

+ 15
- 21
vue-theme/src/store/modules/post.js 查看文件

@@ -1,46 +1,40 @@
1 1
 import api from '../../utils/api'
2 2
 
3 3
 const state = {
4
-    all: {},
4
+    all: [],
5 5
     loaded: false,
6
-    post: null,
6
+    singlePost: null,
7 7
 }
8 8
 
9 9
 const getters = {
10 10
     allPosts: state => state.all,
11 11
     allPostsLoaded: state => state.loaded,
12
-    post: state => id => {
13
-        let field = typeof id === 'number' ? 'id' : 'slug'
14
-        let post = state.all.filter(post => post[field] === id)
15
-        return (post[0]) ? post[0] : false
16
-    },
17
-    postContent: state => id => {
18
-        let field = typeof id === 'number' ? 'id' : 'slug'
19
-        let post = state.all.filter(post => post[field] === id)
20
-        
21
-        return (post[0]) ? post[0].content.rendered : false
22
-    },
23
-    somePosts: state => limit => {
24
-        if(state.all.length < 1) return false
25
-        
26
-        let all = [...state.all]
27
-        
28
-        return all.splice(0, Math.min(limit, state.all.length))
29
-    },
30 12
 }
31 13
 
32 14
 const actions = {
33 15
     getAllPosts({ commit }, sortType) {
16
+        commit('CLEAR_POSTS')
34 17
         commit('POSTS_LOADED', false)
35
-        api.getByType('posts', sortType, posts => {
18
+        return api.getByType('posts', sortType, posts => {
36 19
             commit('STORE_FETCHED_POSTS', { posts })
37 20
             commit('POSTS_LOADED', true)
38 21
         })
22
+    },
23
+    getSinglePost({ commit }, id) {
24
+        commit('CLEAR_SINGLE_POST')
25
+        commit('POSTS_LOADED', false)
26
+        api.getSingleType('posts', id,  post => {
27
+            commit('STORE_FETCHED_SINGLE_POST', post)
28
+            commit('POSTS_LOADED', true)
29
+        })
39 30
     }
40 31
 }
41 32
 
42 33
 const mutations = {
34
+    STORE_FETCHED_SINGLE_POST(state, post) { state.singlePost = post },
43 35
     STORE_FETCHED_POSTS(state, { posts }) { state.all = posts },
36
+    CLEAR_POSTS(state) { state.all = [] },
37
+    CLEAR_SINGLE_POST(state) { state.post = null },
44 38
     POSTS_LOADED(state, val) { state.loaded = val },
45 39
 }
46 40
 

+ 5
- 5
vue-theme/src/utils/api.js 查看文件

@@ -22,13 +22,13 @@ export default {
22 22
             }).catch(e => { cb(e) })
23 23
         }
24 24
     },
25
-    getSingleType(type, id, cb) {
26
-        axios.get(SETTINGS.API_BASE_PATH + `${type}/${id}`).then(response => {
27
-            cb(response.data)
25
+    async getSingleType(type, id, cb) {
26
+        await axios.get(SETTINGS.API_BASE_PATH + `${type}/${id}`).then(response => {
27
+            cb(Object.values(response.data)[0])
28 28
         }).catch(e => { cb(e) })
29 29
     },
30
-    getSingleMedia(id, cb) {
31
-        axios.get(SETTINGS.API_MEDIA_PATH + `${id}`).then(response => {
30
+    async getSingleMedia(id, cb) {
31
+        await axios.get(SETTINGS.API_MEDIA_PATH + `${id}`).then(response => {
32 32
             cb(response.data)
33 33
         }).catch(e => { cb(e) })
34 34
     },

Loading…
取消
儲存