repos
/ timestrap-django master

timestrap-django

mirror archived upstream

Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.

djangodockerhandcodedpythonself-hostedtime-trackingtimetracker

1.8 KB · 62 lines · JavaScript Raw History
 1import Vue from 'vue';
 2
 3import fetch from '../../fetch';
 4
 5
 6export default {
 7  namespaced: true,
 8  state: {
 9    all: [],
10  },
11  getters: {
12    getSelectUsers: state => {
13      return state.all.map(user => {
14        return {id: user.url, text: user.username};
15      });
16    },
17    getUser: state => url => {
18      const user = state.all.find(user => {
19        return user.url == url;
20      });
21      if (typeof(user) === 'undefined') return {};
22      else return user;
23    },
24  },
25  mutations: {
26    setUsers: (state, users) => state.all = users,
27    addUser: (state, user) => state.all.unshift(user),
28    updateUser: (state, opts) => Vue.set(state.all, opts.index, opts.user),
29    removeUser: (state, index) => Vue.delete(state.all, index),
30  },
31  actions: {
32    fetchUsers({commit}) {
33      commit('addLoading', 'users', {root: true});
34      fetch.get(timestrapConfig.API_URLS.USERS).then(response => {
35        commit('setUsers', response.data);
36        commit('removeLoading', 'users', {root: true});
37      }).catch(error => console.log(error));
38    },
39    createUser({commit}, user) {
40      fetch.post(timestrapConfig.API_URLS.USERS, user).then(response => {
41        commit('addUser', response.data);
42      }).catch(error => console.log(error));
43    },
44    editUser({commit, state}, user) {
45      fetch.put(user.url, user).then(response => {
46        const index = state.all.findIndex(item => {
47          return item.id === response.data.id;
48        });
49        commit('updateUser', {index: index, user: response.data});
50      }).catch(error => console.log(error));
51    },
52    deleteUser({commit, state}, user) {
53      const index = state.all.findIndex(item => {
54        return item.id === user.id;
55      });
56      fetch.delete(state.all[index].url).then(() => {
57        commit('removeUser', index);
58      }).catch(error => console.log(error));
59    },
60  },
61};