All files / app/pages/about-us about-us.component.ts

74.62% Statements 247/331
100% Branches 4/4
37.5% Functions 3/8
74.62% Lines 247/331

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 3321x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 2x 2x 2x 2x 2x 2x 2x 16x 16x 2x 1x 1x                                                                                   1x 1x 60x 60x 1x 1x     1x 1x                               1x 1x       1x 1x 1x 1x                                               1x  
import { isPlatformBrowser, NgStyle } from '@angular/common';
import { Component, inject, OnInit, PLATFORM_ID, ViewChild } from '@angular/core';
import { Meta, Title } from '@angular/platform-browser';
import { Router } from '@angular/router';
import { MarketingPageData } from '@classes/about-us.class';
import { basicReviewOptions } from '@constants/app.constants';
import { tripReviews } from '@constants/trips.constants';
import { FooterElementComponent } from '@elements/footer-element/footer-element.component';
import { GMapComponent } from '@elements/g-map/g-map.component';
import { HeaderElementComponent } from '@elements/header-element/header-element.component';
import { TeamCardComponent } from '@elements/team-card/team-card.component';
import { TrustboxComponent } from '@elements/trustbox/trustbox.component';
import { environment } from '@environments/environment';
import { AnalyticsIntegrationService } from '@services/analyticsIntegration.service';
import { MetaTagService } from '@services/meta-tag.service';
import { NetworkService } from '@services/network.service';
import { ModalModule } from 'ngx-bootstrap/modal';
import { CarouselModule, OwlOptions } from 'ngx-owl-carousel-o';
import { FormatCountriesPipe } from '../../pipes/format-countries.pipe';
 
@Component({
	selector: 'grt-about-us',
	templateUrl: './about-us.component.html',
	styleUrls: ['./about-us.component.scss'],
	standalone: true,
	imports: [
		HeaderElementComponent,
		FooterElementComponent,
		TrustboxComponent,
		CarouselModule,
		TeamCardComponent,
		ModalModule,
		FormatCountriesPipe,
		NgStyle,
	],
})
export class AboutUsComponent implements OnInit {
	@ViewChild('myasonry', { static: true }) myasonry: any;
	private metaTag = inject(MetaTagService);
	private meta = inject(Meta);
	private titleService = inject(Title);
	private analyticsIntegrationService = inject(AnalyticsIntegrationService);
	private platformId = inject(PLATFORM_ID);
	network = inject(NetworkService);
	router = inject(Router);
 
