| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 | <template lang='pug'>  v-container(fluid, grid-list-lg)    v-layout(row, wrap, v-if='page.id')      v-flex(xs12)        .admin-header          img.animated.fadeInUp(src='/_assets/svg/icon-view-details.svg', alt='Edit Page', style='width: 80px;')          .admin-header-title            .headline.blue--text.text--darken-2.animated.fadeInLeft Page Details            .subtitle-1.grey--text.animated.fadeInLeft.wait-p2s              v-chip.ml-0.mr-2(label, small).caption ID {{page.id}}              span /{{page.locale}}/{{page.path}}          v-spacer          template(v-if='page.isPublished')            status-indicator.mr-3(positive, pulse)            .caption.green--text {{$t('common:page.published')}}          template(v-else)            status-indicator.mr-3(negative, pulse)            .caption.red--text {{$t('common:page.unpublished')}}          template(v-if='page.isPrivate')            status-indicator.mr-3.ml-4(intermediary, pulse)            .caption.deep-orange--text {{$t('common:page.private')}}          template(v-else)            status-indicator.mr-3.ml-4(active, pulse)            .caption.blue--text {{$t('common:page.global')}}          v-spacer          v-btn.animated.fadeInDown.wait-p3s(color='grey', icon, outlined, to='/pages')            v-icon mdi-arrow-left          v-menu(offset-y, origin='top right')            template(v-slot:activator='{ on }')              v-btn.mx-3.animated.fadeInDown.wait-p2s(color='black', v-on='on', depressed, dark)                span Actions                v-icon(right) mdi-chevron-down            v-list(dense, nav)              v-list-item(:href='`/` + page.locale + `/` + page.path')                v-list-item-icon                  v-icon(color='indigo') mdi-text-subject                v-list-item-title View              v-list-item(:href='`/e/` + page.locale + `/` + page.path')                v-list-item-icon                  v-icon(color='indigo') mdi-pencil                v-list-item-title Edit              v-list-item(@click='', disabled)                v-list-item-icon                  v-icon(color='grey') mdi-cube-scan                v-list-item-title Re-Render              v-list-item(@click='', disabled)                v-list-item-icon                  v-icon(color='grey') mdi-earth-remove                v-list-item-title Unpublish              v-list-item(:href='`/s/` + page.locale + `/` + page.path')                v-list-item-icon                  v-icon(color='indigo') mdi-code-tags                v-list-item-title View Source              v-list-item(:href='`/h/` + page.locale + `/` + page.path')                v-list-item-icon                  v-icon(color='indigo') mdi-history                v-list-item-title View History              v-list-item(@click='', disabled)                v-list-item-icon                  v-icon(color='grey') mdi-content-duplicate                v-list-item-title Duplicate              v-list-item(@click='', disabled)                v-list-item-icon                  v-icon(color='grey') mdi-content-save-move-outline                v-list-item-title Move / Rename              v-dialog(v-model='deletePageDialog', max-width='500')                template(v-slot:activator='{ on }')                  v-list-item(v-on='on')                    v-list-item-icon                      v-icon(color='red') mdi-trash-can-outline                    v-list-item-title Delete                v-card                  .dialog-header.is-short.is-red                    v-icon.mr-2(color='white') mdi-file-document-box-remove-outline                    span {{$t('common:page.delete')}}                  v-card-text.pt-5                    i18next.body-2(path='common:page.deleteTitle', tag='div')                      span.red--text.text--darken-2(place='title') {{page.title}}                    .caption {{$t('common:page.deleteSubtitle')}}                    v-chip.mt-3.ml-0.mr-1(label, color='red lighten-4', disabled, small)                      .caption.red--text.text--darken-2 {{page.locale.toUpperCase()}}                    v-chip.mt-3.mx-0(label, color='red lighten-5', disabled, small)                      span.red--text.text--darken-2 /{{page.path}}                  v-card-chin                    v-spacer                    v-btn(text, @click='deletePageDialog = false', :disabled='loading') {{$t('common:actions.cancel')}}                    v-btn(color='red darken-2', @click='deletePage', :loading='loading').white--text {{$t('common:actions.delete')}}          v-btn.animated.fadeInDown(color='success', large, depressed, disabled)            v-icon(left) mdi-check            span Save Changes      v-flex(xs12, lg6)        v-card.animated.fadeInUp          v-toolbar(color='primary', dense, dark, flat)            v-icon.mr-2 mdi-text-subject            span Properties          v-list.py-0(two-line, dense)            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Title                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.title }}            v-divider            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Description                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.description || '-' }}            v-divider            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Locale                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.locale }}            v-divider            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Path                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.path }}            v-divider            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Editor                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.editor || '?' }}            v-divider            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Content Type                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.contentType || '?' }}            v-divider            v-list-item              v-list-item-content                v-list-item-title: .overline.grey--text Page Hash                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.hash }}      v-flex(xs12, lg6)        v-card.animated.fadeInUp.wait-p2s          v-toolbar(color='primary', dense, dark, flat)            v-icon.mr-2 mdi-account-multiple            span Users          v-list.py-0(two-line, dense)            v-list-item              v-list-item-avatar(size='24')                v-btn(icon, :to='`/users/` + page.creatorId')                  v-icon(color='grey') mdi-account              v-list-item-content                v-list-item-title: .overline.grey--text Creator                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.creatorName }} #[em.caption ({{ page.creatorEmail }})]              v-list-item-action                v-list-item-action-text {{ page.createdAt | moment('calendar') }}            v-divider            v-list-item              v-list-item-avatar(size='24')                v-btn(icon, :to='`/users/` + page.authorId')                  v-icon(color='grey') mdi-account              v-list-item-content                v-list-item-title: .overline.grey--text Last Editor                v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.authorName }} #[em.caption ({{ page.authorEmail }})]              v-list-item-action                v-list-item-action-text {{ page.updatedAt | moment('calendar') }}    v-layout(row, align-center, v-else)      v-progress-circular(indeterminate, width='2', color='grey')      .body-2.pl-3.grey--text {{ $t('common:page.loading') }}</template><script>import _ from 'lodash'import { StatusIndicator } from 'vue-status-indicator'import pageQuery from 'gql/admin/pages/pages-query-single.gql'import deletePageMutation from 'gql/common/common-pages-mutation-delete.gql'export default {  components: {    StatusIndicator  },  data() {    return {      deletePageDialog: false,      page: {},      loading: false    }  },  methods: {    async deletePage() {      this.loading = true      this.$store.commit(`loadingStart`, 'page-delete')      try {        const resp = await this.$apollo.mutate({          mutation: deletePageMutation,          variables: {            id: this.page.id          }        })        if (_.get(resp, 'data.pages.delete.responseResult.succeeded', false)) {          this.$store.commit('showNotification', {            style: 'green',            message: `Page deleted successfully.`,            icon: 'check'          })          this.$router.replace('/pages')        } else {          throw new Error(_.get(resp, 'data.pages.delete.responseResult.message', this.$t('common:error.unexpected')))        }      } catch (err) {        this.$store.commit('pushGraphError', err)      }      this.$store.commit(`loadingStop`, 'page-delete')    },    async rerenderPage() {      this.$store.commit('showNotification', {        style: 'indigo',        message: `Coming soon...`,        icon: 'directions_boat'      })    }  },  apollo: {    page: {      query: pageQuery,      variables() {        return {          id: _.toSafeInteger(this.$route.params.id)        }      },      fetchPolicy: 'network-only',      update: (data) => data.pages.single,      watchLoading (isLoading) {        this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-pages-refresh')      }    }  }}</script><style lang='scss'></style>
 |