Api calls done within & refactored as housekeeping.
Strings "Følg med på utviklingen" and "chat om trekningen" scrolls the page content into view if clicked.
This commit is contained in:
		@@ -5,7 +5,10 @@
 | 
			
		||||
        <div class="instructions">
 | 
			
		||||
          <h1 class="title">Virtuelt lotteri</h1>
 | 
			
		||||
          <ol>
 | 
			
		||||
            <li>Vurder om du ønsker å bruke <router-link to="/generate" class="vin-link">loddgeneratoren</router-link>, eller sjekke ut <router-link to="/dagens" class="vin-link">dagens fangst.</router-link></li>
 | 
			
		||||
            <li>
 | 
			
		||||
              Vurder om du ønsker å bruke <router-link to="/generate" class="vin-link">loddgeneratoren</router-link>,
 | 
			
		||||
              eller sjekke ut <router-link to="/dagens" class="vin-link">dagens fangst.</router-link>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li>Send vipps med melding "Vinlotteri" for å bli registrert til lotteriet.</li>
 | 
			
		||||
            <li>Send gjerne melding om fargeønske også.</li>
 | 
			
		||||
          </ol>
 | 
			
		||||
@@ -15,18 +18,16 @@
 | 
			
		||||
 | 
			
		||||
        <VippsPill class="vipps-pill mobile-only" />
 | 
			
		||||
 | 
			
		||||
         <p class="call-to-action">
 | 
			
		||||
            <span class="vin-link">Følg med på utviklingen</span> og <span class="vin-link">chat om trekningen</span>
 | 
			
		||||
            <i class="icon icon--arrow-left" @click="scrollToContent"></i></p>
 | 
			
		||||
        <p class="call-to-action">
 | 
			
		||||
          <span class="vin-link" @click="scrollToContent">Følg med på utviklingen</span> og
 | 
			
		||||
          <span class="vin-link" @click="scrollToContent">chat om trekningen</span>
 | 
			
		||||
          <i class="icon icon--arrow-left" @click="scrollToContent"></i>
 | 
			
		||||
        </p>
 | 
			
		||||
      </div>
 | 
			
		||||
    </header>
 | 
			
		||||
 | 
			
		||||
    <div class="container" ref="content">
 | 
			
		||||
      <WinnerDraw
 | 
			
		||||
        :currentWinnerDrawn="currentWinnerDrawn"
 | 
			
		||||
        :currentWinner="currentWinner"
 | 
			
		||||
        :attendees="attendees"
 | 
			
		||||
      />
 | 
			
		||||
      <WinnerDraw :currentWinnerDrawn="currentWinnerDrawn" :currentWinner="currentWinner" :attendees="attendees" />
 | 
			
		||||
 | 
			
		||||
      <div class="todays-raffles">
 | 
			
		||||
        <h2>Liste av lodd kjøpt i dag</h2>
 | 
			
		||||
@@ -51,15 +52,16 @@
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="container wines-container">
 | 
			
		||||
    <div class="todays-wines">
 | 
			
		||||
      <h2>Dagens fangst ({{ wines.length }})</h2>
 | 
			
		||||
      <Wine :wine="wine" v-for="wine in wines" :key="wine" />
 | 
			
		||||
      <div class="wines-container">
 | 
			
		||||
        <Wine :wine="wine" v-for="wine in wines" :key="wine" />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { attendees, winners, prelottery } from "@/api";
 | 
			
		||||
import Chat from "@/ui/Chat";
 | 
			
		||||
import Vipps from "@/ui/Vipps";
 | 
			
		||||
import VippsPill from "@/ui/VippsPill";
 | 
			
		||||
@@ -74,18 +76,18 @@ export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      attendees: [],
 | 
			
		||||
      attendeesFetched: false,
 | 
			
		||||
      winners: [],
 | 
			
		||||
      wines: [],
 | 
			
		||||
      currentWinnerDrawn: false,
 | 
			
		||||
      currentWinner: null,
 | 
			
		||||
      socket: null,
 | 
			
		||||
      attendeesFetched: false,
 | 
			
		||||
      wasDisconnected: false,
 | 
			
		||||
      ticketsBought: {
 | 
			
		||||
        "red": 0,
 | 
			
		||||
        "blue": 0,
 | 
			
		||||
        "green": 0,
 | 
			
		||||
        "yellow": 0
 | 
			
		||||
        red: 0,
 | 
			
		||||
        blue: 0,
 | 
			
		||||
        green: 0,
 | 
			
		||||
        yellow: 0
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
@@ -129,42 +131,45 @@ export default {
 | 
			
		||||
    this.socket = null;
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getWinners: async function() {
 | 
			
		||||
      let response = await winners();
 | 
			
		||||
      if (response) {
 | 
			
		||||
        this.winners = response;
 | 
			
		||||
      }
 | 
			
		||||
    getWinners() {
 | 
			
		||||
      fetch("/api/lottery/winners")
 | 
			
		||||
        .then(resp => resp.json())
 | 
			
		||||
        .then(response => (this.winners = response.winners));
 | 
			
		||||
    },
 | 
			
		||||
    getTodaysWines() {
 | 
			
		||||
      prelottery()
 | 
			
		||||
      fetch("/api/lottery/wines")
 | 
			
		||||
        .then(resp => resp.json())
 | 
			
		||||
        .then(response => response.wines)
 | 
			
		||||
        .then(wines => {
 | 
			
		||||
          this.wines = wines;
 | 
			
		||||
          this.todayExists = wines.length > 0;
 | 
			
		||||
        })
 | 
			
		||||
        .catch(_ => this.todayExists = false)
 | 
			
		||||
        .catch(_ => (this.todayExists = false));
 | 
			
		||||
    },
 | 
			
		||||
    getAttendees: async function() {
 | 
			
		||||
      let response = await attendees();
 | 
			
		||||
      if (response) {
 | 
			
		||||
        this.attendees = response;
 | 
			
		||||
        if (this.attendees == undefined || this.attendees.length == 0) {
 | 
			
		||||
          this.attendeesFetched = true;
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
        const addValueOfListObjectByKey = (list, key) =>
 | 
			
		||||
          list.map(object => object[key]).reduce((a, b) => a + b);
 | 
			
		||||
    getAttendees() {
 | 
			
		||||
      fetch("/api/lottery/attendees")
 | 
			
		||||
        .then(resp => resp.json())
 | 
			
		||||
        .then(response => {
 | 
			
		||||
          const { attendees } = response;
 | 
			
		||||
          this.attendees = attendees || [];
 | 
			
		||||
 | 
			
		||||
        this.ticketsBought = {
 | 
			
		||||
          red: addValueOfListObjectByKey(response, "red"),
 | 
			
		||||
          blue: addValueOfListObjectByKey(response, "blue"),
 | 
			
		||||
          green: addValueOfListObjectByKey(response, "green"),
 | 
			
		||||
          yellow: addValueOfListObjectByKey(response, "yellow")
 | 
			
		||||
        };
 | 
			
		||||
      }
 | 
			
		||||
      this.attendeesFetched = true;
 | 
			
		||||
          if (attendees == undefined || attendees.length == 0) {
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const addValueOfListObjectByKey = (list, key) => list.map(object => object[key]).reduce((a, b) => a + b);
 | 
			
		||||
 | 
			
		||||
          this.ticketsBought = {
 | 
			
		||||
            red: addValueOfListObjectByKey(attendees, "red"),
 | 
			
		||||
            blue: addValueOfListObjectByKey(attendees, "blue"),
 | 
			
		||||
            green: addValueOfListObjectByKey(attendees, "green"),
 | 
			
		||||
            yellow: addValueOfListObjectByKey(attendees, "yellow")
 | 
			
		||||
          };
 | 
			
		||||
        })
 | 
			
		||||
        .finally(_ => (this.attendeesFetched = true));
 | 
			
		||||
    },
 | 
			
		||||
    scrollToContent() {
 | 
			
		||||
      console.log(window.scrollY)
 | 
			
		||||
      console.log(window.scrollY);
 | 
			
		||||
      const intersectingHeaderHeight = this.$refs.header.getBoundingClientRect().bottom - 50;
 | 
			
		||||
      const { scrollY } = window;
 | 
			
		||||
      let scrollHeight = intersectingHeaderHeight;
 | 
			
		||||
@@ -178,14 +183,13 @@ export default {
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    track() {
 | 
			
		||||
      window.ga('send', 'pageview', '/lottery/game');
 | 
			
		||||
      window.ga("send", "pageview", "/lottery/game");
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
 | 
			
		||||
@import "../styles/variables.scss";
 | 
			
		||||
@import "../styles/media-queries.scss";
 | 
			
		||||
 | 
			
		||||
@@ -201,7 +205,8 @@ export default {
 | 
			
		||||
  display: grid;
 | 
			
		||||
  grid-template-columns: repeat(4, 1fr);
 | 
			
		||||
 | 
			
		||||
  > div, > section {
 | 
			
		||||
  > div,
 | 
			
		||||
  > section {
 | 
			
		||||
    @include mobile {
 | 
			
		||||
      grid-column: span 5;
 | 
			
		||||
    }
 | 
			
		||||
@@ -343,6 +348,8 @@ header {
 | 
			
		||||
 | 
			
		||||
  > div {
 | 
			
		||||
    padding: 1rem;
 | 
			
		||||
    max-height: 638px;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
 | 
			
		||||
    -webkit-box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.15);
 | 
			
		||||
    -moz-box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.15);
 | 
			
		||||
@@ -369,11 +376,14 @@ header {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.todays-wines {
 | 
			
		||||
  width: 80vw;
 | 
			
		||||
  padding: 0 10vw;
 | 
			
		||||
 | 
			
		||||
.wines-container {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
  margin-bottom: 4rem;
 | 
			
		||||
  @include mobile {
 | 
			
		||||
    width: 90vw;
 | 
			
		||||
    padding: 0 5vw;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  h2 {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user