Ignore:
Timestamp:
01/28/22 18:45:54 (3 years ago)
Author:
Ema <ema_spirova@…>
Branches:
master
Children:
6fe77af
Parents:
b738035
Message:

search all locations by city or region

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trip-planner-front/src/app/explore/explore.component.ts

    rb738035 r76712b2  
    11import { Component, OnInit } from '@angular/core';
    2 import { City } from '../_models/city';
    3 import { CityService } from '../_services/city.service';
     2import { FormControl } from '@angular/forms';
     3import { Router } from '@angular/router';
     4import { Observable, Subscription } from 'rxjs';
     5import { map, startWith } from 'rxjs/operators';
     6import { LocationService } from '../_services/location.service';
     7import { RegionService } from '../_services/region.service';
    48
    59
     
    1115export class ExploreComponent implements OnInit {
    1216
    13   cities: City[];
    14   filteredCountries: any[];
    1517  text: string;
    1618  loading = [false, false, false, false];
     19  regions: string[] = [];
     20  filteredOptions: Observable<any[]> = new Observable<any[]>();
     21  myControl = new FormControl();
     22  cityName: string = '';
     23  selectedPlace: string = '';
     24  thirdSubscription: Subscription = new Subscription;
    1725
    18   constructor(private cityService: CityService) {
    19     this.cities = [];
    20     this.filteredCountries = [];
     26  constructor(private locationService: LocationService,
     27    private regionService: RegionService, private router: Router) {
    2128    this.text = '';
    2229  }
    2330
    2431  ngOnInit(): void {
    25     this.cityService.getAllCities().subscribe(
    26       cities => {
    27         this.cities = cities;
     32
     33    this.regionService.getAllCitiesAndRegions().subscribe(
     34      data => {
     35        this.regions = data;
    2836      }
     37    );
     38
     39    this.filteredOptions = this.myControl.valueChanges.pipe(
     40      startWith(''),
     41      map(value => (typeof value === 'string' ? value : value.name)),
     42      map(name => (name ? this._filter(name) : this.regions.slice())),
    2943    );
    3044  }
    3145
    32   search(event) {
    33     let filtered: any[] = [];
    34     let query = event.query;
    35     for (let i = 0; i < this.cities.length; i++) {
    36       let city = this.cities[i];
    37       if (city.name.toLowerCase().indexOf(query.toLowerCase()) == 0) {
    38         filtered.push(city);
    39       }
    40     }
    41     this.filteredCountries = filtered;
     46  displayFn(city: string): string {
     47    return city && city ? city : '';
     48  }
     49
     50  private _filter(name: string): any[] {
     51    const filterValue = name.toLowerCase();
     52    return this.regions.filter(option => option.toLowerCase().includes(filterValue));
    4253  }
    4354
     
    4556    this.loading[index] = true;
    4657    setTimeout(() => this.loading[index] = false, 1000);
     58    this.locationService.getAllLocationsSearch(this.selectedPlace).subscribe(
     59      data => {
     60        this.router.navigate(['results'], { queryParams: { place: this.selectedPlace } });
     61      }
     62    );
     63  }
     64
     65  onPlaceSelected(selectedPlace) {
     66    console.log(this.selectedPlace); // get from view
    4767  }
    4868}
Note: See TracChangeset for help on using the changeset viewer.