Skip to content

Commit 6adda67

Browse files
committed
Fix filtering recipes by search
1 parent 8fcae82 commit 6adda67

File tree

4 files changed

+72
-38
lines changed

4 files changed

+72
-38
lines changed

10.0/Apps/WhatToEat/src/WhatToEat/ViewModels/SearchResultsViewModel.cs

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,30 +82,47 @@ async Task OnSearch()
8282
{
8383
NoResultsLabelVisible = false;
8484

85-
if (!string.IsNullOrWhiteSpace(SearchQuery) || !string.IsNullOrWhiteSpace(SearchFilter))
85+
if (!string.IsNullOrWhiteSpace(SearchQuery))
8686
{
87-
RecipeData recipeData = await _restService.GetRecipeDataAsync(SearchFilter);
87+
RecipeData recipeDataQuery = await _restService.GetRecipeDataAsync(SearchQuery);
8888

89-
if (recipeData == null || recipeData.Hits.Length == 0)
89+
if (recipeDataQuery != null && recipeDataQuery.Hits.Length > 0)
9090
{
91-
NoResultsLabel = $"Sorry! We couldn't find any recipes for {SearchQuery}. Try searching for a different recipe!";
92-
NoResultsLabelVisible = true;
93-
SearchResultsVisible = false;
91+
ProcessRecipeData(recipeDataQuery);
92+
return;
9493
}
95-
else
96-
{
97-
NoResultsLabelVisible = false;
98-
SearchResultsVisible = true;
94+
}
9995

100-
for (int i = 0; i < recipeData.Hits.Length; i++)
101-
{
102-
recipeData.Hits[i].Id = i;
103-
}
96+
if (!string.IsNullOrWhiteSpace(SearchFilter))
97+
{
98+
RecipeData recipeDataFilter = await _restService.GetRecipeDataAsync(SearchFilter);
10499

105-
RecipeData = recipeData;
106-
AppShell.Data = RecipeData;
100+
if (recipeDataFilter != null && recipeDataFilter.Hits.Length > 0)
101+
{
102+
ProcessRecipeData(recipeDataFilter);
103+
return;
107104
}
108105
}
106+
107+
// If both searches return no results
108+
string searchQuery = SearchQuery ?? SearchFilter;
109+
NoResultsLabel = $"Sorry! We couldn't find any recipes for '{searchQuery}'. Try searching for a different recipe!";
110+
NoResultsLabelVisible = true;
111+
SearchResultsVisible = false;
112+
}
113+
114+
void ProcessRecipeData(RecipeData recipeData)
115+
{
116+
NoResultsLabelVisible = false;
117+
SearchResultsVisible = true;
118+
119+
for (int i = 0; i < recipeData.Hits.Length; i++)
120+
{
121+
recipeData.Hits[i].Id = i;
122+
}
123+
124+
RecipeData = recipeData;
125+
AppShell.Data = RecipeData;
109126
}
110127

111128
async void OnItemSelected(Hit hit)

10.0/Apps/WhatToEat/src/WhatToEat/ViewModels/StartingPageViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ async Task OnSearch(string filter = null)
3434
// Require query and/or filter to search
3535
if (!string.IsNullOrWhiteSpace(SearchQuery) || !string.IsNullOrWhiteSpace(filter))
3636
{
37-
RecipeData recipeData = await _restService.GetRecipeDataAsync(filter);
37+
RecipeData recipeData = await _restService.GetRecipeDataAsync(SearchQuery);
3838

3939
string urlEncodedFilter = System.Net.WebUtility.UrlEncode(filter);
4040
await Shell.Current.GoToAsync($"{nameof(SearchResultsPage)}?SearchQuery={SearchQuery}&SearchFilter={urlEncodedFilter}");

9.0/Apps/WhatToEat/src/WhatToEat/ViewModels/SearchResultsViewModel.cs

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public SearchResultsViewModel()
2828
ItemTapped = new Command<Hit>(OnItemSelected);
2929
SearchCommand = new Command(async () => await OnSearch());
3030

31-
}
31+
}
3232

