File

src/app/accomodation/accomodation.component.ts

Implements

OnInit

Metadata

Index

Properties
Methods

Constructor

constructor(route: ActivatedRoute, db: DbConnectionService, router: Router, location: Location)
Parameters :
Name Type Optional
route ActivatedRoute No
db DbConnectionService No
router Router No
location Location No

Methods

back
back()
Returns : void
fetchAccomodations
fetchAccomodations()
Returns : void
infoAccommodation
infoAccommodation(accommodation)
Parameters :
Name Optional
accommodation No
Returns : void
ngOnInit
ngOnInit()
Returns : void

Properties

accommodations
Type : Object[]
Default value : []
activity
Type : string
activityId
Type : number
mobile
Type : boolean
Default value : false
selected
Type : number
Default value : -1
tripId
Type : number
import { Location } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { DbConnectionService } from '../db-connection.service';

@Component({
  selector: 'app-accomodation',
  templateUrl: './accomodation.component.html',
  styleUrls: ['./accomodation.component.scss']
})
export class AccomodationComponent implements OnInit {

  tripId: number;
  activityId: number;
  activity: string;
  accommodations: Object[] = [];
  selected:number = -1; // selected accomodation index (<0 means none selected)

  constructor(private route: ActivatedRoute,
    private db: DbConnectionService,
    private router: Router,
    private location: Location) { 
  }
    mobile: boolean = false;

  ngOnInit(): void {

    if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)){
      this.mobile = true
   }

    this.route.params.subscribe(r => {
      // reset selection
      this.selected = -1;
      // error handling
      if (!r["tripId"] || isNaN(Number(r["tripId"])))
        return alert("Invalid TripID");
      if (!r["activityId"]) // error handling
        return alert(`Invalid Activity`)
      // extract tripID and activity from url
      this.tripId = Number(r["tripId"])
      this.activityId = Number(r["activityId"])

      this.fetchAccomodations();
    });
  }

  // isFirstAccomodation(){
  //   return isNaN(this.activityId);
  // }

  fetchAccomodations(){
    // let query = this.isFirstAccomodation()
    //   ? `SELECT *, name as prevAcc FROM FirstAccomodationView WHERE tripID = ${this.tripId} order by level`
    //   : `SELECT *, name as prevAcc FROM ActivityAccomodationView WHERE activityID=${this.activityId} order by level`
    this.db.executeQuery(`SELECT *, name as prevAcc FROM ActivityAccomodationView WHERE activityID=${this.activityId} AND status = "ACTIVE"`).then(r => {
      // set data
      this.accommodations = r["data"];
      // this.activity = this.isFirstAccomodation() 
      //   ? "First Night at " + this.accommodations[0]['place']
      //   : this.accommodations[0]["activity"]

      this.activity = this.accommodations[0]["activity"]
      

      // get prev chosen value
      for (let i = 0; i < this.accommodations.length; i++){
        if (this.accommodations[i]['name'] === this.accommodations[i]['prevAcc']){
          this.selected = i;
          break;
        }
      }
    })
  }

  infoAccommodation(accommodation) {
    console.log(accommodation)
    this.router.navigateByUrl(`trip/${this.tripId}/activity/${this.activityId}/${accommodation['name']}`);
  }

  back(){
    // if (this.isFirstAccomodation())
    //   this.router.navigateByUrl(`/home/${this.tripId}`)
    // else
      this.location.back();
  }

}
<div class="header d-flex justify-content-between">
   <!-- <h2>{{this.activity}}</h2> -->
   <h2>Select Accommodation</h2>
   <app-wizard [selectedStep]="3" [tripID] = this.tripId></app-wizard>
</div>

