-
-
-
-
- {{subCategory.name}}
-
-
-
+
+
diff --git a/frontend/src/app/components/side-menu/side-menu.component.scss b/frontend/src/app/components/side-menu/side-menu.component.scss
index e713008..9641141 100644
--- a/frontend/src/app/components/side-menu/side-menu.component.scss
+++ b/frontend/src/app/components/side-menu/side-menu.component.scss
@@ -1,52 +1,83 @@
:host {
- display: flex;
- flex-direction: column;
-
- .categories-container {
+ .menu {
display: flex;
flex-direction: column;
+ background-color: #3f51b5;
+ color: white;
- .category {
- border: 1px solid blue;
+ $categoriesMenuWidth: 20em;
+ position: fixed;
+ top: 0;
+ left: -$categoriesMenuWidth - 1em - 1;
+ bottom: 0;
+ transition: left .2s ease-in-out;
+ width: $categoriesMenuWidth;
+ z-index: 2;
+ padding: 1em 0;
- &:hover {
- cursor: pointer;
- }
+ &.displayed {
+ left: 0;
+ }
- .category-header {
+ h1 {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 1em;
+
+ span {
display: flex;
flex-direction: row;
- justify-content: space-between;
+ justify-content: start;
align-items: center;
- padding: .5em 1em;
+ gap: .5em;
- mat-icon {
- transition: transform .2s ease-in-out;
+ img {
+ $imageSize: 1.2em;
+ width: $imageSize;
+ height: $imageSize;
}
}
- &.openned {
- .category-header {
- mat-icon {
- transform: rotate(90deg);
- }
- }
+ button {
+ border-radius: 10em;
+ border: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 2.5em;
+ height: 2.5em;
+ color: white;
+ background-color: #3f51b5;
+ transition: background-color .2s ease-in-out;
- .sub-category-container {
- max-height: none;
- }
- }
-
- .sub-category-container {
- border: 1px solid red;
- overflow: hidden;
- max-height: 0;
- transition: max-height .2s ease-in-out;
-
- .sub-category {
- padding: .5em 1em .5em 2em;
+ &:hover {
+ cursor: pointer;
+ background-color: #5c6bc0;
}
}
}
+
+ h2 {
+ padding: 0 1em;
+ }
}
-}
\ No newline at end of file
+
+ .overlay {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #000;
+ opacity: .2;
+
+ &.displayed {
+ display: block;
+ }
+ }
+}
diff --git a/frontend/src/app/components/side-menu/side-menu.component.ts b/frontend/src/app/components/side-menu/side-menu.component.ts
index fb283c1..7e710c9 100644
--- a/frontend/src/app/components/side-menu/side-menu.component.ts
+++ b/frontend/src/app/components/side-menu/side-menu.component.ts
@@ -1,51 +1,23 @@
-import { CommonModule } from '@angular/common';
-import { Component, inject } from '@angular/core';
-import { MatIconModule } from '@angular/material/icon';
-import { DisplayableCategory, SideMenuService } from './side-menu.service';
-import { Observable } from 'rxjs';
+import {Component} from '@angular/core';
+import {MatIconModule} from '@angular/material/icon';
+import {CategoriesMenuComponent} from './categories-menu/categories-menu.component';
+import {MatTooltipModule} from '@angular/material/tooltip';
@Component({
selector: 'app-side-menu',
standalone: true,
- imports: [CommonModule, MatIconModule],
+ imports: [CategoriesMenuComponent, MatIconModule, MatTooltipModule],
templateUrl: './side-menu.component.html',
styleUrl: './side-menu.component.scss'
})
export class SideMenuComponent {
- private sideMenuService = inject(SideMenuService);
+ isOpenned: boolean = false;
- get categories$(): Observable
{
- return this.sideMenuService.categories$;
+ open(): void {
+ this.isOpenned = true;
}
- setOpenned(category: DisplayableCategory): void {
- if (category.isOpenned) {
- const categoryDiv = document.getElementById(`category-${category.id}`);
- if (categoryDiv) {
- this.closeAccordion(categoryDiv);
- }
- } else {
- const categoriesDivs = document.getElementsByClassName('category-header');
- Array.from(categoriesDivs)
- .map(category => category as HTMLElement)
- .forEach(categoryDiv => this.closeAccordion(categoryDiv));
-
- const categoryDiv = document.getElementById(`category-${category.id}`);
- if (categoryDiv) {
- this.openAccordion(categoryDiv);
- }
- }
-
- this.sideMenuService.setOpenned(category);
- }
-
- private closeAccordion(categoryDiv: HTMLElement): void {
- const divContent = categoryDiv?.nextElementSibling as HTMLElement;
- divContent.style.maxHeight = '0';
- }
-
- private openAccordion(categoryDiv: HTMLElement): void {
- const divContent = categoryDiv?.nextElementSibling as HTMLElement;
- divContent.style.maxHeight = `${divContent.scrollHeight}px`;
+ close(): void {
+ this.isOpenned = false;
}
}
diff --git a/frontend/src/app/pages/home/home.component.html b/frontend/src/app/pages/home/home.component.html
index cdaa426..26e0443 100644
--- a/frontend/src/app/pages/home/home.component.html
+++ b/frontend/src/app/pages/home/home.component.html
@@ -1,2 +1 @@
Welcome to Codiki application!
-
\ No newline at end of file
diff --git a/frontend/src/app/pages/home/home.component.ts b/frontend/src/app/pages/home/home.component.ts
index 46417d8..deb69c4 100644
--- a/frontend/src/app/pages/home/home.component.ts
+++ b/frontend/src/app/pages/home/home.component.ts
@@ -1,10 +1,9 @@
import { Component } from '@angular/core';
-import { SideMenuComponent } from '../../components/side-menu/side-menu.component';
@Component({
selector: 'app-home',
standalone: true,
- imports: [SideMenuComponent],
+ imports: [],
templateUrl: './home.component.html',
styleUrl: './home.component.scss'
})