Pārlūkot izejas kodu

feat: breaking out sidebar comp

tags/0.9.0
J 6 gadus atpakaļ
vecāks
revīzija
6c63feecfb

+ 44
- 0
vue-theme/src/components/sidebar/sidebar.vue Parādīt failu

1
+<template lang="pug">
2
+aside.shadow.b-radius
3
+    header
4
+        h4 this is an aisde for {{ type }}
5
+    section
6
+        slot
7
+</template>
8
+
9
+<script>
10
+import { mapGetters } from 'vuex'
11
+
12
+export default {
13
+    props: {
14
+        sidebar: {
15
+            type: Boolean
16
+        },
17
+        type: {
18
+            type: String
19
+        }
20
+    },
21
+    computed: {
22
+        ...mapGetters({
23
+            allArtists: 'allArtists',
24
+            allArtistsLoaded: 'allArtistsLoaded',
25
+
26
+            allEpisodes: 'allEpisodes',
27
+            allEpisodesLoaded: 'allEpisodesLoaded',
28
+        }),
29
+        posts() {
30
+            let type = this.$route.params.type
31
+            type = type.charAt(0).toUpperCase() + type.slice(1)
32
+
33
+            // Return list keyed by slug
34
+            return Object.values(this[`all${type}`]).reduce((postsMap, post) => { 
35
+                postsMap[post.slug] = post
36
+                return postsMap
37
+            }, {})
38
+        },
39
+    },
40
+    mounted() {
41
+        // TODO: this should be conditional after checking vuex stat
42
+    }
43
+}
44
+</script>

+ 3
- 0
vue-theme/src/index.js Parādīt failu

12
 const router = new VueRouter({
12
 const router = new VueRouter({
13
     mode: 'history',
13
     mode: 'history',
14
     routes: [
14
     routes: [
15
+        // Home Page
15
         { path: '/', component: IndexPage },
16
         { path: '/', component: IndexPage },
17
+        // List Pages
16
         { path: '/episodes', component: () => import(/* webpackChunkName: "pages-list" */ './pages/list.vue'), props: { sidebar: false } },
18
         { path: '/episodes', component: () => import(/* webpackChunkName: "pages-list" */ './pages/list.vue'), props: { sidebar: false } },
17
         { path: '/:type', component: () => import(/* webpackChunkName: "pages-list" */ './pages/list.vue'), props: { sidebar: true } },
19
         { path: '/:type', component: () => import(/* webpackChunkName: "pages-list" */ './pages/list.vue'), props: { sidebar: true } },
20
+        // Single Pages
18
         { path: '/:type/:slug', component: () => import(/* webpackChunkName: "pages-single" */ './pages/single.vue'), props: { sidebar: true } },
21
         { path: '/:type/:slug', component: () => import(/* webpackChunkName: "pages-single" */ './pages/single.vue'), props: { sidebar: true } },
19
     ]
22
     ]
20
 })
23
 })

+ 0
- 1
vue-theme/src/pages/episodes.vue Parādīt failu

1
-// Episodes has a unique layout

+ 6
- 5
vue-theme/src/pages/list.vue Parādīt failu

10
         section(v-for="post in posts")
10
         section(v-for="post in posts")
11
             router-link(:to="`./${type}/${post.slug}`")
11
             router-link(:to="`./${type}/${post.slug}`")
12
                 h4 {{ post.title }}
12
                 h4 {{ post.title }}
13
-    //- COMPONENT: Make this with a prop
14
-    aside(v-if="sidebar").shadow.b-radius
15
-        header
16
-            h4 this is some other stuff
17
-
13
+    sidebar(v-if="sidebar" :type="`${type}`")
14
+        h1 slots
18
 </template>
15
 </template>
19
 
16
 
20
 <script>
17
 <script>
21
 import { mapGetters } from 'vuex'
18
 import { mapGetters } from 'vuex'
19
+import sidebar from '@/components/sidebar/sidebar'
22
 
20
 
23
 export default {
21
 export default {
24
     props: {
22
     props: {
26
             type: Boolean
24
             type: Boolean
27
         }
25
         }
28
     },
26
     },
27
+    components: {
28
+        sidebar: sidebar
29
+    },
29
     computed: {
30
     computed: {
30
         ...mapGetters({
31
         ...mapGetters({
31
             allArtists: 'allArtists',
32
             allArtists: 'allArtists',

+ 9
- 7
vue-theme/src/pages/single.vue Parādīt failu

6
         section
6
         section
7
             h4 {{ posts[$route.params.slug].title }}
7
             h4 {{ posts[$route.params.slug].title }}
8
             .block-wrapper(v-for="block in posts[$route.params.slug].blocks" v-html="block")
8
             .block-wrapper(v-for="block in posts[$route.params.slug].blocks" v-html="block")
9
-    //- COMPONENT: Make this with a prop
10
-    aside(v-if="sidebar").shadow.b-radius
11
-        header
12
-            h4 this is some other stuff
13
-
9
+    sidebar(v-if="sidebar" :type="`${type}`")
14
 </template>
10
 </template>
15
 
11
 
16
 <script>
12
 <script>
17
 import { mapGetters } from 'vuex'
13
 import { mapGetters } from 'vuex'
14
+import sidebar from '@/components/sidebar/sidebar'
18
 
15
 
19
 export default {
16
 export default {
20
     props: {
17
     props: {
22
             type: Boolean
19
             type: Boolean
23
         }
20
         }
24
     },
21
     },
22
+    components: {
23
+        sidebar: sidebar
24
+    },
25
     computed: {
25
     computed: {
26
         ...mapGetters({
26
         ...mapGetters({
27
             allArtists: 'allArtists',
27
             allArtists: 'allArtists',
30
             allEpisodes: 'allEpisodes',
30
             allEpisodes: 'allEpisodes',
31
             allEpisodesLoaded: 'allEpisodesLoaded',
31
             allEpisodesLoaded: 'allEpisodesLoaded',
32
         }),
32
         }),
33
+        type() { // Checks for type and fixes Episodes route edge case 
34
+            return this.$route.params.type ? this.$route.params.type : this.$route.fullPath.slice(1)
35
+        },
33
         posts() {
36
         posts() {
34
-            let type = this.$route.params.type
35
-            type = type.charAt(0).toUpperCase() + type.slice(1)
37
+            let type = this.type.charAt(0).toUpperCase() + this.type.slice(1)
36
 
38
 
37
             // Return list keyed by slug
39
             // Return list keyed by slug
38
             return Object.values(this[`all${type}`]).reduce((postsMap, post) => { 
40
             return Object.values(this[`all${type}`]).reduce((postsMap, post) => { 

Notiek ielāde…
Atcelt
Saglabāt