summaryrefslogtreecommitdiffstats
path: root/webapp/src/store/global.js
blob: a636cd6cb55ca585861f7ce2872aac0708cda20c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function loadSetting(name, defaultValue) {
  const value = localStorage.getItem('settings.' + name)
  switch (typeof defaultValue) {
    case 'boolean':
      return value === 'true' ? true : (value === 'false' ? false : defaultValue)
    case 'number':
      return value === null || isNaN(value) ? defaultValue : Number(value)
    default:
      return value === null ? defaultValue : value
  }
}

export default {
  state: {
    settings: {
      locale: loadSetting('locale', 'en'),
      dark: loadSetting('dark', true),
      coloredTabs: loadSetting('coloredTabs', false),
      clipped: loadSetting('clipped', true),
      mini: loadSetting('mini', true),
    },
    snackbars: []
  },
  getters: {
    tabsDark: state => state.settings.dark || state.settings.coloredTabs,
    tabsColor: state => state.settings.coloredTabs ? 'primary' : '',
    tabsSliderColor: state => state.settings.coloredTabs ? 'white' : 'primary',
    nextSnackbar (state) {
      if (state.snackbars) return state.snackbars[0]
      else return ''
    }
  },
  mutations: {
    saveSetting (state, { name, value }) { if (name in state.settings) state.settings[name] = value; localStorage.setItem('settings.' + name, value) },
    shiftSnackbars (state) {
      state.snackbars.shift()
    },
    newSnackbar (state, text) {
      state.snackbars.push(text)
    }
  }
}