work_time-1.0.x-dev/js/components/store.js
js/components/store.js
const store = Vue.reactive({
csrfToken: '',
currentTask: '',
status: 'stop',
history: [],
state: {},
projects: [],
csrfTokenLoader() {
// Load token.
axios.get('/session/token').then((response) => {
this.csrfToken = response.data;
this.saveState('csrfToken', this.csrfToken);
}).then(() => {
// load time playing.
});
},
// Display time.
updateDisplay(time) {
time = parseInt(time);
if (!time) {
return '';
}
const s = Math.floor(time % 60);
const m = Math.floor(time / 60) % 60;
const h = Math.floor(time / 3600) % 24;
const d = Math.floor(time / 86400);
let display = s.toString().padStart(2, '0');
display = m.toString().padStart(2, '0') + ':' + display;
if (h > 0) {
display = h.toString().padStart(2, '0') + ':' + display;
}
if (d > 0) {
display = d + 'd ' + display;
}
return display;
},
sendToServer(entity) {
axios.post('/api/work-time?_format=json', entity,
{
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': this.csrfToken
}
}
).then((response) => {
}).catch(error => {
console.error("There was an error!", error);
});
},
stopAllInstances() {
for (const key in this.state) {
if (this.state[key].isPlaying) {
let state = this.state[key].isPlaying;
this.state[key].isPlaying = false;
clearInterval(this.state[key].timerId);
// Get entity and send to server.
let entity = this.state[key].$refs['button'].dataset;
entity.play = state;
this.sendToServer(entity);
break;
}
}
},
saveState(key, value) {
if (value === null) {
return localStorage.removeItem(key);
}
localStorage.setItem(key, JSON.stringify(value));
},
loadState(key, defaultValue) {
const value = localStorage.getItem(key);
if (value !== null) {
return JSON.parse(value);
}
return defaultValue;
},
loadTotalTime(ids) {
if (this.csrfToken === '') {
// Load token.
axios.get('/session/token').then((response) => {
this.csrfToken = response.data;
}).then(() => {
// load time playing.
axios.patch('/api/work-time-list/0?_format=json',
ids,
{
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': this.csrfToken
}
}
).then((response) => {
if(response.data){
for (let id in response.data) {
this.state[id].elapsedTime = parseInt(response.data[id]);
}
}
}).catch(error => {
console.error("There was an error!", error);
});
});
}
},
})
export default store;
