All files / components/Admin/AdminHome/RightSide index.vue

100% Statements 6/6
100% Branches 2/2
100% Functions 1/1
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119                                              1x   1x   1x 1x 4x                                                                                                                                                       1x                          
<template>
  <div class="d-flex flex-column">
    <div class="border-bottom p-3">
      <div class="d-flex justify-content-between">
        <p class="text-uppercase">total orders</p>
        <p>Today</p>
      </div>
      <span v-if="!todayOrders.length"
        >There were no sales during this time</span
      >
      <span v-else>{{ todayOrders.length }}</span>
    </div>
    <TopProducts
      class="border-bottom p-3"
      :topTodayProducts="topTodayProducts"
    />
    <TopBundles class="border-bottom p-3" :topTodayBundles="topTodayBundles" />
    <div class="d-flex flex-column p-3">
      <p class="text-uppercase">orders amount</p>
      <OrderAmount />
    </div>
  </div>
</template>
 
<script>
import { mapGetters } from "vuex";
 
import TopProducts from "./TopProducts.vue";
import TopBundles from "./TopBundles.vue";
import OrderAmount from "./OrderAmount.vue";
 
export default {
  name: "AdminHomeRightSide",
  components: {
    TopProducts,
    TopBundles,
    OrderAmount,
  },
  data: () => ({
    topTodayProducts: [],
    topTodayBundles: [],
  }),
  computed: {
    ...mapGetters({
      todayOrders: "admin_orders/todayOrders",
    }),
  },
  watch: {
    todayOrders: function () {
      this.topToday();
    },
  },
  methods: {
    parseDate: function (date) {
      const curDate = new Date(date);
      const day = date.getDay();
      const month = curDate.toLocaleString("en-US", {
        month: "long",
      });
 
      return `${month} ${day}`;
    },
    parseSumm: function (summ) {
      return new Intl.NumberFormat("en-US", {
        maximumSignificantDigits: 3,
      }).format(summ);
    },
    topToday: function () {
      const allProducts = [];
      const allBundles = [];
 
      this.todayOrders.map((item) => {
        const { order_bundles, order_items } = item;
 
        order_items.map((item) => {
          const { product } = item;
 
          const index = allProducts.findIndex((item) => (item.id = product.id));
 
          if (index !== -1) {
            allProducts[index].count = allProducts[index].count + 1;
          } else {
            allProducts.push({ ...product, count: 1 });
          }
        });
 
        order_bundles.map((item) => {
          const { bundle } = item;
          const index = allBundles.findIndex((item) => (item.id = bundle.id));
          if (index !== -1) {
            allBundles[index].count = allBundles[index].count + 1;
          } else {
            allBundles.push({ ...bundle, count: 1 });
          }
        });
      });
 
      this.topTodayProducts = allProducts
        .sort((a, b) => a.count - b.count)
        .slice(0, 4);
      this.topTodayBundles = allBundles
        .sort((a, b) => a.count - b.count)
        .slice(0, 4);
    },
  },
};
</script>
 
<style scoped>
.border-bottom {
  border-bottom: 1px solid #000;
}
 
.paid {
  border-radius: 20px;
  background: green;
  font-size: 15px;
}
</style>