|
@@ -60,7 +60,7 @@
|
|
|
v-spacer
|
|
|
v-data-table.pb-2(
|
|
|
:items='recentPages'
|
|
|
- :headers='headers'
|
|
|
+ :headers='recentPagesHeaders'
|
|
|
:loading='recentPagesLoading'
|
|
|
hide-default-footer
|
|
|
hide-default-header
|
|
@@ -77,23 +77,20 @@
|
|
|
v-card.radius-7.animated.fadeInUp.wait-p4s
|
|
|
v-toolbar(:color='$vuetify.theme.dark ? `grey darken-2` : `grey lighten-5`', dense, flat)
|
|
|
v-spacer
|
|
|
- .overline {{$t('admin:dashboard.mostPopularPages')}}
|
|
|
+ .overline {{$t('admin:dashboard.lastLogins')}}
|
|
|
v-spacer
|
|
|
v-data-table.pb-2(
|
|
|
- :items='popularPages'
|
|
|
- :headers='headers'
|
|
|
- :loading='popularPagesLoading'
|
|
|
+ :items='lastLogins'
|
|
|
+ :headers='lastLoginsHeaders'
|
|
|
+ :loading='lastLoginsLoading'
|
|
|
hide-default-footer
|
|
|
hide-default-header
|
|
|
)
|
|
|
template(slot='item', slot-scope='props')
|
|
|
- tr.is-clickable(:active='props.selected', @click='$router.push(`/pages/` + props.item.id)')
|
|
|
+ tr.is-clickable(:active='props.selected', @click='$router.push(`/users/` + props.item.id)')
|
|
|
td
|
|
|
- .body-2: strong {{ props.item.title }}
|
|
|
- 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.text-right.caption(width='250') {{ props.item.updatedAt | moment('calendar') }}
|
|
|
+ .body-2: strong {{ props.item.name }}
|
|
|
+ td.text-right.caption(width='250') {{ props.item.lastLoginAt | moment('calendar') }}
|
|
|
|
|
|
v-flex(xs12)
|
|
|
v-card.dashboard-contribute.animated.fadeInUp.wait-p4s
|
|
@@ -112,8 +109,7 @@
|
|
|
import _ from 'lodash'
|
|
|
import AnimatedNumber from 'animated-number-vue'
|
|
|
import { get } from 'vuex-pathify'
|
|
|
-
|
|
|
-import recentPagesQuery from 'gql/admin/dashboard/dashboard-query-recentpages.gql'
|
|
|
+import gql from 'graphql-tag'
|
|
|
|
|
|
export default {
|
|
|
components: {
|
|
@@ -123,13 +119,16 @@ export default {
|
|
|
return {
|
|
|
recentPages: [],
|
|
|
recentPagesLoading: false,
|
|
|
- popularPages: [],
|
|
|
- popularPagesLoading: false,
|
|
|
- headers: [
|
|
|
- { text: 'ID', value: 'id', width: 80 },
|
|
|
+ recentPagesHeaders: [
|
|
|
{ text: 'Title', value: 'title' },
|
|
|
{ text: 'Path', value: 'path' },
|
|
|
{ text: 'Last Updated', value: 'updatedAt', width: 250 }
|
|
|
+ ],
|
|
|
+ lastLogins: [],
|
|
|
+ lastLoginsLoading: false,
|
|
|
+ lastLoginsHeaders: [
|
|
|
+ { text: 'User', value: 'displayName' },
|
|
|
+ { text: 'Last Login', value: 'lastLoginAt', width: 250 }
|
|
|
]
|
|
|
}
|
|
|
},
|
|
@@ -154,12 +153,49 @@ export default {
|
|
|
},
|
|
|
apollo: {
|
|
|
recentPages: {
|
|
|
- query: recentPagesQuery,
|
|
|
+ query: gql`
|
|
|
+ query {
|
|
|
+ pages {
|
|
|
+ list(limit: 10, orderBy: UPDATED, orderByDirection: DESC) {
|
|
|
+ id
|
|
|
+ locale
|
|
|
+ path
|
|
|
+ title
|
|
|
+ description
|
|
|
+ contentType
|
|
|
+ isPublished
|
|
|
+ isPrivate
|
|
|
+ privateNS
|
|
|
+ createdAt
|
|
|
+ updatedAt
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ `,
|
|
|
update: (data) => data.pages.list,
|
|
|
watchLoading (isLoading) {
|
|
|
this.recentPagesLoading = isLoading
|
|
|
this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-dashboard-recentpages')
|
|
|
}
|
|
|
+ },
|
|
|
+ lastLogins: {
|
|
|
+ query: gql`
|
|
|
+ query {
|
|
|
+ users {
|
|
|
+ lastLogins {
|
|
|
+ id
|
|
|
+ name
|
|
|
+ lastLoginAt
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ fetchPolicy: 'network-only',
|
|
|
+ update: (data) => data.users.lastLogins,
|
|
|
+ watchLoading (isLoading) {
|
|
|
+ this.lastLoginsLoading = isLoading
|
|
|
+ this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-dashboard-lastlogins')
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|