	data!: MarketingPageData | any;
	index = 0;
	masonryItems = [
		{
			name: 'David Manley',
			position: 'CEO and Founder',
			img: '/assets/team/david_pic.jpeg',
			img_mob: '/assets/team/david_pic_mob.jpg',
			alt: "David Manley's picture",
			desc: 'David is the CEO and founder of Go Real Travel. Originally from the U.S., he first came to Europe while stationed in Germany with the army. He returned to Europe to settle in Prague with his Czech wife. David is most inspired by journeys off the beaten path, where the thrill of discovery comes alive—especially when history and nature come together. Read more about his story at the bottom of this page.',
		},
		{
			name: 'Martin Wagner',
			position: 'COO and Co-Founder',
			img: '/assets/team/martin_pic.jpg',
			img_mob: '/assets/team/martin_pic.jpg',
			alt: "Martin Wagner's picture",
			desc: 'Martin is the COO and co-founder of Go Real Travel. Originally from the U.S., he moved to Prague to teach English and never looked back. What he loves most about travel is simply relaxing in beautiful, inspiring surroundings. Passionate about his work, Martin finds deep joy in helping others experience the pleasure of truly great travel.',
		},
		{
			name: 'Samantha Barbagallo',
			position: 'Head of Travel Experience',
			img: '/assets/team/samantha_pic.jpeg',
			img_mob: '/assets/team/samantha_pic_mob.jpg',
			alt: "Samantha Barbagallo's picture",
			desc: 'A travel pro since 16, Samantha’s been making dream holidays a reality with Go Real Travel since 2015. After moving to Prague in 2013, she dove even deeper into her passion for exploring cultures, savoring global cuisines, and swapping stories with fascinating people—all while raising two kids and loving every minute of the journey!',
		},
		{
			name: 'Myles Rieger',
			position: 'Lead Travel Consultant',
			img: '/assets/team/myles_pic.jpg',
			img_mob: '/assets/team/myles_pic_mob.jpg',
			alt: "Myles Rieger's picture",
			desc: 'Myles was born in Louisiana but has always been deeply curious about the wider world. A 2013 study abroad in Germany sparked a lasting passion for Europe, leading him to move to Prague. There, he found a new calling as a tour guide, combining his love of travel and storytelling. In 2018, he joined Go Real Travel and began planning personalized adventures. With over 40 countries under his belt, Myles believes travel offers not just new sights, but new perspectives. He loves helping travelers explore both the must-see sites and the hidden gems with ease.',
		},
		{
			name: 'Amy Peteritis',
			position: 'Travel Experience Coordinator',
			img: '/assets/team/amy_pic.jpg',
			img_mob: '/assets/team/amy_pic.jpg',
			alt: "Amy Peteritis' picture",
			desc: 'Amy grew up in Pennsylvania with a British mother and a father in the U.S. Army, who taught her from an early age to love travel! After a transformative hike along Spain’s Camino de Santiago, she moved to Prague in 2019. Now based in the heart of Europe with her Portuguese partner (and their rescue cat), she loves to explore the continent’s iconic sites and hidden corners alike. Whether hiking to scenic viewpoints or eating homemade meals in a quiet Portuguese town, Amy thrives on authentic travel experiences that blend culture, nature, and discovery!',
		},
		{
			name: 'Taha Rizwan',
			position: 'Frontend Developer',
			alt: "Taha Rizwan's picture",
			img: '/assets/team/taha_pic.jpg',
			img_mob: '/assets/team/taha_pic.jpg',
			desc: 'Taha grew up in Lahore, Pakistan—a city steeped in history, culture, and creativity. His fascination with design & technology led him to a career as a Frontend Developer. At Go Real Travel, he combines technical expertise with user-centered design to craft intuitive digital experiences to make trip planning simple and inspiring. Outside of work, he loves to explore the diverse landscapes of Pakistan, from the towering peaks of Hunza to the serene lakes of Skardu. For Taha, travel is about connection: with people, with nature, and with stories that stay with you long after the journey ends.',
		},
		{
			name: 'Tyler Hawthorne',
			position: 'Travel Consultant',
			img: '/assets/team/tyler_pic.JPG',
			img_mob: '/assets/team/tyler_pic.JPG',
			alt: "Tyler Hawthorne's picture",
			desc: 'Born and raised in Canada, Tyler grew up with a love for adventure and competition, playing both golf and hockey at a professional level. As he explored the Great Wall and experienced local cultures on a life-changing trip to Asia, he realized that his curiosity for history and storytelling made travel his greatest passion, and he knew that he wanted to help others discover that same sense of wonder. Today, he channels that passion into crafting unforgettable travel experiences. He brings energy, care, and insight to every itinerary—helping clients discover the world with ease.',
		},
		{
			name: 'Sydney Peterson',
			position: 'Destination Experience Architect',
			img: '/assets/team/sydney_pic.jpg',
			img_mob: '/assets/team/sydney_pic.jpg',
			alt: "Sydney Peterson's picture",
			desc: 'Originally from the United States, Sydney moved abroad seven years ago to pursue her MA in Art History in London and has subsequently lived in Australia, traveled extensively across Europe, and recently settled in Prague—drawn by its rich history, architecture, and charm. What she loves most about travel is the way it slows time, invites presence, and opens the door to extraordinary people, places, and discoveries. Sydney is passionate about her role because it allows her to live at the crossroads of her greatest loves: writing, learning, research, and adventure.',
		},
		{
			name: 'Muhammad Haroon',
			position: 'Backend Developer',
			alt: "Muhammad Haroon's picture",
			img: '/assets/team/haroon_pic.png',
			img_mob: '/assets/team/haroon_pic.png',
			desc: 'Muhammad Haroon is a Pakistani Full Stack Developer from Jhang, now based in Lahore. He thrives on building efficient, user-focused web applications. What he loves most about travel is discovering new perspectives and stories in unfamiliar places. He’s passionate about his job because it allows him to solve real-world problems through code.',
		},
		{
			name: 'Dean Perry',
			position: 'Destination Experience Architect',
			alt: "Dean Perry's picture",
			img: '/assets/team/dean_pic.jpg',
			img_mob: '/assets/team/dean_pic.jpg',
			desc: 'As a destination developer, Dean digs into the travel, research and content behind our itineraries. He’s originally from the US, but has lived in Prague for more than twenty years with his Czech wife and children. Dean loves how travel encourages personal connections and true self-reflection. He enjoys developing destinations so that travelers are inspired to capture the details and stories hidden in plain sight.',
		},
		{
			name: 'Ashish Rathi',
			position: 'Travel Operations Specialist',
			alt: "Ashish Rathi's picture",
			img: '../assets/team/ashish_pic.jpg',
			img_mob: '../assets/team/ashish_pic.jpg',
			desc: "Ashish is an experienced Operations Specialist with over 12 years in the tourism industry, managing hotel bookings, vendor coordination, and seamless service delivery for Go Real Travel's clients. With travel experience across Vietnam, Nepal, Thailand, Cambodia, Malaysia, and Singapore, he brings cultural insight and operational expertise to every trip. He thrives on working with people from diverse backgrounds and constantly learning about destinations, and loves crafting smooth, enriching experiences for every traveler.",
		},
		{
			name: 'Muhammad Usman',
			position: 'Mobile App Developer',
			alt: "Muhammad Usman's picture",
			img: '/assets/team/usman_pic.jpg',
			img_mob: '/assets/team/usman_pic_mob.jpg',
			desc: 'Usman is a results-driven Senior Software Engineer based in Lahore, Pakistan, with over three years of experience building user-friendly web and mobile applications. Known for clean code and strong problem-solving skills, he creates seamless digital experiences. At Go Real Travel, he uses his full-stack expertise to develop smooth, reliable tools that simplify trip planning. Outside of work, he enjoys exploring Pakistan’s natural beauty—especially the Naran-Kaghan Valley—finding travel a powerful way to discover new places, connect with people, and spark fresh ideas.',
		},
		{
			name: 'Petr Škarka',
			position: 'Travel Logistics Manager',
			alt: "Petr Škarka's picture",
			img: '/assets/team/petr_pic.jpg',
			img_mob: '/assets/team/petr_pic_mob.jpg',
			desc: 'Petr Skarka is Go Real Travel’s logistics manager, a lifelong Prague resident whose wanderings have taken him far beyond Czech borders. Some of his adventures include protesting on the front lines against the former Communist regime, cycling across South America, and leading fishing expeditions in New Zealand’s mountains. Despite his many exploits, what Petr loves perhaps most of all is fishing and blue-grass music.',
		},
		{
			name: 'Mariya Ikonnikova',
			position: 'Travel Consultant',
			img: '/assets/team/mariya_pic.jpg',
			img_mob: '/assets/team/mariya_pic.jpg',
			alt: "Mariya Ikonnikova's picture",
			desc: `Mariya grew up in Kazakhstan, but from the time she was a child she dreamed of building a life in Europe. Captivated by the continent's history, culture, and feeling of possibility, she eventually made that lifelong dream a reality when she moved to Prague to go to university. For Mariya, travel isn't just a hobby, it's what makes her feel truly alive. "Life during travel, with new experiences each day, makes a week feel like a month - in a good way," she likes to say. Whether she's wandering through a medieval square, discovering small local cafés, or simply soaking in the rhythm of a new place, she seeks out the spark that only travel brings.`,
		},
		{
			name: 'Zuzana Nesybová',
			position: 'Travel Consultant',
			alt: "Zuzana Nesybová's picture",
			img: '/assets/team/zuzana_pic.jpg',
			img_mob: '/assets/team/zuzana_pic.jpg',
			desc: 'Born and raised in Prague, the heart of Europe, Zuzana grew up surrounded by history and the charm of old cities, a natural beginning for her passion for travel. In her early 20s, she moved to the United States to live her own American dream, exploring a completely different side of the world and experiencing how transformative travel can be. She still remembers that exhilarating mix of excitement and fear as she set out on her own for the first time, a journey that later took her across Europe and to Abu Dhabi, UAE, where she gained valuable international experience in the hotel industry.\n With a strong hospitality background and a genuine love for beautiful hotels, exceptional service, and thoughtful details, Zuzana now creates personalized, seamless itineraries that help travelers feel supported, inspired, and completely at ease as they explore the world.',
		},
	];
	masonryItemPairs: any[][] = [];
	@ViewChild('map', { static: true }) map: GMapComponent | any;
	isBrowser: any;
	options: OwlOptions = {
		loop: true,
		mouseDrag: true,
		touchDrag: true,
		pullDrag: false,
		dots: false,
		navSpeed: 700,
		responsive: {
			0: {
				items: 1,
			},
			400: {
				items: 1,
			},
			650: {
				items: 2,
			},
			740: {
				items: 3,
			},
			940: {
				items: 4,
			},
		},
		nav: true,
	};
	isReviewFromAPI: boolean = false;
	reviewOptions: OwlOptions = basicReviewOptions;
	snippets: any[] = tripReviews;
	show_more = [false, false, false, false, false, false];
	showLessActive = [false, false, false, false, false, false];
	expanded = false;
	storyExpanded = false;
 
