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;

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc