search page html and ts - Assignment 2
Tue Jun 18 2024 11:02:44 GMT+0000 (Coordinated Universal Time)
Saved by @iamkatmakhafola
//HTML
<ion-header>
<ion-toolbar>
<ion-searchbar
#searchInput
placeholder="Search Resturant Name"
(ionInput)="onSearchChange($event)"
[(ngModel)]="query"
></ion-searchbar>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-list-header *ngIf="!isLoading && query && restaurants.length > 0">
<ion-label>
<h4>Search results for "{{query}}"</h4>
</ion-label>
</ion-list-header>
<ion-item lines="none" *ngFor="let restaurant of restaurants"
[routerLink]="['/', 'tabs', 'restaurants', restaurant.uid]">
<ion-thumbnail slot="start">
<img [src]="restaurant?.cover ? restaurant.cover : 'assets/imgs/1.jpeg'" />
</ion-thumbnail>
<ion-label>
<h4>{{restaurant?.name}}</h4>
<ion-text color="medium">
<p class="pStyle">
{{getCuisine(restaurant?.cuisines)}}
</p>
</ion-text>
<span>
<ion-icon name="star"></ion-icon>
{{restaurant?.rating}} .
</span>
{{restaurant?.delivery_time}} mins . R{{restaurant?.price}}
<ion-text color="tertiary" *ngIf="restaurant?.distance && restaurant?.distance != 0">
<p class="distance">
{{restaurant?.distance | number: '0.0-2'}} kms away
</p>
</ion-text>
</ion-label>
</ion-item>
</ion-list>
</ion-content>
//TS
import { Component, Input, OnInit, ViewChild } from '@angular/core';
import { Restaurant } from 'src/app/models/restaurant.model';
import { DataService } from 'src/app/services/data/data.service';
@Component({
selector: 'app-search',
templateUrl: './search.page.html',
styleUrls: ['./search.page.scss'],
})
export class SearchPage implements OnInit {
@Input() restaurant: Restaurant
@ViewChild('searchInput') Input;
isLoading: boolean;
query: any;
allPlaces: Restaurant[] = [];
restaurants: Restaurant[] = [];
constructor(private data: DataService) { }
ngOnInit() {
this.allPlaces = this.data.allPlaces;
this.restaurants = this.allPlaces;
}
getCuisine(cuisine) {
return cuisine.join(', ');
}
async onSearchChange(event) {
this.query = event.detail.value.toLowerCase();
this.restaurants = [];
if(this.query.length > 0) {
this.restaurants = await this.allPlaces.filter((element: any) => {
return element.name.toLowerCase().includes(this.query);
});
}
else{
this.restaurants = this.allPlaces;
};
}
}



Comments