	constructor() {
		this.isBrowser = isPlatformBrowser(this.platformId);
		this.metaTag.removeMetaTags();
		this.meta.addTags(
			this.metaTag.getMetaTags(
				'About Us - Go Real Travel',
				"Meet Go Real Travel – Your passport to personalized adventures. Crafting bespoke itineraries for unique journeys. Let's turn your travel dreams into reality.",
				environment.frontendUrl + '/assets/team/about-us.jpeg',
			),
		);
	}
 
	ngOnInit() {
		if (this.isBrowser) {
			this.analyticsIntegrationService.loadScript();
		}
		this.titleService.setTitle('About Us - Go Real Travel');
		this.network.marketingPage('about_us').then((data) => (this.data = data));
		this.masonryItemPairs = [];
		for (let i = 0; i < this.masonryItems.length; i += 2) {
			this.masonryItemPairs.push(this.masonryItems.slice(i, i + 2));
		}
	}
 
	getNewUrl(url: string, width: number, height: number): string {
		if (!url || typeof url !== 'string') return '';

		// Extract the base URL and parameters
		const [baseUrl, params] = url.split('/upload/');
		const parts = params.split('/');
		const transformationsIndex = parts.findIndex((part) => part.match(/v[0-9]+/));

		// Extract transformations and the rest of the URL
		let transformations = parts.slice(0, transformationsIndex).join(',');
		let restOfUrl = parts.slice(transformationsIndex).join('/');

		const supportedFormatsRegex = /\.(png|jpg|jpeg)$/i;

		// Replace the supported image format with .webp
		restOfUrl = restOfUrl.replace(supportedFormatsRegex, '.webp');

		// Split transformations into an array
		const transformationArray = transformations.split(',');

		// Define new transformations with specified width and height
		const newTransformations = [`f_auto`, `fl_lossy`, `q_50`, `w_${width}`, `h_${height}`];

		// Map to replace existing width and height transformations
		const updatedTransformations = transformationArray
			.map((trans) => {
				if (trans.startsWith('w_') || trans.startsWith('h_')) {
					return null; // Mark for removal
				}
				return trans;
			})
			.filter((trans) => trans !== null); // Remove existing width/height

		// Merge transformations ensuring unique values
		const mergedTransformations = new Set([...updatedTransformations, ...newTransformations]);

		// Reconstruct transformations string
		transformations = Array.from(mergedTransformations).join(',');

		// Construct and return the new URL
		return `${baseUrl}/upload/${transformations}/${restOfUrl}`;
	}
 
