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.0 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    getNumberOfTasks: state => {
13      return state.all.length;
14    },
15    getSelectTasks: state => {
16      return state.all.map(task => {
17        return {id: task.url, text: task.name};
18      });
19    },
20    getSearchTasks: state => search => {
21      return state.all.filter(task => {
22        return task.name.toLowerCase().includes(search);
23      });
24    },
25    getTask: state => url => {
26      const task = state.all.find(task => {
27        return task.url == url;
28      });
29      if (typeof(task) === 'undefined') return {};
30      else return task;
31    },
32  },
33  mutations: {
34    setTasks: (state, tasks) => state.all = tasks,
35    addTask: (state, task) => state.all.unshift(task),
36    updateTask: (state, opts) => Vue.set(state.all, opts.index, opts.task),
37    removeTask: (state, index) => Vue.delete(state.all, index),
38  },
39  actions: {
40    fetchTasks({commit}) {
41      commit('addLoading', 'tasks', {root: true});
42      fetch.get(timestrapConfig.API_URLS.TASKS).then(response => {
43        commit('setTasks', response.data);
44        commit('removeLoading', 'tasks', {root: true});
45      }).catch(error => console.log(error));
46    },
47    createTask({commit}, task) {
48      fetch.post(timestrapConfig.API_URLS.TASKS, task).then(response => {
49        commit('addTask', response.data);
50      }).catch(error => console.log(error));
51    },
52    editTask({commit, state}, task) {
53      fetch.put(task.url, task).then(response => {
54        const index = state.all.findIndex(item => {
55          return item.id === response.data.id;
56        });
57        commit('updateTask', {index: index, task: response.data});
58      }).catch(error => console.log(error));
59    },
60    deleteTask({commit, state}, task) {
61      const index = state.all.findIndex(item => {
62        return item.id === task.id;
63      });
64      fetch.delete(state.all[index].url).then(() => {
65        commit('removeTask', index);
66      }).catch(error => console.log(error));
67    },
68  },
69};