Api call from component itself and refactoring.
This commit is contained in:
		| @@ -1,37 +1,30 @@ | |||||||
| <template> | <template> | ||||||
|   <section class="outer-bought"> |   <div> | ||||||
|     <h3>Loddstatistikk</h3> |     <h3>Loddstatistikk</h3> | ||||||
|  |  | ||||||
|     <div class="total-raffles"> |     <div class="total-raffles"> | ||||||
|         Totalt  |       Totalt  | ||||||
|         <span class="total">{{ total }}</span> |       <span class="total">{{ total }}</span> | ||||||
|          kjøpte,  |        kjøpte,  | ||||||
|         <span>{{ totalWin }} vinn og </span> |       <span>{{ totalWin }} vinn og </span> | ||||||
|         <span> {{ stolen }} stjålet </span> |       <span> {{ stolen }} stjålet </span> | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|  |  | ||||||
|     <div class="bought-container"> |     <div class="bought-container"> | ||||||
|       <div |       <div | ||||||
|         v-for="color in colors" |         v-for="color in colors" | ||||||
|         :class=" |         :class="color.name + '-container ' + color.name + '-raffle raffle-element-local'" | ||||||
|           color.name + |  | ||||||
|             '-container ' + |  | ||||||
|             color.name + |  | ||||||
|             '-raffle raffle-element-local' |  | ||||||
|         " |  | ||||||
|         :key="color.name" |         :key="color.name" | ||||||
|         > |       > | ||||||
|         <p class="winner-chance"> |         <p class="winner-chance">{{ translate(color.name) }} vinnersjanse</p> | ||||||
|           {{translate(color.name)}} vinnersjanse |  | ||||||
|         </p> |  | ||||||
|         <span class="win-percentage">{{ color.totalPercentage }}% </span> |         <span class="win-percentage">{{ color.totalPercentage }}% </span> | ||||||
|         <p class="total-bought-color">{{ color.total }} kjøpte</p> |         <p class="total-bought-color">{{ color.total }} kjøpte</p> | ||||||
|         <p class="amount-of-wins"> {{ color.win }} vinn </p> |         <p class="amount-of-wins">{{ color.win }} vinn</p> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </section> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import { colorStatistics } from "@/api"; | import { colorStatistics } from "@/api"; | ||||||
|  |  | ||||||
| @@ -45,109 +38,128 @@ export default { | |||||||
|       green: 0, |       green: 0, | ||||||
|       total: 0, |       total: 0, | ||||||
|       totalWin: 0, |       totalWin: 0, | ||||||
|       stolen: 0, |       stolen: 0 | ||||||
|       wins: 0, |  | ||||||
|       redPercentage: 0, |  | ||||||
|       yellowPercentage: 0, |  | ||||||
|       greenPercentage: 0, |  | ||||||
|       bluePercentage: 0 |  | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   async mounted() { |   async mounted() { | ||||||
|     let response = await colorStatistics(); |     this.allLotteries().then(this.computeColors); | ||||||
|  |  | ||||||
|     this.red = response.red; |  | ||||||
|     this.blue = response.blue; |  | ||||||
|     this.green = response.green; |  | ||||||
|     this.yellow = response.yellow; |  | ||||||
|     this.total = response.total; |  | ||||||
|  |  | ||||||
|     this.totalWin = |  | ||||||
|       this.red.win + this.yellow.win + this.blue.win + this.green.win; |  | ||||||
|     this.stolen = response.stolen; |  | ||||||
|  |  | ||||||
|     this.redPercentage = this.round( |  | ||||||
|       this.red.win == 0 ? 0 : (this.red.win / this.totalWin) * 100 |  | ||||||
|     ); |  | ||||||
|     this.greenPercentage = this.round( |  | ||||||
|       this.green.win == 0 ? 0 : (this.green.win / this.totalWin) * 100 |  | ||||||
|     ); |  | ||||||
|     this.bluePercentage = this.round( |  | ||||||
|       this.blue.win == 0 ? 0 : (this.blue.win / this.totalWin) * 100 |  | ||||||
|     ); |  | ||||||
|     this.yellowPercentage = this.round( |  | ||||||
|       this.yellow.win == 0 ? 0 : (this.yellow.win / this.totalWin) * 100 |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     this.colors.push({ |  | ||||||
|       name: "red", |  | ||||||
|       total: this.red.total, |  | ||||||
|       win: this.red.win, |  | ||||||
|       totalPercentage: this.getPercentage(this.red.win, this.totalWin), |  | ||||||
|       percentage: this.getPercentage(this.red.win, this.red.total) |  | ||||||
|     }); |  | ||||||
|     this.colors.push({ |  | ||||||
|       name: "blue", |  | ||||||
|       total: this.blue.total, |  | ||||||
|       win: this.blue.win, |  | ||||||
|       totalPercentage: this.getPercentage(this.blue.win, this.totalWin), |  | ||||||
|       percentage: this.getPercentage(this.blue.win, this.blue.total) |  | ||||||
|     }); |  | ||||||
|     this.colors.push({ |  | ||||||
|       name: "yellow", |  | ||||||
|       total: this.yellow.total, |  | ||||||
|       win: this.yellow.win, |  | ||||||
|       totalPercentage: this.getPercentage(this.yellow.win, this.totalWin), |  | ||||||
|       percentage: this.getPercentage(this.yellow.win, this.yellow.total) |  | ||||||
|     }); |  | ||||||
|     this.colors.push({ |  | ||||||
|       name: "green", |  | ||||||
|       total: this.green.total, |  | ||||||
|       win: this.green.win, |  | ||||||
|       totalPercentage: this.getPercentage(this.green.win, this.totalWin), |  | ||||||
|       percentage: this.getPercentage(this.green.win, this.green.total) |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     this.colors = this.colors.sort((a, b) => (a.win > b.win ? -1 : 1)); |  | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     translate(color){ |     allLotteries() { | ||||||
|       switch(color) { |       return fetch("/api/lotteries?includeWinners=true") | ||||||
|  |         .then(resp => resp.json()) | ||||||
|  |         .then(response => response.lotteries); | ||||||
|  |     }, | ||||||
|  |     translate(color) { | ||||||
|  |       switch (color) { | ||||||
|         case "blue": |         case "blue": | ||||||
|           return "Blå" |           return "Blå"; | ||||||
|           break; |           break; | ||||||
|         case "red": |         case "red": | ||||||
|           return "Rød" |           return "Rød"; | ||||||
|           break; |           break; | ||||||
|         case "green": |         case "green": | ||||||
|           return "Grønn" |           return "Grønn"; | ||||||
|           break; |           break; | ||||||
|         case "yellow": |         case "yellow": | ||||||
|           return "Gul" |           return "Gul"; | ||||||
|  |           break; | ||||||
|           break; |           break; | ||||||
|         break; |  | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     getPercentage: function(win, total) { |     getPercentage: function(win, total) { | ||||||
|       return this.round(win == 0 ? 0 : (win / total) * 100); |       return this.round(win == 0 ? 0 : (win / total) * 100); | ||||||
|     }, |     }, | ||||||
|     round: function(number) { |     round: function(number) { | ||||||
|  |  | ||||||
|       //this can make the odds added together more than 100%, maybe rework? |       //this can make the odds added together more than 100%, maybe rework? | ||||||
|       let actualPercentage = Math.round(number * 100) / 100; |       let actualPercentage = Math.round(number * 100) / 100; | ||||||
|       let rounded = actualPercentage.toFixed(0); |       let rounded = actualPercentage.toFixed(0); | ||||||
|       return rounded; |       return rounded; | ||||||
|  |     }, | ||||||
|  |     computeColors(lotteries) { | ||||||
|  |       let totalRed = 0; | ||||||
|  |       let totalGreen = 0; | ||||||
|  |       let totalYellow = 0; | ||||||
|  |       let totalBlue = 0; | ||||||
|  |       let total = 0; | ||||||
|  |       let stolen = 0; | ||||||
|  |  | ||||||
|  |       const colorAccumulatedWins = { | ||||||
|  |         blue: 0, | ||||||
|  |         green: 0, | ||||||
|  |         red: 0, | ||||||
|  |         yellow: 0 | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       const accumelatedColors = (winners, colorAccumulatedWins) => { | ||||||
|  |         winners.forEach(winner => { | ||||||
|  |           const winnerColor = winner.color; | ||||||
|  |           colorAccumulatedWins[winnerColor] += 1; | ||||||
|  |         }); | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       lotteries.forEach(lottery => { | ||||||
|  |         totalRed += lottery.red; | ||||||
|  |         totalGreen += lottery.green; | ||||||
|  |         totalYellow += lottery.yellow; | ||||||
|  |         totalBlue += lottery.blue; | ||||||
|  |         total += lottery.bought; | ||||||
|  |         stolen += lottery.stolen; | ||||||
|  |  | ||||||
|  |         accumelatedColors(lottery.winners, colorAccumulatedWins); | ||||||
|  |       }); | ||||||
|  |  | ||||||
|  |       this.red = totalRed; | ||||||
|  |       this.yellow = totalYellow; | ||||||
|  |       this.green = totalGreen; | ||||||
|  |       this.blue = totalBlue; | ||||||
|  |       this.total = total; | ||||||
|  |  | ||||||
|  |       this.totalWin = | ||||||
|  |         colorAccumulatedWins.red + colorAccumulatedWins.yellow + colorAccumulatedWins.blue + colorAccumulatedWins.green; | ||||||
|  |       this.stolen = stolen; | ||||||
|  |  | ||||||
|  |       this.colors.push({ | ||||||
|  |         name: "red", | ||||||
|  |         total: totalRed, | ||||||
|  |         win: colorAccumulatedWins.red, | ||||||
|  |         totalPercentage: this.getPercentage(colorAccumulatedWins.red, this.totalWin), | ||||||
|  |         percentage: this.getPercentage(colorAccumulatedWins.red, this.red.total) | ||||||
|  |       }); | ||||||
|  |       this.colors.push({ | ||||||
|  |         name: "blue", | ||||||
|  |         total: totalBlue, | ||||||
|  |         win: colorAccumulatedWins.blue, | ||||||
|  |         totalPercentage: this.getPercentage(colorAccumulatedWins.blue, this.totalWin), | ||||||
|  |         percentage: this.getPercentage(colorAccumulatedWins.blue, this.blue.total) | ||||||
|  |       }); | ||||||
|  |       this.colors.push({ | ||||||
|  |         name: "yellow", | ||||||
|  |         total: totalYellow, | ||||||
|  |         win: colorAccumulatedWins.yellow, | ||||||
|  |         totalPercentage: this.getPercentage(colorAccumulatedWins.yellow, this.totalWin), | ||||||
|  |         percentage: this.getPercentage(colorAccumulatedWins.yellow, this.yellow.total) | ||||||
|  |       }); | ||||||
|  |       this.colors.push({ | ||||||
|  |         name: "green", | ||||||
|  |         total: totalGreen, | ||||||
|  |         win: colorAccumulatedWins.green, | ||||||
|  |         totalPercentage: this.getPercentage(colorAccumulatedWins.green, this.totalWin), | ||||||
|  |         percentage: this.getPercentage(colorAccumulatedWins.green, this.green.total) | ||||||
|  |       }); | ||||||
|  |  | ||||||
|  |       this.colors = this.colors.sort((a, b) => (a.win > b.win ? -1 : 1)); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <style lang="scss" scoped> | <style lang="scss" scoped> | ||||||
| @import "../styles/variables.scss"; | @import "@/styles/variables.scss"; | ||||||
| @import "../styles/media-queries.scss"; | @import "@/styles/media-queries.scss"; | ||||||
| @import "../styles/global.scss"; | @import "@/styles/global.scss"; | ||||||
|  |  | ||||||
| @include mobile{ | @include mobile { | ||||||
|   section { |   section { | ||||||
|     margin-top: 5em; |     margin-top: 5em; | ||||||
|   } |   } | ||||||
| @@ -182,7 +194,7 @@ export default { | |||||||
|         margin-top: 40px; |         margin-top: 40px; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       &.total-bought-color{ |       &.total-bought-color { | ||||||
|         font-weight: bold; |         font-weight: bold; | ||||||
|         margin-top: 25px; |         margin-top: 25px; | ||||||
|       } |       } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user