Skip to content

Commit 47edd92

Browse files
committed
feat: Refactor routing and layout components for improved navigation and structure
1 parent 6bbbfee commit 47edd92

10 files changed

Lines changed: 388 additions & 130 deletions

File tree

frontend/src/app/app.routes.ts

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Routes } from '@angular/router';
22

3-
import { HomeComponent } from './components/home-component/home-component';
43
import { LoginComponent } from './components/welcome-layout/login-component/login-component';
54
import { RegisterComponent } from './components/welcome-layout/register-component/register-component';
65
import { authenticateGuard } from './guards/authenticate-guard';
@@ -9,20 +8,56 @@ import { SettingsComponent } from './components/settings-component/settings-comp
98
import { ImportWizardComponent } from './components/import/import-wizard-component/import-wizard-component';
109
import { MonthlyComparisonComponent } from './components/analytics/monthly-comparison-component/monthly-comparison-component';
1110
import { TrackingComponent } from './components/tracking/tracking/tracking.component';
11+
import { DashboardComponent } from './components/dashboard-component/dashboard-component.component';
12+
import { HomeLayoutComponent } from './layouts/home-layout/home-layout.component';
13+
import { MovementsLayoutComponent } from './layouts/movements-layout/movements-layout.component';
14+
import { AnalyticsLayoutComponent } from './layouts/analytics-layout/analytics-layout.component';
1215

1316
export const routes: Routes = [
1417
{ path: '', redirectTo: 'login', pathMatch: 'full' },
15-
{ path: 'login', component: LoginComponent },
16-
{ path: 'register', component: RegisterComponent },
17-
{ path: 'home', component: HomeComponent, canActivate: [authenticateGuard] },
18-
{ path: 'movements', component: TrackingComponent, canActivate: [authenticateGuard] },
19-
{ path: 'balance', component: BalanceComponent, canActivate: [authenticateGuard] },
20-
{ path: 'settings', component: SettingsComponent, canActivate: [authenticateGuard] },
21-
{ path: 'import', component: ImportWizardComponent, canActivate: [authenticateGuard] },
18+
{ path: 'login', component: LoginComponent, data: { breadcrumb: 'Login' } },
19+
{ path: 'register', component: RegisterComponent, data: { breadcrumb: 'Register' } },
2220
{
23-
path: 'analytics/monthly-comparison',
24-
component: MonthlyComparisonComponent,
21+
path: 'home',
22+
component: HomeLayoutComponent,
2523
canActivate: [authenticateGuard],
24+
data: { breadcrumb: 'Home' },
25+
children: [
26+
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
27+
{ path: 'dashboard', component: DashboardComponent, data: { breadcrumb: 'Dashboard' } },
28+
{ path: 'balance', component: BalanceComponent, data: { breadcrumb: 'Balance' } },
29+
],
30+
},
31+
{
32+
path: 'movements',
33+
component: MovementsLayoutComponent,
34+
canActivate: [authenticateGuard],
35+
data: { breadcrumb: 'Movements' },
36+
children: [
37+
{ path: '', redirectTo: 'tracking', pathMatch: 'full' },
38+
{ path: 'tracking', component: TrackingComponent, data: { breadcrumb: 'Tracking' } },
39+
{ path: 'import', component: ImportWizardComponent, data: { breadcrumb: 'Import' } },
40+
],
41+
},
42+
{
43+
path: 'analytics',
44+
component: AnalyticsLayoutComponent,
45+
canActivate: [authenticateGuard],
46+
data: { breadcrumb: 'Analytics' },
47+
children: [
48+
{ path: '', redirectTo: 'monthly-comparison', pathMatch: 'full' },
49+
{
50+
path: 'monthly-comparison',
51+
component: MonthlyComparisonComponent,
52+
data: { breadcrumb: 'Monthly Comparison' },
53+
},
54+
],
55+
},
56+
{
57+
path: 'settings',
58+
component: SettingsComponent,
59+
canActivate: [authenticateGuard],
60+
data: { breadcrumb: 'Settings' },
2661
},
2762
{ path: '**', redirectTo: 'login' },
2863
];

frontend/src/app/components/side-nav-component/side-nav-component.css

Lines changed: 93 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,66 +7,126 @@
77
height: 100%;
88
}
99

