|
@@ -9,6 +9,35 @@
|
|
|
v-icon(left) mdi-gesture-double-tap
|
|
|
span Proceed
|
|
|
v-divider.my-5
|
|
|
+ .subtitle-1.pb-3.primary--text Rerender All Pages
|
|
|
+ .body-2 All pages will be rendered again. Useful if internal links are broken or the rendering pipeline has changed.
|
|
|
+ v-btn(outlined, color='primary', @click='rerenderPages', :disabled='loading', :loading='isRerendering').ml-0.mt-3
|
|
|
+ v-icon(left) mdi-gesture-double-tap
|
|
|
+ span Proceed
|
|
|
+ v-dialog(
|
|
|
+ v-model='isRerendering'
|
|
|
+ persistent
|
|
|
+ max-width='450'
|
|
|
+ )
|
|
|
+ v-card(color='blue darken-2', dark)
|
|
|
+ v-card-text.pa-10.text-center
|
|
|
+ semipolar-spinner.animated.fadeIn(
|
|
|
+ :animation-duration='1500'
|
|
|
+ :size='65'
|
|
|
+ color='#FFF'
|
|
|
+ style='margin: 0 auto;'
|
|
|
+ )
|
|
|
+ .mt-5.body-1.white--text Rendering all pages...
|
|
|
+ .caption(v-if='renderIndex > 0') Rendering {{renderCurrentPath}}... ({{renderIndex}}/{{renderTotal}}, {{renderProgress}}%)
|
|
|
+ .caption.mt-4 Do not leave this page.
|
|
|
+ v-progress-linear.mt-5(
|
|
|
+ color='white'
|
|
|
+ :value='renderProgress'
|
|
|
+ stream
|
|
|
+ rounded
|
|
|
+ :buffer-value='0'
|
|
|
+ )
|
|
|
+ v-divider.my-5
|
|
|
.subtitle-1.pb-3.pl-0.primary--text Migrate all pages to target locale
|
|
|
.body-2 If you created content before selecting a different locale and activating the namespacing capabilities, you may want to transfer all content to the base locale.
|
|
|
.body-2.red--text: strong This operation is destructive and cannot be reversed! Make sure you have proper backups!
|
|
@@ -40,15 +69,26 @@
|
|
|
|
|
|
<script>
|
|
|
import _ from 'lodash'
|
|
|
+import gql from 'graphql-tag'
|
|
|
import utilityContentMigrateLocaleMutation from 'gql/admin/utilities/utilities-mutation-content-migratelocale.gql'
|
|
|
import utilityContentRebuildTreeMutation from 'gql/admin/utilities/utilities-mutation-content-rebuildtree.gql'
|
|
|
|
|
|
+import { SemipolarSpinner } from 'epic-spinners'
|
|
|
+
|
|
|
/* global siteLangs, siteConfig */
|
|
|
|
|
|
export default {
|
|
|
+ components: {
|
|
|
+ SemipolarSpinner
|
|
|
+ },
|
|
|
data: () => {
|
|
|
return {
|
|
|
+ isRerendering: false,
|
|
|
loading: false,
|
|
|
+ renderProgress: 0,
|
|
|
+ renderIndex: 0,
|
|
|
+ renderTotal: 0,
|
|
|
+ renderCurrentPath: '',
|
|
|
sourceLocale: '',
|
|
|
targetLocale: ''
|
|
|
}
|
|
@@ -87,6 +127,82 @@ export default {
|
|
|
this.$store.commit(`loadingStop`, 'admin-utilities-content-rebuildtree')
|
|
|
this.loading = false
|
|
|
},
|
|
|
+ async rerenderPages () {
|
|
|
+ this.loading = true
|
|
|
+ this.isRerendering = true
|
|
|
+ this.$store.commit(`loadingStart`, 'admin-utilities-content-rerender')
|
|
|
+
|
|
|
+ try {
|
|
|
+ const pagesRaw = await this.$apollo.query({
|
|
|
+ query: gql`
|
|
|
+ {
|
|
|
+ pages {
|
|
|
+ list {
|
|
|
+ id
|
|
|
+ path
|
|
|
+ locale
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ fetchPolicy: 'network-only'
|
|
|
+ })
|
|
|
+ if (_.get(pagesRaw, 'data.pages.list', []).length < 1) {
|
|
|
+ throw new Error('Could not find any page to render!')
|
|
|
+ }
|
|
|
+
|
|
|
+ this.renderIndex = 0
|
|
|
+ this.renderTotal = pagesRaw.data.pages.list.length
|
|
|
+ let failed = 0
|
|
|
+ for (const page of pagesRaw.data.pages.list) {
|
|
|
+ this.renderCurrentPath = `${page.locale}/${page.path}`
|
|
|
+ this.renderIndex++
|
|
|
+ this.renderProgress = Math.round(this.renderIndex / this.renderTotal * 100)
|
|
|
+ const respRaw = await this.$apollo.mutate({
|
|
|
+ mutation: gql`
|
|
|
+ mutation($id: Int!) {
|
|
|
+ pages {
|
|
|
+ render(id: $id) {
|
|
|
+ responseResult {
|
|
|
+ succeeded
|
|
|
+ errorCode
|
|
|
+ slug
|
|
|
+ message
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ variables: {
|
|
|
+ id: page.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const resp = _.get(respRaw, 'data.pages.render.responseResult', {})
|
|
|
+ if (!resp.succeeded) {
|
|
|
+ failed++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (failed > 0) {
|
|
|
+ this.$store.commit('showNotification', {
|
|
|
+ message: `Completed with ${failed} pages that failed to render. Check server logs for details.`,
|
|
|
+ style: 'error',
|
|
|
+ icon: 'alert'
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.$store.commit('showNotification', {
|
|
|
+ message: 'All pages have been rendered successfully.',
|
|
|
+ style: 'success',
|
|
|
+ icon: 'check'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ this.$store.commit('pushGraphError', err)
|
|
|
+ }
|
|
|
+
|
|
|
+ this.$store.commit(`loadingStop`, 'admin-utilities-content-rerender')
|
|
|
+ this.isRerendering = false
|
|
|
+ this.loading = false
|
|
|
+ },
|
|
|
async migrateToLocale () {
|
|
|
this.loading = true
|
|
|
this.$store.commit(`loadingStart`, 'admin-utilities-content-migratelocale')
|