Skip to content

Commit 951c865

Browse files
feat(cocktails): filter cocktails by ingredient (#199)
1 parent 05255bd commit 951c865

File tree

12 files changed

+60
-20
lines changed

12 files changed

+60
-20
lines changed

src/components/dialogs/cocktail-filter-dialog.html

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<template>
2-
<ux-dialog class="small-dialog">
3-
<div>
4-
<div class="bg-base-200 modal-box relative" style="padding: 0.5em">
2+
<ux-dialog class="au-animate cocktail-dialog" data-cy="cocktail-dialog">
3+
<div class="drawer">
4+
<label click.trigger="cancel()" for="my-drawer" class="drawer-overlay"></label>
5+
<div class="menu p-3 bg-base-100 text-base-content w-full relative">
56
<label class="btn btn-sm btn-circle absolute right-2 top-2" click.trigger="cancel()"></label>
67

78
<h3 class="text-lg font-bold" t="filter"></h3>
@@ -35,6 +36,21 @@ <h3 class="text-lg font-bold" t="filter"></h3>
3536
</select>
3637
</div>
3738

39+
<div class="form-control w-full">
40+
<label class="label">
41+
<span class="label-text" t="ingredient"></span>
42+
</label>
43+
<select
44+
value.bind="ingredientFilter"
45+
class="select select-bordered select-sm"
46+
data-cy="select-ingredient-filter">
47+
<option model.bind="null" t="all-ingredients"></option>
48+
<option repeat.for="ingredient of ingredients" model.bind="ingredient.id">
49+
${ingredient.name}
50+
</option>
51+
</select>
52+
</div>
53+
3854
<div class="form-control w-full mt-2">
3955
<label class="label cursor-pointer">
4056
<span class="label-text" t="show-only-favorites"></span>
@@ -46,8 +62,8 @@ <h3 class="text-lg font-bold" t="filter"></h3>
4662
</label>
4763
</div>
4864

49-
<div class="modal-action">
50-
<label class="btn" click.trigger="ok()" t="apply" data-cy="filter-dialog-close"></label>
65+
<div class="absolute bottom-4 right-4">
66+
<label class="btn btn-primary" click.trigger="ok()" t="apply" data-cy="filter-dialog-close"></label>
5167
</div>
5268
</div>
5369
</div>

src/components/dialogs/cocktail-filter-dialog.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,36 @@ import { inject } from 'aurelia-framework';
22
import { DialogController } from 'aurelia-dialog';
33
import { DrinkCategory, getDrinkCategories } from 'domain/enums/drink-category';
44
import { getSpiritTypeFilters, SpiritType } from 'domain/enums/spirit-type';
5+
import { Ingredient } from 'domain/entities/ingredient';
6+
import { IngredientService } from 'services/ingredient-service';
57

6-
@inject(DialogController)
8+
@inject(DialogController, IngredientService)
79
export class CocktailFilterDialog {
810
public drinkCategories = getDrinkCategories();
911
public spirits = getSpiritTypeFilters();
12+
public ingredients: Ingredient[];
1013

1114
public categoryFilter: DrinkCategory;
1215
public spiritFilter: SpiritType;
16+
public ingredientFilter: string;
1317
public favoriteFilter: boolean;
1418

15-
constructor(private _dialogContoller: DialogController) {}
19+
constructor(private _dialogContoller: DialogController, private _ingredientService: IngredientService) {}
1620

1721
activate(model: CocktailFilterDialogModel) {
22+
this.ingredients = this._ingredientService.getIngredients();
1823
this.categoryFilter = model.categoryFilter;
1924
this.spiritFilter = model.spiritFilter;
2025
this.favoriteFilter = model.favoriteFilter;
26+
this.ingredientFilter = model.ingredientFilter;
2127
}
2228

2329
ok() {
2430
const response: CocktailFilterDialogModel = {
2531
spiritFilter: this.spiritFilter,
2632
categoryFilter: this.categoryFilter,
27-
favoriteFilter: this.favoriteFilter === true ? true : null
33+
favoriteFilter: this.favoriteFilter === true ? true : null,
34+
ingredientFilter: this.ingredientFilter
2835
};
2936

3037
this._dialogContoller.ok(response);
@@ -37,5 +44,6 @@ export class CocktailFilterDialog {
3744
export class CocktailFilterDialogModel {
3845
categoryFilter: DrinkCategory;
3946
spiritFilter: SpiritType;
47+
ingredientFilter: string;
4048
favoriteFilter: boolean;
4149
}

src/dialog.scss

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
ux-dialog-container {
22
display: block;
33
width: 100%;
4-
transition: opacity 0.2s linear;
54
opacity: 0;
6-
position: fixed;
5+
transition: opacity 0.2s linear;
76
background: hsl(0deg 0% 25% / 90%);
7+
position: fixed;
88
&.active {
99
opacity: 1;
1010
}
@@ -17,7 +17,7 @@ ux-dialog-container {
1717
ux-dialog {
1818
width: 100%;
1919
display: block;
20-
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
20+
2121
height: 100vh;
2222
}
2323

src/locales/ca/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Conyac / Brandi"
9494
},
9595
"or": "O",
96-
"show-mocktails": "Mostra Mocktails"
96+
"show-mocktails": "Mostra Mocktails",
97+
"all-ingredients": "Tots els ingredients"
9798
}

src/locales/de/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Conyac / Schnaps"
9494
},
9595
"or": "Oder",
96-
"show-mocktails": "Mocktails anzeigen"
96+
"show-mocktails": "Mocktails anzeigen",
97+
"all-ingredients": "Alle Zutaten"
9798
}

src/locales/en/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Cognac / Brandy"
9494
},
9595
"or": "Or",
96-
"show-mocktails": "Show Mocktails"
96+
"show-mocktails": "Show Mocktails",
97+
"all-ingredients": "All Ingredients"
9798
}

