147 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="chart">
 | |
|     <canvas ref="purchase-chart" width="100" height="50"></canvas>
 | |
|     <div ref="chartjsLegend" class="chartjsLegend"></div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import Chartjs from "chart.js";
 | |
| import { chartPurchaseByColor } from "@/api";
 | |
| 
 | |
| export default {
 | |
|   async mounted() {
 | |
|     let canvas = this.$refs["purchase-chart"].getContext("2d");
 | |
| 
 | |
|     let response = await chartPurchaseByColor();
 | |
|     let labels = [];
 | |
|     let blue = {
 | |
|       label: "Blå",
 | |
|       borderColor: "#57d2fb",
 | |
|       backgroundColor: "#d4f2fe",
 | |
|       borderWidth: 2,
 | |
|       data: []
 | |
|     };
 | |
|     let yellow = {
 | |
|       label: "Gul",
 | |
|       borderColor: "#ffde5d",
 | |
|       backgroundColor: "#fff6d6",
 | |
|       borderWidth: 2,
 | |
|       data: []
 | |
|     };
 | |
|     let red = {
 | |
|       label: "Rød",
 | |
|       borderColor: "#ef5878",
 | |
|       backgroundColor: "#fbd7de",
 | |
|       borderWidth: 2,
 | |
|       data: []
 | |
|     };
 | |
|     let green = {
 | |
|       label: "Grønn",
 | |
|       borderColor: "#10e783",
 | |
|       backgroundColor: "#c8f9df",
 | |
|       borderWidth: 2,
 | |
|       data: []
 | |
|     };
 | |
| 
 | |
|     if (response.length == 1) {
 | |
|       labels.push("");
 | |
|       blue.data.push(0);
 | |
|       yellow.data.push(0);
 | |
|       red.data.push(0);
 | |
|       green.data.push(0);
 | |
|     }
 | |
| 
 | |
|     let highestNumber = 0;
 | |
| 
 | |
|     for (let i = 0; i < response.length; i++) {
 | |
|       let thisDate = response[i];
 | |
|       let dateObject = new Date(thisDate.date);
 | |
|       labels.push(this.getPrettierDateString(dateObject));
 | |
| 
 | |
|       blue.data.push(thisDate.blue);
 | |
|       yellow.data.push(thisDate.yellow);
 | |
|       red.data.push(thisDate.red);
 | |
|       green.data.push(thisDate.green);
 | |
| 
 | |
|       if (thisDate.blue > highestNumber) {
 | |
|         highestNumber = thisDate.blue;
 | |
|       }
 | |
|       if (thisDate.yellow > highestNumber) {
 | |
|         highestNumber = thisDate.yellow;
 | |
|       }
 | |
|       if (thisDate.green > highestNumber) {
 | |
|         highestNumber = thisDate.green;
 | |
|       }
 | |
|       if (thisDate.red > highestNumber) {
 | |
|         highestNumber = thisDate.red;
 | |
|       }
 | |
|     }
 | |
|     let datasets = [blue, yellow, green, red];
 | |
|     let chartdata = {
 | |
|       labels: labels,
 | |
|       datasets: datasets
 | |
|     };
 | |
|     let chart = new Chart(canvas, {
 | |
|       type: "line",
 | |
|       data: chartdata,
 | |
|       options: {
 | |
|         maintainAspectRatio: false,
 | |
|         animation: {
 | |
|           duration: 0 // general animation time
 | |
|         },
 | |
|         title: {
 | |
|           display: true,
 | |
|           text: "Antall kjøpt",
 | |
|           fontSize: 20
 | |
|         },
 | |
|         legend: {
 | |
|           display: true,
 | |
|           boxWidth: 3,
 | |
|           usePointStyle: true,
 | |
|           borderRadius: 10,
 | |
|           labels: {
 | |
|             padding: 12,
 | |
|             boxWidth: 20,
 | |
|             usePointStyle: true
 | |
|           }
 | |
|         },
 | |
|         scales: {
 | |
|           yAxes: [
 | |
|             {
 | |
|               ticks: {
 | |
|                 beginAtZero: true,
 | |
|                 suggestedMax: highestNumber + 5
 | |
|               }
 | |
|             }
 | |
|           ]
 | |
|         }
 | |
|       }
 | |
|     });
 | |
|   },
 | |
|   methods: {
 | |
|     getPrettierDateString(date) {
 | |
|       return `${this.pad(date.getDate())}.${this.pad(
 | |
|         date.getMonth() + 1
 | |
|       )}.${this.pad(date.getYear() - 100)}`;
 | |
|     },
 | |
|     pad(num) {
 | |
|       if (num < 10) {
 | |
|         return `0${num}`;
 | |
|       }
 | |
|       return num;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| @import "../styles/media-queries.scss";
 | |
| 
 | |
| .chart {
 | |
|   height: 40vh;
 | |
|   max-height: 500px;
 | |
|   width: 100%;
 | |
| }
 | |
| </style>
 |