<div class="middle-container mobile-container">
   <div class="col-xl-12 d-flex justify-content-center">
      <h3>{{this.activity}}</h3>
   </div>
   <div *ngFor="let acc of accommodations; let i = index" class="col d-flex justify-content-center">
      <div class="card accommodation-card custom-box-shadow" (click)="infoAccommodation(acc)">
         <!-- <span class="accomodation-selected">
            <i class="bi bi-check-circle"></i>
         </span> -->
         <img class="card-img-top" [src]="acc.picture ? acc.picture : 'https://via.placeholder.com/140x100'">
         <div class="card-body">
            <div class="card-title">{{acc.level}}</div>
            <div class="card-content">{{acc.tagline}}</div>
            <!-- <div class="stars">
               <span *ngFor="let _ of [].constructor(acc.stars)">&#9733;</span>
            </div> -->
            <p class="card-price">+€{{acc.pricePerNight}}/person</p>
            <!-- <div class="row">
               <div class="col">
                  <button class="btn btn-footer-card" (click)="chooseAccommodation()">
                     Add
                  </button>
               </div>
               <div class="col" *ngIf="!(acc.level === 'Own accommodation')">
                  <button class="btn btn-footer-card" id="info">
                     Info
                  </button>
               </div>
            </div> -->

         </div>
      </div>
   </div>
   <!-- <div class="col d-flex justify-content-center">
      <div class="card accommodation-card" (click)="selected = accommodations.length"
         [ngClass]="{'selected-card': accommodations.length === selected}">
         <div class="card-img-top">
         </div>
         <div class="card-body">
            <div class="card-title">Own accommodation</div>
            <p class="card-price">€0/person</p>
            <div class="row">
               <div class="col">
                  <button class="btn btn-footer" >
                     Add
                  </button>
               </div>
               <div class="col"></div>
               <div class="col">
                  <button class="btn btn-footer" id="info">
                     Info
                  </button>
               </div>
            </div>
            </div>

         </div>
      </div>
   </div> -->



<div class="footer d-flex justify-content-between">
   <button type="button" class="btn btn-back" [routerLink]="['/trip', tripId, 'activity', activityId]"><i class="bi bi-back"></i> Back</button>
   <!-- <button type="button" class="btn btn-next" [routerLink]="['/trip', tripId, 'itinerary']"> {{ !mobile? 'View Itinerary' : 'Itinerary'}}
   </button>
   <button type="button" class="btn btn-next" (click)="chooseAccommodation()" [disabled]="selected < 0">Confirm
      Accomodation
   </button> -->
</div>

./accomodation.component.scss

@import 'variables';
@import 'footer';
@import 'header';
@import 'custom-card';


.stars {
   color: #FAB81E;
   font-size: 24pt;
}

.accommodation-card {
   width: 300px;
   height: 350px;
}

.middle-container {
   display: flex;
   align-items: center;
   justify-content: center;
   height: calc(100vh
         /*header*/
         - $header-height
         /*footer*/
         - $footer-height
         /*middle-container margins*/
         - (2 * $middle-container-padding-height));

   overflow-y: auto;
}

.card-img-top {
   text-align: center;

   i {
      font-size: 72pt;
   }
}

.card {
   border: 2px solid $primary-background-color;

   &.selected-card .accomodation-selected {
      display: block;
   }

   .accomodation-selected {
      font-family: Roboto;
      font-size: 18pt;
      color: white;
      position: absolute;
      right: 0;
      top: 0;
      margin: 6px 10px;
      text-align: center;
      display: none;
      opacity: 0.9;
   }

   .card-body {
      padding: 8px 12px;
      color: #2F4F4F;

      .card-title {
         font-weight: 600;
         font-size: 14pt;
         margin: 0px;
      }

      .card-price {
         font-weight: 500;
         color: darkgray;
         margin-top: 12px;
         text-align: right;
      }
   }

   &.selected-card {
      border-color: $primary-button-color;
      opacity: 1;
   }

   &:hover {
      cursor: pointer;
   }
}

@media only screen and (max-width: 950px) {
   .mobile-container {
      padding-left: 10%;
      padding-right: 10%;
   }

}

@media only screen and (max-width: 600px) {
   .mobile-container{
      padding-left: 0%;
      padding-right: 0%;
   }
}

#info {
   background-color: #0288D1;
   right: 15px;
   position: absolute;
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""