src/locales/es/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Coñac / Brandy"
9494
},
9595
"or": "O",
96-
"show-mocktails": "Mostrar mocktails"
96+
"show-mocktails": "Mostrar mocktails",
97+
"all-ingredients": "Todos los ingredientes"
9798
}

src/locales/fr/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Cognac / Brandy"
9494
},
9595
"or": "Ou",
96-
"show-mocktails": "Afficher mocktails"
96+
"show-mocktails": "Afficher mocktails",
97+
"all-ingredients": "Tous les ingrédients"
9798
}

src/locales/it/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Cognac / Brandy"
9494
},
9595
"or": "O",
96-
"show-mocktails": "Mostra Mocktail"
96+
"show-mocktails": "Mostra Mocktail",
97+
"all-ingredients": "Tutti gli ingredienti"
9798
}

src/locales/nl/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Cognac / Brandewijn"
9494
},
9595
"or": "Of",
96-
"show-mocktails": "Laat mocktails zien"
96+
"show-mocktails": "Laat mocktails zien",
97+
"all-ingredients": "Alle ingrediënten"
9798
}

src/locales/sv/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"cognac-brandy": "Konjac / Brännvin"
9494
},
9595
"or": "eller",
96-
"show-mocktails": "Visa Mocktails"
96+
"show-mocktails": "Visa Mocktails",
97+
"all-ingredients": "Alla ingredienser"
9798
}

src/modules/cocktails/all-cocktails/all-cocktails.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ export class AllCocktails {
1818
private _filterDialogModel: CocktailFilterDialogModel = {
1919
categoryFilter: null,
2020
spiritFilter: null,
21-
favoriteFilter: null
21+
favoriteFilter: null,
22+
ingredientFilter: null
2223
};
2324

2425
constructor(
@@ -74,6 +75,13 @@ export class AllCocktails {
7475
filterCount++;
7576
}
7677

78+
if (this._filterDialogModel.ingredientFilter !== null) {
79+
cocktails = cocktails.filter(x =>
80+
x.ingredientGroups.some(y => y.ingredientId === this._filterDialogModel.ingredientFilter)
81+
);
82+
filterCount++;
83+
}
84+
7785
if (this._filterDialogModel.favoriteFilter !== null) {
7886
cocktails = cocktails.filter(x => x.isFavorite === true);
7987
filterCount++;

0 commit comments

Comments
 (0)