Skip to content

Commit a24a6ac

Browse files
committed
restaurant menu logic.
restaurant menu items and filter buttons are displayed dynamically. the "Filter" buttons can filter restaurant menu items.
1 parent 2f2fe66 commit a24a6ac

File tree

5 files changed

+133
-27
lines changed

5 files changed

+133
-27
lines changed

blocks/restaurant-menu.css

Lines changed: 11 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

blocks/restaurant-menu.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

blocks/restaurant-menu.scss

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,14 @@
3131
.filter {
3232
&__buttons {
3333
display: flex;
34-
column-gap: 10px;
34+
flex-wrap: wrap;
35+
justify-content: center;
36+
gap: 10px;
3537
}
3638

3739
&__btn {
38-
font-size: 18px;
40+
text-transform: capitalize;
41+
font-size: .9rem;
3942
background-color: transparent;
4043
color: orangered;
4144
padding: 8px 16px;
@@ -54,7 +57,7 @@
5457
display: flex;
5558
gap: 10px;
5659
min-height: 150px;
57-
min-width: 550px;
60+
min-width: 500px;
5861

5962
&__image {
6063
position: relative;
@@ -98,6 +101,7 @@
98101
}
99102

100103
&__cost {
104+
font-style: italic;
101105
}
102106

103107
&__desc {
@@ -116,6 +120,9 @@
116120

117121
.item-menu {
118122
flex-direction: column;
123+
min-height: 30px;
124+
min-width: 100px;
125+
//padding-right: 15px;
119126

120127
&__image {
121128
padding: 0 0 50% 0;

pages/restaurant-menu.html

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ <h1 class="page-title">Restaurant Menu</h1>
1616
<div class="main__menu menu">
1717
<div class="menu__filter filter">
1818
<div class="filter__buttons">
19-
<button class="filter__btn">All</button>
20-
<button class="filter__btn">All</button>
21-
<button class="filter__btn">All</button>
19+
<button class="filter__btn" type="button"
20+
data-id="all">Button
21+
</button>
22+
2223
</div>
2324
</div>
25+
2426
<div class="menu__items">
2527

2628
<div class="menu__item item-menu">
@@ -38,10 +40,11 @@ <h1 class="page-title">Restaurant Menu</h1>
3840
</div>
3941
</div>
4042

41-
4243
</div>
44+
4345
</div>
44-
</div>
46+
47+
</div> <!-- /.container -->
4548
</main>
4649
</div>
4750
<script src="../scripts/restaurant-menu.js"></script>

scripts/restaurant-menu.js

Lines changed: 103 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,66 +9,154 @@ const restaurantMenu = [
99
},
1010
{
1111
id: 2,
12-
title: "diner double",
12+
name: "diner double",
1313
category: "lunch",
1414
cost: 13.99,
1515
image: '../images/restaurant-menu/item-2.jpeg',
1616
desc: `vaporware iPhone mumblecore selvage raw denim slow-carb leggings gochujang helvetica man braid jianbing. Marfa thundercats `,
1717
},
1818
{
1919
id: 3,
20-
title: "godzilla milkshake",
20+
name: "godzilla milkshake",
2121
category: "shakes",
2222
cost: 6.99,
2323
image: '../images/restaurant-menu/item-3.jpeg',
24-
desc: `ombucha chillwave fanny pack 3 wolf moon street art photo booth before they sold out organic viral.`,
24+
desc: `Ombucha chillwave fanny pack 3 wolf moon street art photo booth before they sold out organic viral.`,
2525
},
2626
{
2727
id: 4,
28-
title: "country delight",
28+
name: "country delight",
2929
category: "breakfast",
3030
cost: 20.99,
3131
image: '../images/restaurant-menu/item-4.jpeg',
3232
desc: `Shabby chic keffiyeh neutra snackwave pork belly shoreditch. Prism austin mlkshk truffaut, `,
3333
},
3434
{
3535
id: 5,
36-
title: "egg attack",
36+
name: "egg attack",
3737
category: "lunch",
3838
cost: 22.99,
3939
image: '../images/restaurant-menu/item-5.jpeg',
40-
desc: `franzen vegan pabst bicycle rights kickstarter pinterest meditation farm-to-table 90's pop-up `,
40+
desc: `Franzen vegan pabst bicycle rights kickstarter pinterest meditation farm-to-table 90's pop-up `,
4141
},
4242
{
4343
id: 6,
44-
title: "oreo dream",
44+
name: "oreo dream",
4545
category: "shakes",
4646
cost: 18.99,
4747
image: '../images/restaurant-menu/item-6.jpeg',
4848
desc: `Portland chicharrones ethical edison bulb, palo santo craft beer chia heirloom iPhone everyday`,
4949
},
5050
{
5151
id: 7,
52-
title: "bacon overflow",
52+
name: "bacon overflow",
5353
category: "breakfast",
5454
cost: 8.99,
5555
image: '../images/restaurant-menu/item-7.jpeg',
56-
desc: `carry jianbing normcore freegan. Viral single-origin coffee live-edge, pork belly cloud bread iceland put a bird `,
56+
desc: `Carry jianbing normcore freegan. Viral single-origin coffee live-edge, pork belly cloud bread iceland put a bird `,
5757
},
5858
{
5959
id: 8,
60-
title: "american classic",
60+
name: "american classic",
6161
category: "lunch",
6262
cost: 12.99,
6363
image: '../images/restaurant-menu/item-8.jpeg',
64-
desc: `on it tumblr kickstarter thundercats migas everyday carry squid palo santo leggings. Food truck truffaut `,
64+
desc: `On it tumblr kickstarter thundercats migas everyday carry squid palo santo leggings. Food truck truffaut `,
6565
},
6666
{
6767
id: 9,
68-
title: "quarantine buddy",
68+
name: "quarantine buddy",
6969
category: "shakes",
7070
cost: 16.99,
71-
image: '../images/restaurant-menu/item-9.jpeg',
72-
desc: `skateboard fam synth authentic semiotics. Live-edge lyft af, edison bulb yuccie crucifix microdosing.`,
71+
image: '../images/restaurant-menu/item-9.jpg',
72+
desc: `Skateboard fam synth authentic semiotics. Live-edge lyft af, edison bulb yuccie crucifix microdosing.`,
73+
},
74+
{
75+
id: 10,
76+
name: "Steak Dinner",
77+
category: "dinner",
78+
cost: 34.99,
79+
image: '../images/restaurant-menu/item-10.jpeg',
80+
desc: `Live-edge lyft af, edison bulb yuccie crucifix microdosing.`,
81+
}
82+
]
83+
84+
const menuItems = document.querySelector('.menu__items')
85+
const filterButtons = document.querySelector('.filter__buttons')
86+
87+
function displayMenuItem(menuItem) {
88+
let displayedMenu = menuItem.map( (item) => {
89+
return `<div class="menu__item item-menu">
90+
<div class="item-menu__image">
91+
<img src="${item.image}" alt="${item.name}">
92+
</div>
93+
<div class="item-menu__info">
94+
<div class="item-menu__head">
95+
<div class="item-menu__name">${item.name}</div>
96+
<div class="item-menu__cost">$${item.cost}</div>
97+
</div>
98+
<div class="item-menu__desc">${item.desc}</div>
99+
</div>
100+
</div>`
101+
})
102+
103+
displayedMenu = displayedMenu.join('')
104+
menuItems.innerHTML = displayedMenu
105+
}
106+
107+
function displayFilterButtons() {
108+
const categories = restaurantMenu.reduce( (values, item) => {
109+
if (!values.includes(item.category)) {
110+
values.push(item.category)
111+
}
112+
return values
113+
}, ['all'])
114+
115+
let categoryButtons = categories.map((category) => {
116+
return `<button class="filter__btn" type="button"
117+
data-id="${category}">${category}
118+
</button>`
119+
})
120+
121+
categoryButtons = categoryButtons.join('')
122+
filterButtons.innerHTML = categoryButtons
123+
}
124+
125+
window.addEventListener('DOMContentLoaded', () => {
126+
displayMenuItem(restaurantMenu)
127+
128+
displayFilterButtons()
129+
})
130+
131+
filterButtons.addEventListener('click', (e) => {
132+
if (e.target.closest('.filter__btn')) {
133+
const currentCategory = e.target.dataset.id
134+
135+
const filteredMenu = restaurantMenu.filter( menuItem => {
136+
if (menuItem.category === currentCategory) {
137+
return menuItem
138+
}
139+
})
140+
141+
if (currentCategory === 'all') {
142+
displayMenuItem(restaurantMenu)
143+
} else {
144+
displayMenuItem(filteredMenu)
145+
}
146+
73147
}
74-
]
148+
})
149+
150+
151+
152+
153+
154+
155+
156+
157+
158+
159+
160+
161+
162+

0 commit comments

Comments
 (0)