diff --git a/src/app/app.component.html b/src/app/app.component.html index 2934ad1..5e470c1 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1 +1,3 @@ - + + + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index f33c411..56171c1 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,12 +1,13 @@ import { Component } from '@angular/core'; import { HomeComponent } from './pages/home/home.component'; - +import { NavbarComponent } from './components/navbar/navbar.component'; +import { RouterModule } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, - imports: [HomeComponent], + imports: [HomeComponent, NavbarComponent, RouterModule], templateUrl: './app.component.html', - styleUrl: './app.component.css' + styleUrl: './app.component.css', }) export class AppComponent { title = 'TASK-NG-Routing'; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index dc39edb..ab1ed51 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,3 +1,21 @@ -import { Routes } from '@angular/router'; +import { RouterModule, Routes } from '@angular/router'; -export const routes: Routes = []; +export const routes: Routes = [ + { + 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: '', + loadComponent: () => + import('./pages/home/home.component').then((m) => m.HomeComponent), + }, +]; diff --git a/src/app/components/navbar/navbar.component.html b/src/app/components/navbar/navbar.component.html index 86bcc47..5a1c573 100644 --- a/src/app/components/navbar/navbar.component.html +++ b/src/app/components/navbar/navbar.component.html @@ -6,13 +6,14 @@ + diff --git a/src/app/components/navbar/navbar.component.ts b/src/app/components/navbar/navbar.component.ts index aef9405..22e10eb 100644 --- a/src/app/components/navbar/navbar.component.ts +++ b/src/app/components/navbar/navbar.component.ts @@ -1,12 +1,11 @@ import { Component } from '@angular/core'; - +import { RouterLink, RouterOutlet } from '@angular/router'; +import { RouterModule } from '@angular/router'; @Component({ selector: 'app-navbar', standalone: true, - imports: [], + imports: [RouterModule], templateUrl: './navbar.component.html', - styleUrl: './navbar.component.css' + styleUrl: './navbar.component.css', }) -export class NavbarComponent { - -} +export class NavbarComponent {} diff --git a/src/app/components/trip-card/trip-card.component.html b/src/app/components/trip-card/trip-card.component.html index 0428d14..9c17bfa 100644 --- a/src/app/components/trip-card/trip-card.component.html +++ b/src/app/components/trip-card/trip-card.component.html @@ -1,5 +1,5 @@
-
+
diff --git a/src/app/components/trip-card/trip-card.component.ts b/src/app/components/trip-card/trip-card.component.ts index eb6eee8..c54c9ae 100644 --- a/src/app/components/trip-card/trip-card.component.ts +++ b/src/app/components/trip-card/trip-card.component.ts @@ -1,13 +1,17 @@ import { Component, Input } from '@angular/core'; import { Trip } from '../../../data/trips'; +import { RouterModule } from '@angular/router'; @Component({ selector: 'app-trip-card', standalone: true, - imports: [], + imports: [RouterModule], templateUrl: './trip-card.component.html', styleUrl: './trip-card.component.css', }) export class TripCardComponent { @Input() trip!: Trip; + test() { + console.log(this.trip); + } } diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html index 08171ab..d6d93f0 100644 --- a/src/app/pages/home/home.component.html +++ b/src/app/pages/home/home.component.html @@ -1,11 +1,11 @@ - + -
+ -@if (selectedTrip) { + 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..9c50078 --- /dev/null +++ b/src/app/pages/trip/trip.component.html @@ -0,0 +1,4 @@ +@if (selectedTrip) { + +} + 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..8ab0e4d --- /dev/null +++ b/src/app/pages/trip/trip.component.ts @@ -0,0 +1,28 @@ +import { Component, Input } from '@angular/core'; +import { Trip, trips } from '../../../data/trips'; +import { TripDetailsComponent } from '../../components/trip-details/trip-details.component'; +import { ActivatedRoute, Router, RouterModule } from '@angular/router'; +@Component({ + selector: 'app-trip', + standalone: true, + imports: [TripDetailsComponent, RouterModule], + templateUrl: './trip.component.html', + styleUrl: './trip.component.css', +}) +export class TripComponent { + // selectedTrip: Trip = trips[0]; + selectedTrip?: Trip; + + constructor(private route: ActivatedRoute, private router: Router) { + const id = +this.route.snapshot.paramMap.get('slug')!; + this.selectedTrip = trips.find((trip) => trip.id === id); // Find the fruit by ID + // console.log('PLEASE WORK!!!'); + // console.log(this.selectedTrip); + + if (!this.selectedTrip) { + // this.router.navigate(['/trips-list']); + this.router.navigate(['/trips-list']); + console.log('trip selected: ', this.selectedTrip); + } + } +} 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..6ddc75c --- /dev/null +++ b/src/app/pages/trips-list/trips-list.component.html @@ -0,0 +1,20 @@ + +
+
+

Explore Trips

+
+ + + + +
+
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..e67da0f --- /dev/null +++ b/src/app/pages/trips-list/trips-list.component.ts @@ -0,0 +1,44 @@ +import { Component } from '@angular/core'; +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 { 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]; + 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; + }); + } +}