chatwoot/chatwoot

View on GitHub
app/javascript/dashboard/mixins/reportMixin.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { mapGetters } from 'vuex';
import { formatTime } from '@chatwoot/utils';

export default {
  props: {
    accountSummaryKey: {
      type: String,
      default: 'getAccountSummary',
    },
  },
  computed: {
    ...mapGetters({
      accountReport: 'getAccountReports',
    }),
    accountSummary() {
      return this.$store.getters[this.accountSummaryKey];
    },
  },
  methods: {
    calculateTrend(key) {
      if (!this.accountSummary.previous[key]) return 0;
      const diff = this.accountSummary[key] - this.accountSummary.previous[key];
      return Math.round((diff / this.accountSummary.previous[key]) * 100);
    },
    displayMetric(key) {
      if (this.isAverageMetricType(key)) {
        return formatTime(this.accountSummary[key]);
      }
      return Number(this.accountSummary[key] || '').toLocaleString();
    },
    displayInfoText(key) {
      if (this.metrics[this.currentSelection].KEY !== key) {
        return '';
      }
      if (this.isAverageMetricType(key)) {
        const total = this.accountReport.data
          .map(item => item.count)
          .reduce((prev, curr) => prev + curr, 0);
        return `${this.metrics[this.currentSelection].INFO_TEXT} ${total}`;
      }
      return '';
    },
    isAverageMetricType(key) {
      return [
        'avg_first_response_time',
        'avg_resolution_time',
        'reply_time',
      ].includes(key);
    },
  },
};