summaryrefslogtreecommitdiffstats
path: root/webapp/src/store/global.js
blob: bf31ce9b78c1cb65d7369db7b8773e5227ade2fa (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
43
44
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: [],
    loginRedirect: null
  },
  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: {
    setLoginRedirect: (state, value) => { state.loginRedirect = value },
    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)
    }
  }
}