|
@@ -12,7 +12,14 @@
|
|
|
v-toolbar-title
|
|
|
.subheading Theme
|
|
|
v-card-text
|
|
|
- v-select(:items='themes', prepend-icon='palette', v-model='selectedTheme', label='Site Theme', persistent-hint, hint='Themes affect how content pages are displayed. Other site sections (such as the editor or admin area) are not affected.')
|
|
|
+ v-select(
|
|
|
+ :items='themes'
|
|
|
+ prepend-icon='palette'
|
|
|
+ v-model='selectedTheme'
|
|
|
+ label='Site Theme'
|
|
|
+ persistent-hint
|
|
|
+ hint='Themes affect how content pages are displayed. Other site sections (such as the editor or admin area) are not affected.'
|
|
|
+ )
|
|
|
template(slot='item', slot-scope='data')
|
|
|
v-list-tile-avatar
|
|
|
v-icon.blue--text(dark) filter_frames
|
|
@@ -20,7 +27,13 @@
|
|
|
v-list-tile-title(v-html='data.item.text')
|
|
|
v-list-tile-sub-title(v-html='data.item.author')
|
|
|
v-divider
|
|
|
- v-switch(v-model='darkMode', label='Dark Mode', color='primary', persistent-hint, hint='Not recommended for accessibility.')
|
|
|
+ v-switch(
|
|
|
+ v-model='darkMode'
|
|
|
+ label='Dark Mode'
|
|
|
+ color='primary'
|
|
|
+ persistent-hint
|
|
|
+ hint='Not recommended for accessibility. May not be supported by all themes.'
|
|
|
+ )
|
|
|
v-card-chin
|
|
|
v-spacer
|
|
|
v-btn(color='primary', :loading='loading', @click='save')
|
|
@@ -35,20 +48,66 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import _ from 'lodash'
|
|
|
+
|
|
|
+import themeSaveMutation from 'gql/admin-theme-mutation-save.gql'
|
|
|
+
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
+ loading: false,
|
|
|
themes: [
|
|
|
{ text: 'Default', author: 'requarks.io', value: 'default' }
|
|
|
],
|
|
|
selectedTheme: 'default',
|
|
|
- darkMode: false
|
|
|
+ darkMode: false,
|
|
|
+ darkModeInitial: false
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
darkMode(newValue, oldValue) {
|
|
|
this.$store.commit('admin/setThemeDarkMode', newValue)
|
|
|
- console.info(this.$vuetify.dark)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.darkMode = this.$store.state.admin.theme.dark
|
|
|
+ this.darkModeInitial = this.darkMode
|
|
|
+ },
|
|
|
+ beforeDestroy() {
|
|
|
+ this.$store.commit('admin/setThemeDarkMode', this.darkModeInitial)
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async save () {
|
|
|
+ this.loading = true
|
|
|
+ this.$store.commit(`loadingStart`, 'admin-theme-save')
|
|
|
+ try {
|
|
|
+ const respRaw = await this.$apollo.mutate({
|
|
|
+ mutation: themeSaveMutation,
|
|
|
+ variables: {
|
|
|
+ theme: this.selectedTheme,
|
|
|
+ darkMode: this.darkMode
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const resp = _.get(respRaw, 'data.theming.setConfig.responseResult', {})
|
|
|
+ if (resp.succeeded) {
|
|
|
+ this.darkModeInitial = this.darkMode
|
|
|
+ this.$store.commit('showNotification', {
|
|
|
+ message: 'Theme settings updated successfully.',
|
|
|
+ style: 'success',
|
|
|
+ icon: 'check'
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ throw new Error(resp.message)
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ this.$store.commit('showNotification', {
|
|
|
+ message: `Error: ${err.message}`,
|
|
|
+ style: 'error',
|
|
|
+ icon: 'warning'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.$store.commit(`loadingStop`, 'admin-theme-save')
|
|
|
+ this.loading = false
|
|
|
}
|
|
|
}
|
|
|
}
|