Procházet zdrojové kódy

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

tags/0.9.0
j před 5 roky
rodič
revize
351119cfdd

+ 1
- 0
vue-theme/src/pages/list.vue Zobrazit soubor

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

+ 9
- 9
vue-theme/src/pages/mixin-post-types.js Zobrazit soubor

6
  * list and single components to request data
6
  * list and single components to request data
7
  */
7
  */
8
 const postTypes = [
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
 const getterHelper = {}
22
 const getterHelper = {}
23
 for(let type of postTypes) {
23
 for(let type of postTypes) {
24
     const capitalized = convertTitleCase(type)
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
 const stateHelper = {}
30
 const stateHelper = {}

+ 15
- 9
vue-theme/src/pages/single.vue Zobrazit soubor

1
 <template lang="pug">
1
 <template lang="pug">
2
 .page--single.f-row.between
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
         header
7
         header
5
             h1 {{ type }}:{{ $route.params.slug }} {{ post.title }}
8
             h1 {{ type }}:{{ $route.params.slug }} {{ post.title }}
6
             p(v-if="post.categories") categories: {{ post.categories }}
9
             p(v-if="post.categories") categories: {{ post.categories }}
49
          * We get the actual post data using the slug
52
          * We get the actual post data using the slug
50
          */
53
          */
51
         post() {
54
         post() {
55
+            if(!this[this.type]) return
56
+            
52
             const type = dePluralize(this.type)
57
             const type = dePluralize(this.type)
53
 
58
 
54
             // State not a getter!
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
         idsForGallery() {
67
         idsForGallery() {
132
          * !: posts watcher fires when this finishes
138
          * !: posts watcher fires when this finishes
133
          */
139
          */
134
         let type = convertTitleCase(this.type)
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
          * Load posts if they're not already in state
144
          * Load posts if they're not already in state
140
         if(!this[`all${type}Loaded`] && allPostsOfType.length < 1) {
146
         if(!this[`all${type}Loaded`] && allPostsOfType.length < 1) {
141
             const res = await this.$store.dispatch(`getAll${type}`)
147
             const res = await this.$store.dispatch(`getAll${type}`)
142
             allPostsOfType = res
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
 </script>
156
 </script>

+ 12
- 12
vue-theme/src/store/index.js Zobrazit soubor

5
 import * as actions from './actions'
5
 import * as actions from './actions'
6
 import * as getters from './getters'
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
 const debug = process.env.NODE_ENV !== 'production'
15
 const debug = process.env.NODE_ENV !== 'production'
16
 
16
 
43
   mutations,
43
   mutations,
44
   state,
44
   state,
45
   modules: {
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
   strict: debug,
53
   strict: debug,
54
 })
54
 })

+ 6
- 5
vue-theme/src/store/modules/artist.js Zobrazit soubor

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

+ 9
- 5
vue-theme/src/store/modules/episode.js Zobrazit soubor

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

+ 3
- 3
vue-theme/src/store/modules/event.js Zobrazit soubor

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

+ 3
- 3
vue-theme/src/store/modules/exhibition.js Zobrazit soubor

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

+ 3
- 3
vue-theme/src/store/modules/page.js Zobrazit soubor

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

+ 15
- 21
vue-theme/src/store/modules/post.js Zobrazit soubor

1
 import api from '../../utils/api'
1
 import api from '../../utils/api'
2
 
2
 
3
 const state = {
3
 const state = {
4
-    all: {},
4
+    all: [],
5
     loaded: false,
5
     loaded: false,
6
-    post: null,
6
+    singlePost: null,
7
 }
7
 }
8
 
8
 
9
 const getters = {
9
 const getters = {
10
     allPosts: state => state.all,
10
     allPosts: state => state.all,
11
     allPostsLoaded: state => state.loaded,
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
 const actions = {
14
 const actions = {
33
     getAllPosts({ commit }, sortType) {
15
     getAllPosts({ commit }, sortType) {
16
+        commit('CLEAR_POSTS')
34
         commit('POSTS_LOADED', false)
17
         commit('POSTS_LOADED', false)
35
-        api.getByType('posts', sortType, posts => {
18
+        return api.getByType('posts', sortType, posts => {
36
             commit('STORE_FETCHED_POSTS', { posts })
19
             commit('STORE_FETCHED_POSTS', { posts })
37
             commit('POSTS_LOADED', true)
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
 const mutations = {
33
 const mutations = {
34
+    STORE_FETCHED_SINGLE_POST(state, post) { state.singlePost = post },
43
     STORE_FETCHED_POSTS(state, { posts }) { state.all = posts },
35
     STORE_FETCHED_POSTS(state, { posts }) { state.all = posts },
36
+    CLEAR_POSTS(state) { state.all = [] },
37
+    CLEAR_SINGLE_POST(state) { state.post = null },
44
     POSTS_LOADED(state, val) { state.loaded = val },
38
     POSTS_LOADED(state, val) { state.loaded = val },
45
 }
39
 }
46
 
40
 

+ 5
- 5
vue-theme/src/utils/api.js Zobrazit soubor

22
             }).catch(e => { cb(e) })
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
         }).catch(e => { cb(e) })
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
             cb(response.data)
32
             cb(response.data)
33
         }).catch(e => { cb(e) })
33
         }).catch(e => { cb(e) })
34
     },
34
     },

Načítá se…
Zrušit
Uložit