diff --git a/src/app/home/components/search/search.component.html b/src/app/home/components/search/search.component.html index b192a5b..d741cbb 100644 --- a/src/app/home/components/search/search.component.html +++ b/src/app/home/components/search/search.component.html @@ -3,6 +3,8 @@
diff --git a/src/app/home/components/search/search.component.scss b/src/app/home/components/search/search.component.scss index f1f838d..8c5a69c 100644 --- a/src/app/home/components/search/search.component.scss +++ b/src/app/home/components/search/search.component.scss @@ -1,25 +1,3 @@ -// @import 'variables'; - -// .search-form { -// display:flex; -// flex-direction:row; -// gap: 10px; -// justify-content:center; - -// .search-inputs-container{ -// display:flex; -// flex-direction:row; -// gap:10px; -// } - -// } - -// .pi-circle-off, -// .pi-circle-on { -// color: $dark-color; -// text-shadow: 0 0 4px rgb(16, 2, 170); -// } - @import 'variables'; .search-container { @@ -39,40 +17,4 @@ .search-group { position: relative; - - // .search-group.end-city .p-autocomplete input::placeholder { - // padding-left: 20px; - // } -} - -.search-group::before { - content: ''; - - position: absolute; - z-index: 1; - top: 50%; - left: 3px; - transform: translateY(-50%); - - display: inline-block; - - width: 8px; - height: 8px; - - border-radius: 50%; -} - -.search-group.start-city::before { - content: ''; - - width: 8px; - height: 8px; - - background-color: #fff; - border: 2px solid $dark-color; - border-radius: 50%; -} - -.search-group.end-city::before { - background-color: $dark-color; } diff --git a/src/app/home/components/search/search.component.ts b/src/app/home/components/search/search.component.ts index 8177947..81156ec 100644 --- a/src/app/home/components/search/search.component.ts +++ b/src/app/home/components/search/search.component.ts @@ -9,6 +9,11 @@ import { IconFieldModule } from 'primeng/iconfield'; import { InputGroupModule } from 'primeng/inputgroup'; import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; import { InputIconModule } from 'primeng/inputicon'; +import { firstValueFrom } from 'rxjs'; + +import { Station } from '@/app/api/models/stations'; +import { StationsService } from '@/app/api/stationsService/stations.service'; +import { AutocompleteIconDirective } from '@/app/shared/directives/autocompleteIcon/autocomplete-icon.directive'; @Component({ selector: 'app-search', @@ -22,6 +27,7 @@ import { InputIconModule } from 'primeng/inputicon'; InputGroupAddonModule, FloatLabelModule, ReactiveFormsModule, + AutocompleteIconDirective, CalendarModule, ], templateUrl: './search.component.html', @@ -30,22 +36,27 @@ import { InputIconModule } from 'primeng/inputicon'; }) export class SearchComponent implements OnInit { public tripForm!: FormGroup; - public cities: string[] = ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']; public filteredCities: string[] = []; public minDate: Date = new Date(); private fb: FormBuilder = inject(FormBuilder); + public stationsService = inject(StationsService); + public stations: Station[] = []; public ngOnInit(): void { this.tripForm = this.fb.group({ startCity: ['', Validators.required.bind(this)], endCity: ['', Validators.required.bind(this)], - dateTime: ['', Validators.required.bind(this)], + }); + firstValueFrom(this.stationsService.getStations()).then((stations) => { + this.stations = stations; }); } public filterCity(event: AutoCompleteCompleteEvent): void { const query = event.query.toLowerCase(); - this.filteredCities = this.cities.filter((city) => city.toLowerCase().includes(query)); + this.filteredCities = this.stations + .filter(({ city }) => city.toLowerCase().includes(query)) + .map(({ city }) => city); } public onSubmit(): void {} diff --git a/src/app/shared/directives/autocompleteIcon/autocomplete-icon.directive.ts b/src/app/shared/directives/autocompleteIcon/autocomplete-icon.directive.ts new file mode 100644 index 0000000..addbfda --- /dev/null +++ b/src/app/shared/directives/autocompleteIcon/autocomplete-icon.directive.ts @@ -0,0 +1,26 @@ +import { AfterViewInit, Directive, ElementRef, inject, Input } from '@angular/core'; + +import { AutoComplete } from 'primeng/autocomplete'; + +@Directive({ + selector: '[appAutocompleteIcon]', + standalone: true, +}) +export class AutocompleteIconDirective implements AfterViewInit { + private autoComplete = inject(AutoComplete); + @Input() public icon = ''; + + public ngAfterViewInit(): void { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + const inputWrapper = (this.autoComplete.el as ElementRef