feat: profile - pages
This commit is contained in:
		| @@ -22,7 +22,7 @@ | |||||||
|         //-     v-list-item-title {{$t('profile:comments.title')}} |         //-     v-list-item-title {{$t('profile:comments.title')}} | ||||||
|         //-     v-list-item-subtitle.caption.grey--text.text--lighten-1 Coming soon |         //-     v-list-item-subtitle.caption.grey--text.text--lighten-1 Coming soon | ||||||
|  |  | ||||||
|     v-content |     v-content(:class='darkMode ? "grey darken-4" : "grey lighten-5"') | ||||||
|       transition(name='profile-router') |       transition(name='profile-router') | ||||||
|         router-view |         router-view | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| <template lang='pug'> | <template lang='pug'> | ||||||
|   v-container(fluid, fill-height, grid-list-lg) |   v-container(fluid, grid-list-lg) | ||||||
|     v-layout(row wrap) |     v-layout(row wrap) | ||||||
|       v-flex(xs12) |       v-flex(xs12) | ||||||
|         .profile-header |         .profile-header | ||||||
| @@ -7,13 +7,111 @@ | |||||||
|           .profile-header-title |           .profile-header-title | ||||||
|             .headline.primary--text.animated.fadeInLeft {{$t('profile:pages.title')}} |             .headline.primary--text.animated.fadeInLeft {{$t('profile:pages.title')}} | ||||||
|             .subheading.grey--text.animated.fadeInLeft {{$t('profile:pages.subtitle')}} |             .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> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import gql from 'graphql-tag' | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   data() { |   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> | </script> | ||||||
|   | |||||||
| @@ -97,6 +97,18 @@ module.exports = { | |||||||
|           if (args.locale) { |           if (args.locale) { | ||||||
|             queryBuilder.where('localeCode', args.locale) |             queryBuilder.where('localeCode', args.locale) | ||||||
|           } |           } | ||||||
|  |           if (args.creatorId && args.authorId && args.creatorId > 0 && args.authorId > 0) { | ||||||
|  |             queryBuilder.where(function () { | ||||||
|  |               this.where('creatorId', args.creatorId).orWhere('authorId', args.authorId) | ||||||
|  |             }) | ||||||
|  |           } else { | ||||||
|  |             if (args.creatorId && args.creatorId > 0) { | ||||||
|  |               queryBuilder.where('creatorId', args.creatorId) | ||||||
|  |             } | ||||||
|  |             if (args.authorId && args.authorId > 0) { | ||||||
|  |               queryBuilder.where('authorId', args.authorId) | ||||||
|  |             } | ||||||
|  |           } | ||||||
|           if (args.tags && args.tags.length > 0) { |           if (args.tags && args.tags.length > 0) { | ||||||
|             queryBuilder.whereIn('tags.tag', args.tags) |             queryBuilder.whereIn('tags.tag', args.tags) | ||||||
|           } |           } | ||||||
|   | |||||||
| @@ -38,6 +38,8 @@ type PageQuery { | |||||||
|     orderByDirection: PageOrderByDirection |     orderByDirection: PageOrderByDirection | ||||||
|     tags: [String!] |     tags: [String!] | ||||||
|     locale: String |     locale: String | ||||||
|  |     creatorId: Int | ||||||
|  |     authorId: Int | ||||||
|   ): [PageListItem!]! @auth(requires: ["manage:system", "read:pages"]) |   ): [PageListItem!]! @auth(requires: ["manage:system", "read:pages"]) | ||||||
|  |  | ||||||
|   single( |   single( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user