Skip to content

Commit 487bb14

Browse files
committed
Video-46-Show-Categories-In-Sidebar-Menu
1 parent b0f2c96 commit 487bb14

File tree

5 files changed

+113
-0
lines changed

5 files changed

+113
-0
lines changed

frontend/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<div class="overlay" id="message-overlay"></div>
2020
<div class="grid-container">
2121
<header id="header-container"></header>
22+
<aside id="aside-container"></aside>
2223
<main id="main-container"></main>
2324
<footer>
2425
All rights reserved @2020

frontend/src/components/Aside.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const Aside = {
2+
render: async () => {
3+
return `
4+
<div class="aside-header">
5+
<div>SHOP BY CATEGORY</div>
6+
<button class="aside-close-button" id="aside-close-button">x</button>
7+
</div>
8+
<div class="aside-body">
9+
<ul class="categories">
10+
<li>
11+
<a href="/#/?q=shirt"
12+
>Shirts
13+
<span><i class="fa fa-chevron-right"></i></span>
14+
</a>
15+
</li>
16+
<li>
17+
<a href="/#/?q=pant"
18+
>Pants
19+
<span><i class="fa fa-chevron-right"></i></span>
20+
</a>
21+
</li>
22+
</ul>
23+
</div>`;
24+
},
25+
after_render: async () => {
26+
document.getElementById('aside-container').classList.remove('open');
27+
document
28+
.getElementById('aside-close-button')
29+
.addEventListener('click', async () => {
30+
document.getElementById('aside-container').classList.remove('open');
31+
});
32+
},
33+
};
34+
35+
export default Aside;

frontend/src/components/Header.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ const Header = {
77
const { value } = parseRequestUrl();
88
return `
99
<div class="brand">
10+
<button id="aside-open-button">
11+
&#9776;
12+
</button>
1013
<a href="/#/">jsamazona</a>
1114
</div>
1215
<div class="search">
@@ -33,6 +36,12 @@ const Header = {
3336
const searchKeyword = document.getElementById('q').value;
3437
document.location.hash = `/?q=${searchKeyword}`;
3538
});
39+
40+
document
41+
.getElementById('aside-open-button')
42+
.addEventListener('click', async () => {
43+
document.getElementById('aside-container').classList.add('open');
44+
});
3645
},
3746
};
3847
export default Header;

frontend/src/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import DashboardScreen from './srceens/DashboardScreen';
1515
import ProductListScreen from './srceens/ProductListScreen';
1616
import ProductEditScreen from './srceens/ProductEditScreen';
1717
import OrderListScreen from './srceens/OrderListScreen';
18+
import Aside from './components/Aside';
1819

1920
const routes = {
2021
'/': HomeScreen,
@@ -45,6 +46,11 @@ const router = async () => {
4546
const header = document.getElementById('header-container');
4647
header.innerHTML = await Header.render();
4748
await Header.after_render();
49+
50+
const aside = document.getElementById('aside-container');
51+
aside.innerHTML = await Aside.render();
52+
await Aside.after_render();
53+
4854
const main = document.getElementById('main-container');
4955
main.innerHTML = await screen.render();
5056
if (screen.after_render) await screen.after_render();

frontend/style.css

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,3 +487,65 @@ form.search-form::after {
487487
clear: both;
488488
display: table;
489489
}
490+
491+
/* Aside */
492+
aside {
493+
position: fixed;
494+
width: 30rem;
495+
background-color: #ffffff;
496+
height: 100%;
497+
z-index: 1;
498+
transform: translateX(-30.1rem);
499+
transition: all 0.5s;
500+
border-right: 0.1rem #808080 solid;
501+
}
502+
aside.open {
503+
transform: translateX(0);
504+
}
505+
.aside-header {
506+
display: flex;
507+
justify-content: space-between;
508+
align-items: center;
509+
padding: 2rem 0.5rem 1rem 2rem;
510+
color: #808080;
511+
}
512+
513+
.aside-close-button {
514+
width: 3rem;
515+
height: 3rem;
516+
font-size: 2rem;
517+
cursor: pointer;
518+
padding: 0;
519+
}
520+
ul.categories {
521+
padding: 0;
522+
}
523+
.categories > li {
524+
list-style-type: none;
525+
}
526+
.categories > li > a {
527+
display: flex;
528+
padding: 1rem;
529+
padding-left: 2rem;
530+
justify-content: space-between;
531+
}
532+
.categories > li > a > span {
533+
font-size: 1.4rem;
534+
color: #808080;
535+
}
536+
.categories > li > a:hover span {
537+
color: #444444;
538+
}
539+
.categories > li > a:hover {
540+
background-color: #f0f0f0;
541+
color: #444444;
542+
}
543+
544+
.brand button {
545+
font-size: 3rem;
546+
padding: 0.5rem;
547+
background: none;
548+
border: none;
549+
color: #ffffff;
550+
cursor: pointer;
551+
}

0 commit comments

Comments
 (0)