10-
.mat-list {
11-
align-items: center;
12-
}
13-
1410
.sidenav {
15-
width: 13dvw;
16-
background-color: var(--mat-sys-surface-container);
17-
color: var(--mat-sys-on-surface);
11+
width: 280px;
1812
border-right: 1px solid var(--mat-sys-outline-variant);
1913
}
2014

2115
.sidenav-header {
16+
position: sticky;
17+
top: 0;
18+
z-index: 2;
19+
background-color: var(--mat-sys-surface);
20+
border-bottom: 1px solid var(--mat-sys-outline-variant);
21+
min-height: 64px;
22+
padding: 0 8px;
23+
}
24+
25+
.app-title {
26+
font-size: 20px;
27+
font-weight: 500;
28+
margin-left: 8px;
29+
}
30+
31+
.sidenav-content {
32+
display: flex;
33+
flex-direction: column;
34+
height: calc(100% - 64px);
35+
}
36+
37+
nav {
38+
flex: 1;
39+
overflow-y: auto;
40+
}
41+
42+
.nav-accordion {
43+
display: block;
44+
}
45+
46+
.nav-panel {
47+
box-shadow: none !important;
48+
border-radius: 0 !important;
49+
}
50+
51+
.nav-panel .mat-expansion-panel-header {
52+
padding: 0 16px;
53+
height: 48px;
54+
}
55+
56+
.nav-panel .mat-expansion-panel-body {
57+
padding: 0;
58+
}
59+
60+
.panel-title {
2261
display: flex;
2362
align-items: center;
24-
gap: 8px;
25-
padding: 12px 16px;
26-
color: var(--mat-sys-on-surface);
63+
gap: 12px;
2764
}
2865

29-
.app-title {
30-
font-weight: 600;
31-
letter-spacing: 0.2px;
66+
.panel-icon {
67+
font-size: 24px;
68+
width: 24px;
69+
height: 24px;
3270
}
3371

34-
.nav-item {
35-
color: var(--mat-sys-on-surface);
72+
mat-nav-list {
73+
padding: 0;
3674
}
3775

38-
.nav-item [matListItemLine] {
39-
color: var(--mat-sys-on-surface-variant);
76+
mat-nav-list a[mat-list-item] {
77+
height: 40px;
4078
}
4179

42-
.nav-item[aria-current='page'],
43-
.nav-item.active {
80+
.active-link {
4481
background-color: var(--mat-sys-secondary-container);
4582
color: var(--mat-sys-on-secondary-container);
4683
}
4784

48-
.nav-item[aria-current='page'] [matListItemLine],
49-
.nav-item.active [matListItemLine] {
85+
.active-link mat-icon {
5086
color: var(--mat-sys-on-secondary-container);
51-
opacity: 0.9;
5287
}
5388

54-
.nav-item:hover {
55-
background-color: var(--mat-sys-surface-container-high);
89+
mat-divider {
90+
margin: 8px 0;
5691
}
5792

58-
.nav-item:focus-visible {
59-
outline: 2px solid var(--mat-sys-outline);
60-
outline-offset: -2px;
93+
.account-actions {
94+
padding: 8px 0;
6195
}
6296

63-
.content {
64-
padding: 16px;
97+
.account-actions a[mat-list-item] {
98+
cursor: pointer;
99+
padding: 0 16px;
100+
}
101+
102+
.sidenav-main-content {
103+
display: flex;
104+
flex-direction: column;
65105
height: 100%;
66-
overflow: auto;
67-
box-sizing: border-box;
68106
}
69107

70-
.mat-mdc-list-base {
71-
width: 100%;
108+
.mobile-toolbar {
109+
position: sticky;
110+
top: 0;
111+
z-index: 1;
112+
background-color: var(--mat-sys-surface);
113+
border-bottom: 1px solid var(--mat-sys-outline-variant);
114+
}
115+
116+
.content-wrapper {
117+
padding: 16px;
118+
flex: 1;
119+
overflow-y: auto;
120+
}
121+
122+
.breadcrumb {
123+
margin-bottom: 8px;
124+
}
125+
126+
.breadcrumb.closed {
127+
margin-left: 0;
128+
}
129+
130+
.breadcrumb.open {
131+
margin-bottom: 16px;
72132
}

0 commit comments

Comments
 (0)