	trackById(index: number, item: any): any {
		return item?.id ?? index; // fallback to index if id is missing
	}
 
	setIndex(index: number) {
		this.index = index;
	}
 
	getStarRatingImage(rating: number | undefined): string {
		switch (rating) {
			case 1:
				return 'one-star';
			case 2:
				return 'two-star';
			case 3:
				return 'three-star';
			case 4:
				return 'four-star';
			case 5:
				return 'five-star';
			default:
				return 'five-star';
		}
	}
 
	toggleShow(index: any) {
		this.show_more[index] = !this.show_more[index];
		this.showLessActive[index] = !this.show_more[index];
	}
 
	isScrolledRight = false;
 
	toggleScrollDirection() {
		const el = this.myasonry?.nativeElement as HTMLElement;
		console.log(el);
		if (!el) return;

		// Enable scroll
		el.style.overflowX = 'scroll';

		// Scroll to left or right based on current state
		if (this.isScrolledRight) {
			el.scrollTo({ left: 0, behavior: 'smooth' }); // Scroll to left
		} else {
			el.scrollTo({ left: el.scrollWidth, behavior: 'smooth' }); // Scroll to right
		}

		// Revert to overflow hidden after scroll completes
		const scrollDuration = 600; // Adjust if needed
		setTimeout(() => {
			el.style.overflowX = 'hidden';
		}, scrollDuration);

		// Toggle direction
		this.isScrolledRight = !this.isScrolledRight;
	}
}