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.5 KB · 77 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    getNumberOfProjects: state => {
13      return state.all.length;
14    },
15    getSelectProjects: state => {
16      return state.all.map(project => {
17        return {id: project.url, text: project.name};
18      });
19    },
20    getSelectProjectsForClient: state => client => {
21      return state.all.filter(project => {
22        return project.client === client;
23      }).map(project => {
24        return {id: project.url, text: project.name};
25      });
26    },
27    getSearchProjects: (state, getters, rootState, rootGetters) => search => {
28      return state.all.filter(project => {
29        return project.name.toLowerCase().includes(search) || rootGetters['clients/getClient'](project.client).name.toLowerCase().includes(search);
30      })
31    },
32    getProject: state => url => {
33      const project = state.all.find(project => {
34        return project.url === url;
35      });
36      if (typeof(project) === 'undefined') return {};
37      else return project;
38    },
39  },
40  mutations: {
41    setProjects: (state, projects) => state.all = projects,
42    addProject: (state, project) => state.all.unshift(project),
43    updateProject: (state, opts) => Vue.set(state.all, opts.index, opts.project),
44    removeProject: (state, index) => Vue.delete(state.all, index),
45  },
46  actions: {
47    fetchProjects({commit}) {
48      commit('addLoading', 'projects', {root: true});
49      fetch.get(timestrapConfig.API_URLS.PROJECTS).then(response => {
50        commit('setProjects', response.data);
51        commit('removeLoading', 'projects', {root: true});
52      }).catch(error => console.log(error));
53    },
54    createProject({commit}, project) {
55      fetch.post(timestrapConfig.API_URLS.PROJECTS, project).then(response => {
56        commit('addProject', response.data);
57      }).catch(error => console.log(error));
58    },
59    editProject({commit, state}, project) {
60      fetch.put(project.url, project).then(response => {
61        const index = state.all.findIndex(item => {
62          return item.id === response.data.id;
63        });
64        commit('updateProject', {index: index, project: response.data});
65      }).catch(error => console.log(error));
66    },
67    deleteProject({commit, state}, project) {
68      const index = state.all.findIndex(item => {
69        return item.id === project.id;
70      });
71      fetch.delete(state.all[index].url).then(() => {
72        commit('removeProject', index);
73      }).catch(error => console.log(error));
74    },
75  },
76};