|
|
@ -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') |
|
|
|