| @@ -80,11 +80,52 @@ | |||
| </li> | |||
| <li class="collapsible-card"> | |||
| <li class="collapsible-card" [ngClass]="{'active' : showFixtures}"> | |||
| <header> | |||
| <label> Matches </label> | |||
| <button> + </button> | |||
| </header> | |||
| <label> Fixtures </label> | |||
| <button (click)="showFixtures = !showFixtures"> | |||
| <span *ngIf="!showFixtures"> + </span> | |||
| <span *ngIf="showFixtures"> - </span> | |||
| </button> | |||
| </header> | |||
| <section class="card"> | |||
| <ion-slides #slides [options]="slideOpts" (ionSlideDidChange)="selectIndex()"> | |||
| <ion-slide *ngFor="let matchDay of bookingSeatsData" | |||
| (click)="showBookingDetails(matchDay)"> | |||
| <div class="image-holder"> | |||
| <figure> | |||
| <img [src]="matchDay.staduim.sideView"> | |||
| </figure> | |||
| </div> | |||
| <section class="content"> | |||
| <section class="match-day-card"> | |||
| <div class="teams"> | |||
| <img [src]="matchDay.matchDetails.home.image" alt=""> | |||
| <span></span> | |||
| <img [src]="matchDay.matchDetails.away.image" alt=""> | |||
| </div> | |||
| <p class="event-details"> | |||
| {{ getEventDateTime(matchDay.dateTime) }} <br> | |||
| {{ matchDay.staduim.name }} Stadium | |||
| </p> | |||
| <h4> {{ matchDay.matchDetails.home.name }} v/s {{ matchDay.matchDetails.away.name }}</h4> | |||
| <h5> {{ matchDay.matchType }} </h5> | |||
| </section> | |||
| </section> | |||
| </ion-slide> | |||
| </ion-slides> | |||
| <button class="view-more-button" (click)="showBookingDetailsByIndex()"> | |||
| Book Now | |||
| </button> | |||
| </section> | |||
| </li> | |||
| </ul> | |||
| @@ -1,3 +1,4 @@ | |||
| $lumous-blue: #1a2389; | |||
| $dark-blue-shade1: #24367c; | |||
| $dark-blue-shade2: #263982; | |||
| $green: #01b868; | |||
| @@ -188,7 +189,6 @@ ion-content { | |||
| color: white; | |||
| font-size: 1rem; | |||
| height: 40px; | |||
| margin-top: 15px; | |||
| box-shadow: 0px 0px 5px 2px darken($dark-blue-shade2, 10%); | |||
| } | |||
| @@ -203,17 +203,14 @@ ion-content { | |||
| font-size: 1rem; | |||
| thead { | |||
| line-height: 2; | |||
| } | |||
| } | |||
| tr { | |||
| &:last-child { | |||
| td { | |||
| padding-bottom: 0px; | |||
| th { | |||
| padding-bottom: 20px; | |||
| } | |||
| } | |||
| } | |||
| tr { | |||
| td { | |||
| overflow: hidden; | |||
| width: 100%; | |||
| @@ -243,4 +240,126 @@ ion-content { | |||
| .chat-button { | |||
| --background: #d73e53; | |||
| } | |||
| ion-slides { | |||
| padding: 30px 0 20px 0; | |||
| position: relative; | |||
| left: 0; | |||
| top: 0; | |||
| z-index: 1; | |||
| overflow: visible; | |||
| height: 40vh; | |||
| overflow: hidden; | |||
| ion-slide { | |||
| display: block; | |||
| overflow: visible; | |||
| text-align: left; | |||
| height: 80%; | |||
| position: relative; | |||
| transform: scale(0.9); | |||
| background-color: transparent; | |||
| transition: transform 0.3s; | |||
| &.swiper-slide-active { | |||
| transform: scale(1); | |||
| } | |||
| } | |||
| .image-holder { | |||
| position: relative; | |||
| height: 100%; | |||
| overflow: hidden; | |||
| border-radius: 7px; | |||
| box-shadow: 0px 10px 25px -7px darken($lumous-blue, 80%); | |||
| figure { | |||
| margin: 0; | |||
| display: block; | |||
| width: 100%; | |||
| height: 100%; | |||
| filter: brightness(60%); | |||
| transition: filter 0.3s; | |||
| border: 0px; | |||
| padding: 0; | |||
| border-radius: 7px; | |||
| overflow: hidden; | |||
| img { | |||
| height: 100%; | |||
| object-fit: cover; | |||
| display: block; | |||
| width: 100%; | |||
| } | |||
| } | |||
| } | |||
| .content { | |||
| height: auto; | |||
| position: relative; | |||
| transform: translateY(-80%); | |||
| box-shadow: 0px 20px 25px -10px darken($lumous-blue, 80%); | |||
| background-color: white; | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| border-radius: 7px; | |||
| overflow: visible; | |||
| z-index: 1; | |||
| padding-bottom: 10px; | |||
| opacity: 0.8; | |||
| } | |||
| .teams { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| width: 130px; | |||
| margin: 0 auto -25px auto; | |||
| height: 50px; | |||
| border-radius: 30px; | |||
| background-color: lighten(#cecece, 10%); | |||
| align-items: center; | |||
| padding: 0 15px; | |||
| position: relative; | |||
| transform: translateY(-25px); | |||
| z-index: 1; | |||
| span { | |||
| font-size: 1rem; | |||
| width: 12px; | |||
| height: 3px; | |||
| background-color: darken(#cecece, 15%); | |||
| } | |||
| img { | |||
| width: 33px; | |||
| height: 33px; | |||
| border-radius: 50%; | |||
| } | |||
| } | |||
| p, h4, h5 { | |||
| margin: 0; | |||
| padding: 0 10%; | |||
| text-align: center; | |||
| } | |||
| .event-details { | |||
| margin: 20px 0 5px; | |||
| color: darken(#cecece, 30%); | |||
| font-size: 0.8rem; | |||
| font-weight: 500; | |||
| } | |||
| h4 { | |||
| color: darken(#cecece, 50%); | |||
| font-size: 1.1rem; | |||
| line-height: 1.5; | |||
| } | |||
| h5 { | |||
| color: darken(#cecece, 50%); | |||
| font-size: 0.9rem; | |||
| line-height: 1.5; | |||
| } | |||
| } | |||
| @@ -1,5 +1,5 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| import { ModalController } from '@ionic/angular'; | |||
| import { Component, OnInit, ViewChild } from '@angular/core'; | |||
| import { IonSlides, ModalController } from '@ionic/angular'; | |||
| import * as moment from 'moment'; | |||
| import { ChatPage } from '../chat/chat.page'; | |||
| import * as faker from 'faker'; | |||
| @@ -36,7 +36,21 @@ type IscoreCard = { | |||
| styleUrls: ['./live.page.scss'], | |||
| }) | |||
| export class LivePage implements OnInit { | |||
| @ViewChild('slides') slides: IonSlides; | |||
| showScoreCard: boolean = true; | |||
| showFixtures: boolean = true; | |||
| selectedIndex: number = 0; | |||
| slideOpts = { | |||
| slidesPerView: 1.5, | |||
| spaceBetween: 15, | |||
| initialSlide: 0, | |||
| centeredSlides: true, | |||
| simulateTouch: false, | |||
| followFinger: false, | |||
| }; | |||
| matchStats: { | |||
| homeTeam: IscoreCard, | |||
| @@ -104,6 +118,14 @@ export class LivePage implements OnInit { | |||
| return moment(dateTime).format('DD MMM'); | |||
| } | |||
| getEventDateTime(dateTime: Date) { | |||
| return moment(dateTime).format('ddd, MMM DD YYYY hh:mm a'); | |||
| } | |||
| selectIndex() { | |||
| this.slides.getActiveIndex().then((index) => this.selectedIndex = index); | |||
| } | |||
| ngOnInit() { | |||
| for (let i = 0; i < 3; i += 1) { | |||
| this.bookingSeatsData.push({ | |||
| @@ -262,4 +284,9 @@ export class LivePage implements OnInit { | |||
| this.router.navigate(['/booking-details' , { matchData: JSON.stringify(matchData) }]); | |||
| } | |||
| showBookingDetailsByIndex() { | |||
| let index = this.selectedIndex; | |||
| this.router.navigate(['/booking-details' , { matchData: JSON.stringify(this.bookingSeatsData[index]) }]); | |||
| } | |||
| } | |||