Advertisement
Guest User

Untitled

a guest
Aug 21st, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <template>
  2.     <div>
  3.         <div class="row">
  4.             <div class="col-8 offset-2">
  5.                 <OfferNavbarContainer
  6.                     :data="offerNavbarData"
  7.                     @click="onNavbarClick"
  8.                 />
  9.             </div>
  10.         </div>
  11.         <div class="row">
  12.             <div class="col-8 offset-2">
  13.                 <div v-if="showLoading">
  14.                     Loading...
  15.                 </div>
  16.                 <LottoGrid
  17.                     v-if="isLotto"
  18.                     :events="events"
  19.                 />
  20.                 <OfferGrid
  21.                     v-if="isOffer"
  22.                     :groupedEvents="events"
  23.                     :detailedEvent="detailedEvent"
  24.                     :allowDetails="allowDetails"
  25.                     @click="onDetailsClick"
  26.                 />
  27.             </div>
  28.             <div class="col-2">
  29.                 <div class="row">
  30.                     <FilterContainer/>
  31.                 </div>
  32.                 <div class="row">
  33.                     <DatePickerContainer
  34.                         :dates="dates"
  35.                         :selectedDate="selectedDate"
  36.                         @dateClick="onDateClick"
  37.                     />
  38.                 </div>
  39.             </div>
  40.         </div>
  41.     </div>
  42. </template>
  43.  
  44. <script>
  45.     import { mapGetters, mapActions } from 'vuex';
  46.     import DatePickerContainer from '@modules/results/datePicker/DatePickerContainer.vue';
  47.     import FilterContainer from '@modules/results/filter/FilterContainer.vue';
  48.     import OfferNavbarContainer from '@modules/results/offerNavbar/OfferNavbarContainer.vue';
  49.     import LottoGrid from '@modules/results/lottoGrid/LottoGrid.vue';
  50.     import OfferGrid from '@modules/results/offerGrid/OfferGrid.vue';
  51.     import DateUtils from '@core/utils/date/DateUtils';
  52.     import LottoProvider from '@store/modules/results/resultsProviders/LottoProvider';
  53.     import PrematchProvider from '@store/modules/results/resultsProviders/PrematchProvider';
  54.     import LiveProvider from '@store/modules/results/resultsProviders/LiveProvider';
  55.     import LottoGeneralFilter from '@store/modules/ui/results/filters/LottoGeneralFilter';
  56.     import LottoSpecificFilter from '@store/modules/ui/results/filters/LottoSpecificFilter';
  57.     import { DataType } from '@store/modules/ui/results/resultsIndex';
  58.     import OfferGeneralFilter from '@store/modules/ui/results/filters/OfferGeneralFilter';
  59.     import OfferSpecificFilter from '@store/modules/ui/results/filters/OfferSpecificFilter';
  60.     import config from '@config';
  61.  
  62.     export default {
  63.         name: 'ResultsContainer',
  64.         async created() {
  65.             const selectedResults = this.offerNavbarData.filter((item) => item.isSelected)[0];
  66.             const { startDate, endDate } = this.dates[this.dates.length - 1 - this.dateOffset];
  67.             this.setProvider(selectedResults.payload.provider);
  68.             this.setProviderTimeSpan({ startDate, endDate });
  69.             await this.fetchEventResults();
  70.             this.selectDataType(selectedResults.payload.dataType);
  71.             this.setFilters(selectedResults.payload.filters);
  72.         },
  73.         computed: {
  74.             ...mapGetters('results', [
  75.                 'events',
  76.                 'dataType',
  77.             ]),
  78.             ...mapGetters([
  79.                 'resultsTimeSpan',
  80.                 'detailedEvent',
  81.                 'route',
  82.             ]),
  83.             dates() {
  84.                 const dateArray = DateUtils.getDatesArray(config.app.results.maxDaysToFetch);
  85.                 const displayedDates = [];
  86.                 for (let i = 0; i < dateArray.length - 1; i += 1) {
  87.                     displayedDates.push({
  88.                         startDate: dateArray[i],
  89.                         endDate: dateArray[i + 1],
  90.                         offset: dateArray.length - i - 1,
  91.                     });
  92.                 }
  93.                 displayedDates.push({
  94.                     startDate: dateArray[dateArray.length - 1],
  95.                     endDate: new Date(),
  96.                     offset: 0,
  97.                 });
  98.                 return displayedDates;
  99.             },
  100.             selectedDate() {
  101.                 return DateUtils.subtractDays(0, this.resultsTimeSpan.startDate);
  102.             },
  103.             showLoading() {
  104.                 return !this.events;
  105.             },
  106.             isLotto() {
  107.                 return this.dataType === DataType.lotto;
  108.             },
  109.             isOffer() {
  110.                 return this.dataType === DataType.prematch || this.dataType === DataType.live;
  111.             },
  112.             allowDetails() {
  113.                 return this.dataType === DataType.prematch;
  114.             },
  115.             selectedResultsType() {
  116.                 return this.route.params.offerTypeSlug;
  117.             },
  118.             dateOffset() {
  119.                 return this.route.query.offset ? this.route.query.offset : 0;
  120.             },
  121.             offerNavbarData() {
  122.                 const endDate = new Date();
  123.                 const startDate = DateUtils.subtractDays(1);
  124.                 return [
  125.                     {
  126.                         payload: {
  127.                             provider: new PrematchProvider(startDate, endDate),
  128.                             filters: [
  129.                                 new OfferGeneralFilter(this.$t('All games')),
  130.                                 new OfferSpecificFilter(this.$t('All types')),
  131.                             ],
  132.                             dataType: DataType.prematch,
  133.                         },
  134.                         isSelected: this.selectedResultsType === this.$t('sport'),
  135.                         name: this.$t('sport'),
  136.                     },
  137.                     {
  138.                         payload: {
  139.                             provider: new LiveProvider(startDate, endDate),
  140.                             filters: [
  141.                                 new OfferGeneralFilter(this.$t('All games')),
  142.                                 new OfferSpecificFilter(this.$t('All types')),
  143.                             ],
  144.                             dataType: DataType.live,
  145.                         },
  146.                         isSelected: this.selectedResultsType === this.$t('live'),
  147.                         name: this.$t('live'),
  148.                     },
  149.                     {
  150.                         payload: {
  151.                             provider: new LottoProvider(startDate, endDate),
  152.                             filters: [
  153.                                 new LottoGeneralFilter(this.$t('All games')),
  154.                                 new LottoSpecificFilter(this.$t('All types')),
  155.                             ],
  156.                             dataType: DataType.lotto,
  157.                         },
  158.                         isSelected: this.selectedResultsType === this.$t('lotto'),
  159.                         name: this.$t('lotto'),
  160.                     }
  161.                 ];
  162.             }
  163.         },
  164.         methods: {
  165.             ...mapActions([
  166.                 'setProvider',
  167.                 'setProviderTimeSpan',
  168.                 'fetchEventResults',
  169.                 'removeEventResults',
  170.                 'selectDetailedEvent',
  171.                 'removeDetailedEvent',
  172.             ]),
  173.             ...mapActions('results', [
  174.                 'setFilters',
  175.                 'resetGeneralFilter',
  176.                 'resetSpecificFilter',
  177.                 'selectDataType',
  178.                 'removeFilters',
  179.             ]),
  180.             onDateClick(date) {
  181.                 this.setProviderTimeSpan({ startDate: date.startDate, endDate: date.endDate });
  182.                 this.resetGeneralFilter();
  183.                 this.resetSpecificFilter();
  184.                 this.removeDetailedEvent();
  185.                 this.fetchEventResults();
  186.                 this.$router.push({
  187.                     path: this.route.path,
  188.                     query: {
  189.                         offset: date.offset
  190.                     }
  191.                 });
  192.             },
  193.             onNavbarClick(item) {
  194.                 this.resetSpecificFilter();
  195.                 this.resetGeneralFilter();
  196.                 this.removeDetailedEvent();
  197.                 this.setProvider(item.payload.provider);
  198.                 this.removeFilters();
  199.                 this.removeEventResults();
  200.                 this.selectDataType(item.payload.dataType);
  201.                 this.fetchEventResults();
  202.                 this.setFilters(item.payload.filters);
  203.                 this.$router.push(item.name);
  204.             },
  205.             onDetailsClick(event) {
  206.                 this.selectDetailedEvent(event.id);
  207.             }
  208.         },
  209.         components: {
  210.             FilterContainer,
  211.             DatePickerContainer,
  212.             OfferNavbarContainer,
  213.             LottoGrid,
  214.             OfferGrid,
  215.         }
  216.     };
  217. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement