diff --git a/src/app/app.component.html b/src/app/app.component.html index 2934ad1..904014e 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1 +1,7 @@ - + + + + + + + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index f33c411..d759656 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,10 +1,12 @@ import { Component } from '@angular/core'; import { HomeComponent } from './pages/home/home.component'; +import { RouterOutlet } from '@angular/router'; +import { NavbarComponent } from "./components/navbar/navbar.component"; @Component({ selector: 'app-root', standalone: true, - imports: [HomeComponent], + imports: [HomeComponent, RouterOutlet, NavbarComponent], templateUrl: './app.component.html', styleUrl: './app.component.css' }) diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index dc39edb..0177d3f 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,3 +1,26 @@ import { Routes } from '@angular/router'; -export const routes: Routes = []; +export const routes: Routes = [ + { + path: '', + loadComponent: () => + import('./pages/home/home.component').then(m => m.HomeComponent) + }, + { + path: 'trips', + loadComponent: () => + import('./pages/trips-list/trips-list.component') + .then(m => m.TripsListComponent) } + + ,{ + path: 'trips/:slug', + loadComponent: () => + import('./pages/trip/trip.component').then(m => m.TripComponent) + }, + + { + path: '**', + redirectTo: '', + } + +]; diff --git a/src/app/components/navbar/navbar.component.html b/src/app/components/navbar/navbar.component.html index 86bcc47..f695606 100644 --- a/src/app/components/navbar/navbar.component.html +++ b/src/app/components/navbar/navbar.component.html @@ -6,10 +6,10 @@ diff --git a/src/app/components/navbar/navbar.component.ts b/src/app/components/navbar/navbar.component.ts index aef9405..625b378 100644 --- a/src/app/components/navbar/navbar.component.ts +++ b/src/app/components/navbar/navbar.component.ts @@ -1,9 +1,10 @@ import { Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; @Component({ selector: 'app-navbar', standalone: true, - imports: [], + imports: [RouterLink], templateUrl: './navbar.component.html', styleUrl: './navbar.component.css' }) diff --git a/src/app/components/trip-card/trip-card.component.html b/src/app/components/trip-card/trip-card.component.html index 0428d14..dc11de3 100644 --- a/src/app/components/trip-card/trip-card.component.html +++ b/src/app/components/trip-card/trip-card.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/app/components/trip-card/trip-card.component.ts b/src/app/components/trip-card/trip-card.component.ts index eb6eee8..002226f 100644 --- a/src/app/components/trip-card/trip-card.component.ts +++ b/src/app/components/trip-card/trip-card.component.ts @@ -1,10 +1,11 @@ import { Component, Input } from '@angular/core'; -import { Trip } from '../../../data/trips'; +import { Trip, trips } from '../../../data/trips'; +import { Router, RouterLink, RouterModule } from '@angular/router'; @Component({ selector: 'app-trip-card', standalone: true, - imports: [], + imports: [RouterModule], templateUrl: './trip-card.component.html', styleUrl: './trip-card.component.css', }) diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html index 08171ab..18f2569 100644 --- a/src/app/pages/home/home.component.html +++ b/src/app/pages/home/home.component.html @@ -1,25 +1,4 @@ - - - - -
-
-

Explore Trips

-
- - - -
-
- -@if (selectedTrip) { - -} +> \ No newline at end of file diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts index 00f224f..8c9cc0a 100644 --- a/src/app/pages/home/home.component.ts +++ b/src/app/pages/home/home.component.ts @@ -10,46 +10,16 @@ import { NavbarComponent } from '../../components/navbar/navbar.component'; @Component({ selector: 'app-home', standalone: true, - imports: [ - BannerComponent, - SearchFilterComponent, - DividerComponent, - TripsGridComponent, - TripDetailsComponent, - NavbarComponent, - ], + imports: [BannerComponent] + // SearchFilterComponent, + // DividerComponent, + // TripsGridComponent, + // TripDetailsComponent, + // NavbarComponent, + , templateUrl: './home.component.html', styleUrl: './home.component.css', }) export class HomeComponent { - trips: Trip[] = trips; - filteredTrips: Trip[] = [...trips]; - selectedTrip: Trip = trips[0]; - searchQuery: string = ''; - activeDifficultyFilter: DifficultyLevel = 'All'; - handleSearch(searchTerm: string) { - this.searchQuery = searchTerm.toLowerCase(); - this.applyFilters(); - } - - handleFilter(difficulty: DifficultyLevel) { - this.activeDifficultyFilter = difficulty; - this.applyFilters(); - } - - private applyFilters() { - this.filteredTrips = this.trips.filter((trip) => { - const matchesSearch = - !this.searchQuery || - trip.name.toLowerCase().includes(this.searchQuery.toLowerCase()) || - trip.city.toLowerCase().includes(this.searchQuery.toLowerCase()) - - const matchesDifficulty = - this.activeDifficultyFilter === 'All' || - trip.difficulty === this.activeDifficultyFilter; - - return matchesSearch && matchesDifficulty; - }); - } } diff --git a/src/app/pages/trip/trip.component.css b/src/app/pages/trip/trip.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/trip/trip.component.html b/src/app/pages/trip/trip.component.html new file mode 100644 index 0000000..c3c22a3 --- /dev/null +++ b/src/app/pages/trip/trip.component.html @@ -0,0 +1,7 @@ + +@if (trip) { + + } + + + diff --git a/src/app/pages/trip/trip.component.spec.ts b/src/app/pages/trip/trip.component.spec.ts new file mode 100644 index 0000000..4c19a5b --- /dev/null +++ b/src/app/pages/trip/trip.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TripComponent } from './trip.component'; + +describe('TripComponent', () => { + let component: TripComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TripComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TripComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/trip/trip.component.ts b/src/app/pages/trip/trip.component.ts new file mode 100644 index 0000000..07bb652 --- /dev/null +++ b/src/app/pages/trip/trip.component.ts @@ -0,0 +1,29 @@ +import { Component, NgModule } from '@angular/core'; +import { ActivatedRoute, RouterLink, RouterModule , Router} from '@angular/router'; +import { DifficultyLevel, Trip, trips } from '../../../data/trips'; +import { TripDetailsComponent } from "../../components/trip-details/trip-details.component"; +import { NgIf } from '@angular/common'; + +@Component({ + selector: 'app-trip', + standalone: true, + imports: [RouterModule, TripDetailsComponent, NgIf], + templateUrl: './trip.component.html', + styleUrl: './trip.component.css' +}) +export class TripComponent { + trip!: Trip | undefined; + + constructor(private route: ActivatedRoute, private router: Router) { + const slug = this.route.snapshot.paramMap.get('slug'); + const foundTrip = trips.find(t => t.slug === slug); + + if (foundTrip) { + this.trip = foundTrip; + } else { + this.router.navigate(['/trips']); + } + } + +} + diff --git a/src/app/pages/trips-list/trips-list.component.css b/src/app/pages/trips-list/trips-list.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/trips-list/trips-list.component.html b/src/app/pages/trips-list/trips-list.component.html new file mode 100644 index 0000000..1070aad --- /dev/null +++ b/src/app/pages/trips-list/trips-list.component.html @@ -0,0 +1,16 @@ + + +
+
+

Explore Trips

+
+ + + +
+
\ No newline at end of file diff --git a/src/app/pages/trips-list/trips-list.component.spec.ts b/src/app/pages/trips-list/trips-list.component.spec.ts new file mode 100644 index 0000000..354f397 --- /dev/null +++ b/src/app/pages/trips-list/trips-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TripsListComponent } from './trips-list.component'; + +describe('TripsListComponent', () => { + let component: TripsListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TripsListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TripsListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/trips-list/trips-list.component.ts b/src/app/pages/trips-list/trips-list.component.ts new file mode 100644 index 0000000..c470497 --- /dev/null +++ b/src/app/pages/trips-list/trips-list.component.ts @@ -0,0 +1,52 @@ +import { Component} from '@angular/core'; +import { BannerComponent } from '../../components/banner/banner.component'; +import { SearchFilterComponent } from '../../components/search-filter/search-filter.component'; +import { DividerComponent } from '../../components/divider/divider.component'; +import { TripsGridComponent } from '../../components/trips-grid/trips-grid.component'; +import { TripDetailsComponent } from '../../components/trip-details/trip-details.component'; +import { NavbarComponent } from '../../components/navbar/navbar.component'; +import { DifficultyLevel, Trip, trips } from '../../../data/trips'; + + +@Component({ + selector: 'app-trips-list', + standalone: true, + imports: [SearchFilterComponent, + DividerComponent, + TripsGridComponent], + templateUrl: './trips-list.component.html', + styleUrl: './trips-list.component.css' +}) +export class TripsListComponent { + trips: Trip[] = trips; + filteredTrips: Trip[] = [...trips]; + trip: Trip = trips[0]; + searchQuery: string = ''; + activeDifficultyFilter: DifficultyLevel = 'All'; + + handleSearch(searchTerm: string) { + this.searchQuery = searchTerm.toLowerCase(); + this.applyFilters(); + } + + handleFilter(difficulty: DifficultyLevel) { + this.activeDifficultyFilter = difficulty; + this.applyFilters(); + } + + private applyFilters() { + this.filteredTrips = this.trips.filter((trip) => { + const matchesSearch = + !this.searchQuery || + trip.name.toLowerCase().includes(this.searchQuery.toLowerCase()) || + trip.city.toLowerCase().includes(this.searchQuery.toLowerCase()) + + const matchesDifficulty = + this.activeDifficultyFilter === 'All' || + trip.difficulty === this.activeDifficultyFilter; + + return matchesSearch && matchesDifficulty; + }); + } + +}