diff --git a/frontend/src/app/dialogs/information/information.component.ts b/frontend/src/app/dialogs/information/information.component.ts
index 5f4200e1..8fa619ec 100644
--- a/frontend/src/app/dialogs/information/information.component.ts
+++ b/frontend/src/app/dialogs/information/information.component.ts
@@ -18,15 +18,16 @@ export class InformationComponent {
updateItems: { date: string, updates: string[] }[] = [
{
- date: '3/13/2024',
+ date: '3/12/2024',
updates: [
'Temporary removal of Dark Mode feature.',
'Added Translation for Business Configuration Menu.',
- 'Added Translation for Add Products Menu.'
+ 'Added Translation for Add Products Menu.',
+ 'Added Business Search functionality.'
]
},
{
- date: '3/12/2024',
+ date: '3/11/2024',
updates: [
'Added Translation for Business Marker Dialog.',
'Added Translation for Shopping Order Menu.',
diff --git a/frontend/src/app/home/home.component.html b/frontend/src/app/home/home.component.html
index d087b02c..84323e2c 100644
--- a/frontend/src/app/home/home.component.html
+++ b/frontend/src/app/home/home.component.html
@@ -1,5 +1,5 @@
-
+
diff --git a/frontend/src/app/home/home.component.ts b/frontend/src/app/home/home.component.ts
index 03818f50..d08c9e95 100644
--- a/frontend/src/app/home/home.component.ts
+++ b/frontend/src/app/home/home.component.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewChild } from '@angular/core';
import { ActionRowComponent } from './action-row/action-row.component';
import { SearchBarComponent } from './search-bar/search-bar.component';
import { MapComponent } from './map/map.component';
@@ -11,4 +11,11 @@ import { MapComponent } from './map/map.component';
styleUrl: './home.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush,
})
-export class HomeComponent {}
+export class HomeComponent {
+ @ViewChild(MapComponent) mapComponent!: MapComponent;
+ @ViewChild(SearchBarComponent) searchBarComponent!: SearchBarComponent;
+
+ passSearchQueryToMap(query: string): void {
+ this.mapComponent.filterShops(query);
+ }
+}
diff --git a/frontend/src/app/home/map/map.component.ts b/frontend/src/app/home/map/map.component.ts
index 2b0b2ac9..65526cb8 100644
--- a/frontend/src/app/home/map/map.component.ts
+++ b/frontend/src/app/home/map/map.component.ts
@@ -11,11 +11,12 @@ import { GeolocationService } from '../../core/service/geolocation.service';
import { ShopService } from '../../core/service/shop.service';
import { SnackService } from '../../core/service/snack.service';
import { dummyCoordinates } from '../../core/model/business';
+import { SearchBarComponent } from '../search-bar/search-bar.component';
@Component({
selector: 'app-map',
standalone: true,
- imports: [LeafletModule, RouterModule],
+ imports: [SearchBarComponent, LeafletModule, RouterModule],
templateUrl: './map.component.html',
styleUrl: './map.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush
@@ -27,9 +28,11 @@ export class MapComponent implements OnInit {
id: string = '65e2d67a38e1e60afd74378d';
navigator: Router = inject(Router);
showPopup: boolean = false;
+ searchBarQuery: string = '';
allShops: any[] = [];
+ filteredShops: any[] = [];
userPositions: any[] = [];
-
+
// Translation strings
distanceMessage!: string;
onlinePiOrdersAllowedMessage!: string;
@@ -71,6 +74,7 @@ export class MapComponent implements OnInit {
const shops: any[] = response.data?.data;
this.allShops = shops;
+ this.filteredShops = shops;
// Wait for translation update before adding coordinates to the map
this.updateTranslatedStrings();
@@ -83,7 +87,6 @@ export class MapComponent implements OnInit {
} catch (error) {
console.log(error);
}
-
this.track();
}
@@ -97,6 +100,18 @@ export class MapComponent implements OnInit {
this.track();
}
+ // Filter shops based on search query
+ filterShops(query: string): void {
+ console.log("filterShops called");
+ this.filteredShops = this.allShops.filter(shop =>
+ shop.name.toLowerCase().includes(query.toLowerCase())
+ );
+ console.log("Filtered shops:", this.filteredShops);
+ // Update the map markers to reflect the filtered shops
+ this.removeAllMarkersFromMap();
+ this.addAllCoordinatesToMap(this.filteredShops);
+ }
+
private updateTranslatedStrings(): void {
this.distanceMessage = this.translateService.instant('BUSINESS_MARKER_DIALOG.DISTANCE_MESSAGE');
this.onlinePiOrdersAllowedMessage = this.translateService.instant('BUSINESS_MARKER_DIALOG.DISTANCE_MESSAGE');
@@ -128,8 +143,10 @@ export class MapComponent implements OnInit {
});
}
- addAllCoordinatesToMap(): void {
- this.allShops.forEach((shop: any, index: number) => {
+ addAllCoordinatesToMap(shops?: any[]): void {
+ const shopsToAdd = shops ?? this.allShops;
+
+ shopsToAdd.forEach((shop: any, index: number) => {
const markerLayer = marker([shop.coordinates[0], shop.coordinates[1]], {
icon: this.geolocationService.getMarkerIcon(),
}).bindPopup(this.generatePopupContent(shop))
diff --git a/frontend/src/app/home/search-bar/search-bar.component.html b/frontend/src/app/home/search-bar/search-bar.component.html
index 6ff20dfa..15b34d85 100644
--- a/frontend/src/app/home/search-bar/search-bar.component.html
+++ b/frontend/src/app/home/search-bar/search-bar.component.html
@@ -3,13 +3,10 @@
+
+
diff --git a/frontend/src/app/home/search-bar/search-bar.component.ts b/frontend/src/app/home/search-bar/search-bar.component.ts
index b7a050fc..a28f2b2f 100644
--- a/frontend/src/app/home/search-bar/search-bar.component.ts
+++ b/frontend/src/app/home/search-bar/search-bar.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, EventEmitter, OnInit, Output } from '@angular/core';
import { AsyncPipe } from '@angular/common';
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
@@ -35,6 +35,8 @@ export class SearchBarComponent implements OnInit {
options: string[] = ['R', 'Re', 'Res', 'Rest', 'Resta', 'Restau', 'Restaur', 'Restaura', 'Restauran', 'Restaurant'];
searchBarControl = new FormControl('');
+ @Output() searchQuery = new EventEmitter();
+
constructor(private readonly uiStateService: UiStateService) {
this.uiStateService.setShowBackButton(false);
}
@@ -45,4 +47,17 @@ export class SearchBarComponent implements OnInit {
map((value: string | null) => this.options.filter((option) => option.toLowerCase().includes((value || '').toLowerCase()))),
);
}
+
+ submitSearch(): void {
+ const query = this.searchBarControl.value;
+ if (query != null) {
+ this.emitSearchQuery(query);
+ }
+ }
+
+ emitSearchQuery(event: any): void {
+ const query = event.target.value;
+ console.log('Search query:', query);
+ this.searchQuery.emit(query);
+ }
}