3333
public RecipeData RecipeData
3434
{
@@ -82,30 +82,47 @@ async Task OnSearch()
8282
{
8383
NoResultsLabelVisible = false;
8484

85-
if (!string.IsNullOrWhiteSpace(SearchQuery) || !string.IsNullOrWhiteSpace(SearchFilter))
85+
if (!string.IsNullOrWhiteSpace(SearchQuery))
8686
{
87-
RecipeData recipeData = await _restService.GetRecipeDataAsync(SearchFilter);
87+
RecipeData recipeDataQuery = await _restService.GetRecipeDataAsync(SearchQuery);
8888

89-
if (recipeData == null || recipeData.Hits.Length == 0)
89+
if (recipeDataQuery != null && recipeDataQuery.Hits.Length > 0)
9090
{
91-
NoResultsLabel = $"Sorry! We couldn't find any recipes for {SearchQuery}. Try searching for a different recipe!";
92-
NoResultsLabelVisible = true;
93-
SearchResultsVisible = false;
91+
ProcessRecipeData(recipeDataQuery);
92+
return;
9493
}
95-
else
96-
{
97-
NoResultsLabelVisible = false;
98-
SearchResultsVisible = true;
94+
}
9995

100-
for (int i = 0; i < recipeData.Hits.Length; i++)
101-
{
102-
recipeData.Hits[i].Id = i;
103-
}
96+
if (!string.IsNullOrWhiteSpace(SearchFilter))
97+
{
98+
RecipeData recipeDataFilter = await _restService.GetRecipeDataAsync(SearchFilter);
10499

105-
RecipeData = recipeData;
106-
AppShell.Data = RecipeData;
100+
if (recipeDataFilter != null && recipeDataFilter.Hits.Length > 0)
101+
{
102+
ProcessRecipeData(recipeDataFilter);
103+
return;
107104
}
108105
}
106+
107+
// If both searches return no results
108+
string searchQuery = SearchQuery ?? SearchFilter;
109+
NoResultsLabel = $"Sorry! We couldn't find any recipes for '{searchQuery}'. Try searching for a different recipe!";
110+
NoResultsLabelVisible = true;
111+
SearchResultsVisible = false;
112+
}
113+
114+
void ProcessRecipeData(RecipeData recipeData)
115+
{
116+
NoResultsLabelVisible = false;
117+
SearchResultsVisible = true;
118+
119+
for (int i = 0; i < recipeData.Hits.Length; i++)
120+
{
121+
recipeData.Hits[i].Id = i;
122+
}
123+
124+
RecipeData = recipeData;
125+
AppShell.Data = RecipeData;
109126
}
110127

111128
async void OnItemSelected(Hit hit)
@@ -117,4 +134,4 @@ async void OnItemSelected(Hit hit)
117134
await Shell.Current.GoToAsync($"{nameof(SearchResultDetailPage)}?HitId={hit.Id}");
118135
}
119136
}
120-
}
137+
}

9.0/Apps/WhatToEat/src/WhatToEat/ViewModels/StartingPageViewModel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ public string SearchQuery
2929
set => SetProperty(ref _searchQuery, value);
3030
}
3131

32-
async Task OnSearch(string filter = null)
32+
async Task OnSearch(string filter = null)
3333
{
3434
// Require query and/or filter to search
3535
if (!string.IsNullOrWhiteSpace(SearchQuery) || !string.IsNullOrWhiteSpace(filter))
3636
{
37-
RecipeData recipeData = await _restService.GetRecipeDataAsync(filter);
37+
RecipeData recipeData = await _restService.GetRecipeDataAsync(SearchQuery);
3838

3939
string urlEncodedFilter = System.Net.WebUtility.UrlEncode(filter);
4040
await Shell.Current.GoToAsync($"{nameof(SearchResultsPage)}?SearchQuery={SearchQuery}&SearchFilter={urlEncodedFilter}");
@@ -43,4 +43,4 @@ async Task OnSearch(string filter = null)
4343
}
4444
}
4545
}
46-
}
46+
}

0 commit comments

Comments
 (0)