Kaynağa Gözat

feat: sidebar loading based on prop | feat: list pages based on route name

tags/0.9.0
J 6 yıl önce
ebeveyn
işleme
b60f9822c9

+ 2
- 0
vue-theme/src/components/navigation/navigation.vue Dosyayı Görüntüle

@@ -9,6 +9,8 @@ nav.main
9 9
             p  
10 10
         li
11 11
             a(href="/") home
12
+        li
13
+            a(href="/artists") artists
12 14
         li
13 15
             a(href="/lazy") lazy
14 16
 </template>

+ 7
- 1
vue-theme/src/index.js Dosyayı Görüntüle

@@ -8,12 +8,18 @@ import App from '@/app.vue'
8 8
 import store from '@/store'
9 9
 
10 10
 import IndexPage from '@/pages/index.vue'
11
+import ListPage from '@/pages/list'
11 12
 
12 13
 const router = new VueRouter({
13 14
     mode: 'history',
14 15
     routes: [
15 16
         { path: '/', component: IndexPage },
16
-        { path: '/lazy', component:  () => import(/* webpackChunkName: "pages-lazy" */ './pages/lazy.vue') }
17
+        {
18
+            path: '/:type',
19
+            component: ListPage,
20
+            props: { sidebar: true }
21
+        },
22
+        { path: '/lazy', component:  () => import(/* webpackChunkName: "pages-lazy" */ './pages/lazy.vue') },
17 23
     ]
18 24
 })
19 25
 

+ 53
- 1
vue-theme/src/pages/list.vue Dosyayı Görüntüle

@@ -1,2 +1,54 @@
1 1
 // Artists/Exhibitions/Events/search-results
2
-// Optional sidebar
2
+// Optional sidebar
3
+<template lang="pug">
4
+.page--list.f-row.between
5
+    article.f-grow
6
+        header
7
+            h1 {{ site }}: {{ $route.params.type }} list
8
+        section
9
+            h4 {{ $route.params.type }}
10
+            p {{ Object.values(allArtists).length }}
11
+            p {{ sidebar }}
12
+    //- COMPONENT: Make this with a prop
13
+    aside(v-if="sidebar").shadow.b-radius
14
+        header
15
+            h4 this is some other stuff
16
+
17
+</template>
18
+
19
+<script>
20
+import { mapGetters } from 'vuex'
21
+
22
+export default {
23
+    props: {
24
+        sidebar: {
25
+            type: Boolean
26
+        }
27
+    },
28
+    computed: {
29
+        ...mapGetters({
30
+            allArtists: 'allArtists',
31
+            allArtistsLoaded: 'allArtistsLoaded',
32
+            allEpisodes: 'allEpisodes',
33
+            allEpisodesLoaded: 'allEpisodesLoaded',
34
+        }),
35
+    },
36
+    data() {
37
+        return {
38
+            loaded: false,
39
+            site: wp.site_name,
40
+        }
41
+    },
42
+    mounted() {
43
+        switch (this.$route.params.type) {
44
+            case 'artists':
45
+                this.$store.dispatch('getAllArtists')
46
+                break
47
+            case 'episodess':
48
+                this.$store.dispatch('getAllEpisodes')
49
+                break
50
+        }
51
+        
52
+    }
53
+}
54
+</script>

+ 76
- 1
vue-theme/src/pages/single.vue Dosyayı Görüntüle

@@ -1,2 +1,77 @@
1 1
 // Single page for single episode/artist/page/edu-guide
2
-// Optional sidebar
2
+// Optional sidebar
3
+// Homepage grid
4
+<template lang="pug">
5
+.page--index.f-row.between
6
+    article.f-grow.shadow.b-radius
7
+        header
8
+            h1 {{ site }}: index
9
+        section(v-if="allEpisodesLoaded")
10
+            h4 Episodes
11
+            p {{ Object.values(allEpisodes).length }}
12
+        section(v-if="allArtistsLoaded")
13
+            h4 artists
14
+            p {{ Object.values(allArtists).length }}
15
+        section(v-if="allPagesLoaded")
16
+            h4 pages
17
+            p {{ Object.values(allPages).length }}
18
+        section(v-if="allPostsLoaded")
19
+            h4 posts
20
+            p {{ Object.values(allPosts).length }}
21
+        section
22
+            //- COMPONENT: Looping component
23
+            .post(v-for="post in allPosts")
24
+                h4.post--title {{ post.slug }}
25
+                ul.post--content
26
+                    li.post--content--block(v-for="block in post.blocks" v-html="block")
27
+        footer.f-row
28
+            p icon
29
+
30
+    //- COMPONENT: Make this with a prop
31
+    aside.shadow.b-radius
32
+        header
33
+            h4 this is some other stuff
34
+        section(v-if="allPostsLoaded")
35
+            //- COMPONENT: See above
36
+            .post(v-for="post in allPosts")
37
+                h4.post--title {{ post.slug }}
38
+                ul.post--content
39
+                    li.post--content--block(v-for="block in post.blocks" v-html="block")
40
+
41
+</template>
42
+
43
+<script>
44
+import { mapGetters } from 'vuex'
45
+
46
+export default {
47
+    computed: {
48
+        ...mapGetters({
49
+            somePages: 'somePages',
50
+            allPages: 'allPages',
51
+            allPostsLoaded: 'allPostsLoaded',
52
+            allPosts: 'allPosts',
53
+            allPagesLoaded: 'allPagesLoaded',
54
+            allArtists: 'allArtists',
55
+            allArtistsLoaded: 'allArtistsLoaded',
56
+            allEpisodes: 'allEpisodes',
57
+            allEpisodesLoaded: 'allEpisodesLoaded',
58
+        }),
59
+    },
60
+    data() {
61
+        return {
62
+            site: wp.site_name,
63
+        }
64
+    },
65
+    mounted() {
66
+        console.log('routes: ', wp.routes)
67
+        console.log('rest url: ', wp.rest)
68
+        console.log('template: ', wp.template)
69
+
70
+        this.$store.dispatch('getAllPages')
71
+        this.$store.dispatch('getAllPosts')
72
+
73
+        this.$store.dispatch('getAllArtists')
74
+        this.$store.dispatch('getAllEpisodes')
75
+    }
76
+}
77
+</script>

Loading…
İptal
Kaydet