Skip to content

Commit 524a0fa

Browse files
committed
feat: moves theme switcher to settings page and json config
1 parent b0ad543 commit 524a0fa

9 files changed

Lines changed: 60 additions & 35 deletions

File tree

src/App.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ export default class App extends Mixins(UtilsMixin) {
6868
}
6969
7070
mounted () {
71-
this.$vuetify.theme.dark = this.$store.state.config.localConfig.darkMode
72-
71+
this.$vuetify.theme.dark = this.$store.state.config.fileConfig.general.darkMode
7372
EventBus.$on('flashMessage', (payload: FlashMessageType) => {
7473
this.flashMessage.text = (payload && payload.text) || undefined
7574
this.flashMessage.type = (payload && payload.type) || undefined

src/components/widgets/SystemCommandsWidget.vue

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,6 @@
1010
</template>
1111

1212
<v-card color="secondary">
13-
<v-list dense color="secondary">
14-
<v-list-item>
15-
<v-list-item-action>
16-
<v-switch
17-
@click.native.stop
18-
v-model="darkmode"
19-
hide-details
20-
class="mr-5 d-none d-sm-block"
21-
></v-switch>
22-
</v-list-item-action>
23-
<v-list-item-title>Enable Dark Mode</v-list-item-title>
24-
</v-list-item>
25-
</v-list>
26-
27-
<v-divider></v-divider>
28-
2913
<v-list dense color="secondary">
3014
<v-list-item>
3115
<v-btn block color="warning" :disabled="printerBusy" @click="restartKlippy" class="me-2 mb-2">Restart</v-btn>
@@ -84,15 +68,6 @@ export default class SystemCommandsWidget extends Mixins(UtilsMixin) {
8468
open: false
8569
}
8670
87-
get darkmode () {
88-
return this.$store.state.config.localConfig.darkMode
89-
}
90-
91-
set darkmode (val: boolean) {
92-
this.$vuetify.theme.dark = val
93-
this.$store.dispatch('config/saveLocalStorage', { darkMode: val })
94-
}
95-
9671
hostReboot (val: boolean) {
9772
if (val) {
9873
SocketActions.machineReboot()
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
2+
<template>
3+
<v-card color="tertiary" class="mb-4">
4+
<v-card-title class="quaternary font-weight-light"><v-icon left>{{ icons.cogs }}</v-icon> Themes</v-card-title>
5+
<v-divider></v-divider>
6+
<v-card-text>
7+
<v-select
8+
label="Theme"
9+
v-model="theme"
10+
:items="['dark', 'light']">
11+
</v-select>
12+
<!-- <v-switch
13+
@click.native.stop
14+
v-model="darkmode"
15+
hide-details
16+
class="mr-5 d-none d-sm-block"
17+
></v-switch> -->
18+
</v-card-text>
19+
</v-card>
20+
</template>
21+
22+
<script lang="ts">
23+
import { Component, Mixins } from 'vue-property-decorator'
24+
import UtilsMixin from '@/mixins/utils'
25+
26+
@Component({
27+
components: {}
28+
})
29+
export default class ThemeSettingsWidget extends Mixins(UtilsMixin) {
30+
// Theme is currently restricted to dark / light.
31+
// This starts impl thought on more options.
32+
get theme () {
33+
const darkMode = this.$store.state.config.fileConfig.general.darkMode
34+
return (darkMode)
35+
? 'dark'
36+
: 'light'
37+
}
38+
39+
set theme (val: string) {
40+
const darkMode = (val === 'dark')
41+
this.$vuetify.theme.dark = darkMode
42+
this.$store.dispatch('config/saveGeneric', { key: 'fileConfig.general.darkMode', value: darkMode })
43+
}
44+
}
45+
</script>

src/main.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ promise
6767
.then((fileConfig) => {
6868
// Init the store. This should include any GUI settings we've loaded from moonraker.
6969
return store.dispatch('init', fileConfig).then(() => {
70+
// Set vuetify to the correct initial theme.
71+
if (store.state.config && store.state.config.fileConfig.general) {
72+
vuetify.framework.theme.dark = store.state.config.fileConfig.general.darkMode
73+
}
74+
7075
// Init the socket plugin
7176
Vue.use(SocketPlugin, {
7277
url: apiConfig.socketUrl,

src/plugins/vuetify.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export default new Vuetify({
99
iconfont: 'mdiSvg'
1010
},
1111
theme: {
12-
dark: true, // default.
1312
themes: {
1413
dark: {
1514
primary: colors.blue.base,

src/store/config/actions.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const actions: ActionTree<ConfigState, RootState> = {
2626

2727
/**
2828
* Saves keys to file storage. Assumes a root[key] structure
29-
* under state.config.fileConfig
29+
* under state.config
3030
*/
3131
async saveGeneric ({ commit }, config: GenericSave) {
3232
commit('setUnsavedChanges', true)
@@ -62,10 +62,9 @@ export const actions: ActionTree<ConfigState, RootState> = {
6262
const formData = new FormData()
6363
const filename = Globals.SETTINGS_FILENAME
6464
const file = new File([JSON.stringify(state.fileConfig)], filename)
65-
// let file = new File([JSON.stringify({ webcam: state.webcam, gui: state.gui })], 'gui.json');
6665
formData.append('file', file, filename)
6766
formData.append('root', 'config')
68-
console.debug('uploading configuration...', filename, formData)
67+
console.debug('uploading configuration...', filename, state.fileConfig)
6968
Vue.$http.post(
7069
rootState.config?.apiUrl + '/server/files/upload',
7170
formData,

src/store/config/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ export const state: ConfigState = {
1515
localConfig: {
1616
cameraVisible: false,
1717
chartVisible: true,
18-
limitsVisible: false,
19-
darkMode: true
18+
limitsVisible: false
2019
},
2120
fileConfig: {
2221
general: {
2322
instanceName: Globals.APP_NAME,
23+
darkMode: true,
2424
printTimeEstimationsType: 'file',
2525
defaultExtrudeLength: 10,
2626
defaultExtrudeSpeed: 5,

src/store/config/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ export interface LocalConfig {
1313
cameraVisible: boolean;
1414
chartVisible: boolean;
1515
limitsVisible: boolean;
16-
darkMode: boolean;
1716
}
1817

1918
export interface SaveLocalConfig {
@@ -28,6 +27,7 @@ export interface FileConfig {
2827

2928
export interface GeneralConfig {
3029
instanceName: string;
30+
darkMode: boolean;
3131
defaultExtrudeLength: number;
3232
defaultExtrudeSpeed: number;
3333
defaultToolheadMoveLength: string;

src/views/Settings.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<v-col cols="12" sm="4" md="3">
1414
<klippy-disconnected-widget v-if="!klippyConnected"></klippy-disconnected-widget>
1515
<general-settings-widget></general-settings-widget>
16+
<theme-settings-widget></theme-settings-widget>
1617
<print-time-estimate-settings-widget></print-time-estimate-settings-widget>
1718
</v-col>
1819
<v-col cols="12" sm="4" md="3">
@@ -39,6 +40,7 @@ import KlippyDisconnectedWidget from '@/components/widgets/configuration/KlippyD
3940
import CameraSettingsWidget from '@/components/widgets/settings/CameraSettingsWidget.vue'
4041
import ToolheadSettingsWidget from '@/components/widgets/settings/ToolheadSettingsWidget.vue'
4142
import PrintTimeEstimateSettingsWidget from '@/components/widgets/settings/PrintTimeEstimateSettingsWidget.vue'
43+
import ThemeSettingsWidget from '@/components/widgets/settings/ThemeSettingsWidget.vue'
4244
import { MetaInfo } from 'vue-meta'
4345
import EventBus from '@/eventBus'
4446
@@ -50,7 +52,8 @@ import EventBus from '@/eventBus'
5052
KlippyDisconnectedWidget,
5153
CameraSettingsWidget,
5254
ToolheadSettingsWidget,
53-
PrintTimeEstimateSettingsWidget
55+
PrintTimeEstimateSettingsWidget,
56+
ThemeSettingsWidget
5457
},
5558
metaInfo (this: Settings): MetaInfo {
5659
return {

0 commit comments

Comments
 (0)