Skip to content
Snippets Groups Projects
WeekChart.vue 2.61 KiB
Newer Older
CazSaa's avatar
CazSaa committed
<template>
  <div class="barchart-container">
    <apexchart width="300" type="bar" :series="series" :options="chartOptions"/>
CazSaa's avatar
CazSaa committed
  </div>
</template>

<script>
export default {
  data() {
    return {
      chartOptions: {
        chart: {
          id: 'week-averages-chart',
          toolbar: false,
          fontFamily: 'Bungee',
CazSaa's avatar
CazSaa committed
          foreColor: 'white',
          dropShadow: {
            enabled: true,
          }
        },
        plotOptions: {
          bar: {
CazSaa's avatar
CazSaa committed
        },
        colors: ['#004377'],
        xaxis: {
CazSaa's avatar
CazSaa committed
          categories: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
          axisBorder: {
            height: 3
          },
          axisTicks: {
            show: false
          }
        },
        yaxis: {
          labels: {
            formatter(value) {
              return value + ' ml'
            }
          }
CazSaa's avatar
CazSaa committed
        },
        grid: {
CazSaa's avatar
CazSaa committed
        },
        dataLabels: {
CazSaa's avatar
CazSaa committed
          style: {
            colors: ['white'],
            fontFamily: 'Bungee',
            fontSize: 15
CazSaa's avatar
CazSaa committed
          },
          dropShadow: {
            enabled: true,
          },
          formatter(value) {
            return value === 0 ? '' : value
CazSaa's avatar
CazSaa committed
          }
        },
        noData: 'Loading...'
      },
      weekData: {},
CazSaa's avatar
CazSaa committed
    }
  },
  async fetch() {
    const weekDataResponse = await this.$axios.get('/api/consumption/average-graph' +
      '?precision=week')
    this.weekData = weekDataResponse.data
    this.weekConsumption = this.weekData.moments.map(moment => moment.average)
    this.weekConsumption.push(this.weekConsumption.shift())
    const days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
    let max = 0
    for (let i = 0; i < 7; i++) {
      if ((this.weekConsumption[i]) > max) {
        max = this.weekConsumption[i]
        this.bestDay = days[i]
      }
    }
    this.$store.commit('setBestWeekDay', this.bestDay)
CazSaa's avatar
CazSaa committed
  },
  computed: {
    series() {
      if (!Object.prototype.hasOwnProperty.call(this.weekData, 'moments')) {
        return undefined
      }
      return [{
CazSaa's avatar
CazSaa committed
        name: 'average',
        data: this.weekConsumption
CazSaa's avatar
CazSaa committed
      }]
    }
  }
}
</script>

CazSaa's avatar
CazSaa committed
<style lang="scss">
#apexchartsweekxaveragesxchart {
CazSaa's avatar
CazSaa committed
  .apexcharts-xaxis-label,
  .apexcharts-yaxis-label {
    text-shadow: #555 1px 1px 5px;
  }

  .apexcharts-tooltip {
    color: #333;
  }
CazSaa's avatar
CazSaa committed

CazSaa's avatar
CazSaa committed
  .apexcharts-tooltip-text-y-value,
  .apexcharts-tooltip-text-goals-value,
  .apexcharts-tooltip-text-z-value {
    font-weight: unset;
  }
}
CazSaa's avatar
CazSaa committed
</style>