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

2.1 KB · 70 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    getNumberOfClients: state => {
13      return state.all.length;
14    },
15    getSelectClients: state => {
16      return state.all.map(client => {
17        return {id: client.url, text: client.name};
18      });
19    },
20    getSearchClients: state => search => {
21      return state.all.filter(client => {
22        return client.name.toLowerCase().includes(search);
23      });
24    },
25    getClient: state => url => {
26      const client = state.all.find(client => {
27        return client.url == url;
28      });
29      if (typeof(client) === 'undefined') return {};
30      else return client;
31    },
32  },
33  mutations: {
34    setClients: (state, clients) => state.all = clients,
35    addClient: (state, client) => state.all.unshift(client),
36    updateClient: (state, opts) => Vue.set(state.all, opts.index, opts.client),
37    removeClient: (state, index) => Vue.delete(state.all, index),
38  },
39  actions: {
40    fetchClients({commit}) {
41      commit('addLoading', 'clients', {root: true});
42      fetch.get(timestrapConfig.API_URLS.CLIENTS).then(response => {
43        commit('setClients', response.data);
44        commit('removeLoading', 'clients', {root: true});
45      }).catch(error => console.log(error));
46    },
47    createClient({commit}, client) {
48      fetch.post(timestrapConfig.API_URLS.CLIENTS, client).then(response => {
49        commit('addClient', response.data);
50      }).catch(error => console.log(error));
51    },
52    editClient({commit, state}, client) {
53      fetch.put(client.url, client).then(response => {
54        const index = state.all.findIndex(item => {
55          return item.id === response.data.id;
56        });
57        commit('updateClient', {index: index, client: response.data});
58      }).catch(error => console.log(error));
59    },
60    deleteClient({commit, state}, client) {
61      const index = state.all.findIndex(item => {
62        return item.id === client.id;
63      });
64      fetch.delete(state.all[index].url).then(() => {
65        commit('removeClient', index);
66      }).catch(error => console.log(error));
67    },
68  },
69};