summaryrefslogtreecommitdiffstats
path: root/webapp/src/store/global.js
blob: ea56fb56191dff0cdbe67e8e57792d7104db0dd2 (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
45
46
47
48
49
50
51
52
53
54
55
import axios from 'axios'
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),
      noAnimations: loadSetting('noAnimations', false)
    },
    loginRedirect: null,
    user: {
      id: undefined,
      name: undefined,
      username: undefined,
      email: undefined
    }
  },
  getters: {
    tabsDark: state => state.settings.dark || state.settings.coloredTabs,
    tabsColor: state => state.settings.coloredTabs ? 'primary' : '',
    tabsSliderColor: state => state.settings.coloredTabs ? 'white' : 'primary',
    user: state => state.user
  },
  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) },
    setUser: (state, value) => {
      state.user.id = value.id
      state.user.name = value.name
      state.user.username = value.username
      state.user.email = value.email
    }
  },
  actions: {
    loadUser (context) {
      axios.get('/api/users/current').then(response => {
        context.commit('setUser', response.data)
      })
    }
  }
}