File
Implements
Methods
createActivity
|
createActivity()
|
|
|
fetchDayByDayView
|
fetchDayByDayView()
|
|
|
fetchMainActivityTypeDetails
|
fetchMainActivityTypeDetails()
|
|
|
fetchMainActivityTypePictures
|
fetchMainActivityTypePictures()
|
|
|
mainActivityType
|
Type : object
|
|
mainActivityTypeName
|
Type : string
|
Default value : ""
|
|
mainActivityTypePictures
|
Type : Object[]
|
Default value : []
|
|
mobile
|
Type : boolean
|
Default value : false
|
|
onBeforeSlide
|
Default value : () => {...}
|
|
picturesLoaded
|
Type : boolean
|
Default value : false
|
|
settings
|
Type : object
|
Default value : {
counter: false,
}
|
|
trip
|
Type : Object
|
Default value : null
|
|
tripSummary
|
Type : Object[]
|
Default value : []
|
|
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { DbConnectionService } from '../db-connection.service';
import { LightgalleryModule } from 'lightgallery/angular/13';
import { BeforeSlideDetail } from 'lightgallery/lg-events';
import { YourtripComponent } from '../yourtrip/yourtrip.component';
@Component({
selector: 'app-activitytype',
templateUrl: './activitytype.component.html',
styleUrls: ['./activitytype.component.scss']
})
export class ActivitytypeComponent implements OnInit {
trip: Object = null;
tripId: number;
mainActivityTypeName = "";
mobile: boolean = false;
mainActivityType: object;
tripSummary: Object[] = [];
mainActivityTypePictures: Object[] = [];
picturesLoaded: boolean = false;
settings = {
counter: false,
};
onBeforeSlide = (detail: BeforeSlideDetail): void => {
const { index, prevIndex } = detail;
console.log(index, prevIndex);
};
constructor(private route: ActivatedRoute,
private db: DbConnectionService,
private router: Router) { }
ngOnInit(): void {
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
this.mobile = true
}
this.route.params.subscribe(r => {
if (r["tripId"]) {
this.tripId = Number(r["tripId"]);
// this.fetchDayByDayView()
}
// error handling
if (!r["activitytype"])
return alert("Invalid activitytype");
this.mainActivityTypeName = r['activitytype']
})
this.fetchMainActivityTypeDetails();
this.fetchMainActivityTypePictures()
}
fetchMainActivityTypeDetails() {
this.db.executeQuery(`SELECT * FROM MainActivityType WHERE name="${this.mainActivityTypeName}"`).then(r => {
this.mainActivityType = r["data"][0];
})
}
fetchMainActivityTypePictures() {
this.db.executeQuery(`SELECT * FROM MainActivityTypePicture WHERE mainActivityType = "${this.mainActivityTypeName}"`).then(r => {
this.mainActivityTypePictures = r["data"]
})
this.picturesLoaded = true
}
fetchDayByDayView() {
this.db.executeQuery(`SELECT * from DayByDayView WHERE tripID=${this.tripId}`).then(r => {
this.tripSummary = r["data"];
})
}
createActivity() {
this.db.executeQuery(`SELECT persons FROM Trip WHERE tripID=${this.tripId}`).then(r1 => {
let persons = r1["data"][0]["persons"];
console.log(persons)
// fetch recommended nights of mainactivity
// this.db.executeQuery(`SELECT recommendedNights FROM MainActivityType WHERE name="${activity['name']}"`).then(r2 => {
// let nights = r2["data"][0]["recommendedNights"];
// fetch next available date
this.db.executeQuery(`SELECT endDate FROM ((SELECT tripID, startDate as endDate, 'ARRIVAL' as name FROM Trip) UNION (SELECT tripID, DATE_ADD(startDate, INTERVAL nights DAY) as endDate, mainActivityType as name FROM MainActivity)) AS T WHERE tripID=${this.tripId} ORDER BY endDate DESC LIMIT 1`).then(r3 => {
let date = r3["data"][0]["endDate"];
console.log(date)
// create new Activity with default values
console.log(`INSERT INTO MainActivity (tripID, mainActivityType, persons, startDate) VALUES (${this.tripId}, '{this.mainActivityTypeName}', ${persons}, '${date}')`)
this.db.executeQuery(`INSERT INTO MainActivity (tripID, mainActivityType, persons, startDate) VALUES (${this.tripId}, '${this.mainActivityTypeName}', ${persons}, '${date}')`).then(r => {
// redirect with mainActivityID
this.router.navigateByUrl(`trip/${this.tripId}/activity/${r["data"].insertId}`);
// })
})
// })
})
})
}
}
<div class="header d-flex justify-content-between">
<h2>Select Activity</h2>
<app-wizard [selectedStep]="1" [tripID]=this.tripId></app-wizard>
</div>
<div class="middle-container mobile-container">
<div class="col">
<div class="custom-card">
<div class="d-flex justify-content-between">
<h3>{{mainActivityType ? mainActivityType['name'] : 'LOADING...'}}</h3>
</div>
<hr />
<div *ngIf="mainActivityType" class="text-justify">{{mainActivityType['description']}}</div>
<div *ngIf="picturesLoaded">
<h5 class="cared-title">pictures</h5>
<div class="gallery-grid" [settings]="settings" (Init)="onInit"> <!-- `(Init)="onInit"` was `[onInit]="onInit"` change not tested (changed to supress error)!!!-->
<a *ngFor="let activityPicture of mainActivityTypePictures">
<img [src]="activityPicture.picture" />
</a>
</div>
</div>
<!-- <h5 class="card-title">description</h5> -->
<!-- <div *ngIf="mainActivityType" class="text-justify">{{mainActivityType['longDescription']}}</div> -->
<!-- <button class="btn" (click)="createActivity()" > Add Activity
</button> -->
</div>
</div>
<!-- <div *ngIf="!mobile && tripId" class="col-md-3">
<div class="custom-card">
<h3>Your Trip</h3>
<hr />
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Day</th>
<th scope="col">Activity</th>
<th scope="col">Event</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let trip of tripSummary">
<th scope="row">{{trip.day}}</th>
<td>{{trip.activity}}</td>
<td>{{trip.dayActivity}}</td>
</tr>
</tbody>
</table>
</div>
</div> -->
<div *ngIf="!mobile && tripId" class="col-md-3">
<div class="custom-card">
<app-yourtrip></app-yourtrip>
</div>
</div>
</div>
<div class="footer d-flex justify-content-between">
<button *ngIf="tripId" type="button" class="btn btn-back" [routerLink]="['/trip', tripId, 'activities']"><i class="bi bi-back"></i> Back</button>
<button *ngIf="tripId" type="button" class="btn btn-next" (click)="createActivity()"><i class="bi bi-bag-plus-fill"></i> {{ !mobile?
'Add Activity' : 'Add'}}</button>
</div>
@import 'variables';
@import 'footer';
@import 'header';
@import 'custom-checkbox';
@import 'custom-card';
@import 'custom-table';
// @import '~lightgallery/scss/lightgallery';
@media (max-width: 767px) {
.gallery-grid {
.img {
width: 100%;
width: 400px;
margin-bottom: 5px;
// border: 2px solid $primary-button-color;
border-radius: 5px;
};
}
}
Legend
Html element with directive