feat: profile - pages
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| <template lang='pug'> | ||||
|   v-container(fluid, fill-height, grid-list-lg) | ||||
|   v-container(fluid, grid-list-lg) | ||||
|     v-layout(row wrap) | ||||
|       v-flex(xs12) | ||||
|         .profile-header | ||||
| @@ -7,13 +7,111 @@ | ||||
|           .profile-header-title | ||||
|             .headline.primary--text.animated.fadeInLeft {{$t('profile:pages.title')}} | ||||
|             .subheading.grey--text.animated.fadeInLeft {{$t('profile:pages.subtitle')}} | ||||
|           v-spacer | ||||
|           v-btn.animated.fadeInDown.wait-p1s(color='grey', outlined, @click='refresh', large) | ||||
|             v-icon.grey--text mdi-refresh | ||||
|       v-flex(xs12) | ||||
|         v-card.animated.fadeInUp | ||||
|           v-data-table( | ||||
|             :items='pages' | ||||
|             :headers='headers' | ||||
|             :page.sync='pagination' | ||||
|             :items-per-page='15' | ||||
|             :loading='loading' | ||||
|             must-sort, | ||||
|             sort-by='updatedAt', | ||||
|             sort-desc, | ||||
|             hide-default-footer | ||||
|           ) | ||||
|             template(slot='item', slot-scope='props') | ||||
|               tr.is-clickable(:active='props.selected', @click='goToPage(props.item.id)') | ||||
|                 td | ||||
|                   .body-2: strong {{ props.item.title }} | ||||
|                   .caption {{ props.item.description }} | ||||
|                 td.admin-pages-path | ||||
|                   v-chip(label, small, :color='$vuetify.theme.dark ? `grey darken-4` : `grey lighten-4`') {{ props.item.locale }} | ||||
|                   span.ml-2.grey--text(:class='$vuetify.theme.dark ? `text--lighten-1` : `text--darken-2`') / {{ props.item.path }} | ||||
|                 td {{ props.item.createdAt | moment('calendar') }} | ||||
|                 td {{ props.item.updatedAt | moment('calendar') }} | ||||
|             template(slot='no-data') | ||||
|               v-alert.ma-3(icon='mdi-alert', :value='true', outlined, color='grey') | ||||
|                 em.caption {{$t('profile:pages.emptyList')}} | ||||
|           .text-center.py-2.animated.fadeInDown(v-if='this.pageTotal > 1') | ||||
|             v-pagination(v-model='pagination', :length='pageTotal') | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import gql from 'graphql-tag' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { } | ||||
|     return { | ||||
|       selectedPage: {}, | ||||
|       pagination: 1, | ||||
|       pages: [], | ||||
|       loading: false | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
|     headers () { | ||||
|       return [ | ||||
|         { text: this.$t('profile:pages.headerTitle'), value: 'title' }, | ||||
|         { text: this.$t('profile:pages.headerPath'), value: 'path' }, | ||||
|         { text: this.$t('profile:pages.headerCreatedAt'), value: 'createdAt', width: 250 }, | ||||
|         { text: this.$t('profile:pages.headerUpdatedAt'), value: 'updatedAt', width: 250 } | ||||
|       ] | ||||
|     }, | ||||
|     pageTotal () { | ||||
|       return Math.ceil(this.pages.length / 15) | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     async refresh() { | ||||
|       await this.$apollo.queries.pages.refetch() | ||||
|       this.$store.commit('showNotification', { | ||||
|         message: this.$t('profile:pages.refreshSuccess'), | ||||
|         style: 'success', | ||||
|         icon: 'cached' | ||||
|       }) | ||||
|     }, | ||||
|     goToPage(id) { | ||||
|       window.location.assign(`/i/` + id) | ||||
|     } | ||||
|   }, | ||||
|   apollo: { | ||||
|     pages: { | ||||
|       query: gql` | ||||
|         query($creatorId: Int, $authorId: Int) { | ||||
|           pages { | ||||
|             list(creatorId: $creatorId, authorId: $authorId) { | ||||
|               id | ||||
|               locale | ||||
|               path | ||||
|               title | ||||
|               description | ||||
|               contentType | ||||
|               isPublished | ||||
|               isPrivate | ||||
|               privateNS | ||||
|               createdAt | ||||
|               updatedAt | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       `, | ||||
|       variables () { | ||||
|         return { | ||||
|           creatorId: this.$store.get('user/id'), | ||||
|           authorId: this.$store.get('user/id') | ||||
|         } | ||||
|       }, | ||||
|       fetchPolicy: 'network-only', | ||||
|       update: (data) => data.pages.list, | ||||
|       watchLoading (isLoading) { | ||||
|         this.loading = isLoading | ||||
|         this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'profile-pages-refresh') | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user