Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#11665 draft of new vaadin-style side menu #511

Draft
wants to merge 1 commit into
base: development
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@
},
"schematicCollections": [
"@angular-eslint/schematics"
]
],
"analytics": false
}
}
28,374 changes: 17,453 additions & 10,921 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions projects/api-proxy/.env
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PORT=4201
ANGULAR_ORIGIN=http://localhost:4200

# Connect Angular FE to any Sormas BE, ex locally using: http://sormas-docker-test.com/
API_SERVICE_URL=https://test-de2.sormas.netzlink.com/
API_SERVICE_URL=http://localhost:6080/

# When using a dev cert (ex for local BE) - set to true
IGNORE_CERT_VALIDATION=false
IGNORE_CERT_VALIDATION=true
2 changes: 1 addition & 1 deletion src/app/_common-components/menu/menu.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export const userRoutesConfig: RouteItem[] = [
];

@Component({
selector: 'app-menu',
selector: 'app-top-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.scss'],
animations: [
Expand Down
48 changes: 48 additions & 0 deletions src/app/_common-components/side-menu/side-menu.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<!-- TODO add logo -->

<mat-nav-list #mainMenu class="main-menu">
<ng-container *ngFor="let route of routeConfig">
<a
*ngIf="!useLegacyLink(route.legacyPath); else legacyLink"
mat-list-item
[routerLink]="[route.route]"
[ngClass]="[
route.selectedLink,
isSelectedLink(route.selectedLink) ? 'active' : ''
]"
>
<mat-icon class="material-icons-round">{{ route.icon }}</mat-icon>
<span>{{ route.label | translate }}</span>
</a>
<ng-template #legacyLink>
<a
mat-list-item
href="{{getLegacyLink(route.legacyPath)}}"
[ngClass]="[
route.selectedLink,
isSelectedLink(route.selectedLink) ? 'active' : ''
]"
>
<mat-icon class="material-icons-round">{{ route.icon }}</mat-icon>
<span>{{ route.label | translate }}</span>
</a>
</ng-template>
</ng-container>
</mat-nav-list>

<mat-nav-list #userMenu class="user-menu">
<a
*ngFor="let route of userRouteConfig"
mat-icon-button
[routerLink]="[route.route]"
[ngClass]="[
'button-user-menu',
route.selectedLink,
isSelectedLink(route.selectedLink) ? 'active' : ''
]"
>
<mat-icon class="material-icons-round">{{ route.icon }}</mat-icon>
</a>
</mat-nav-list>

<!-- TODO add logout -->
Empty file.
23 changes: 23 additions & 0 deletions src/app/_common-components/side-menu/side-menu.component.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';

import { SideMenuComponent } from './side-menu.component';

describe('SideMenuComponent', () => {
let component: SideMenuComponent;
let fixture: ComponentFixture<SideMenuComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ SideMenuComponent ]
})
.compileComponents();

fixture = TestBed.createComponent(SideMenuComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
73 changes: 73 additions & 0 deletions src/app/_common-components/side-menu/side-menu.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { Component, OnInit } from '@angular/core';
import {HelperService} from "../../_services/helper.service";

export interface RouteItem {
route: string;
legacyPath: string;
label: string;
selectedLink: string;
icon?: string;
}

export const routesConfig: RouteItem[] = [
{ route: '', legacyPath: 'dashboard', label: 'captions.mainMenuDashboard', selectedLink: 'dashboard', icon: 'analytics' },
{ route: 'tasks/list', legacyPath: 'tasks', label: 'captions.mainMenuTasks', selectedLink: 'tasks', icon: 'checklist' },
{ route: 'messages/list',legacyPath: 'messages', label: 'captions.mainMenuExternalMessages', selectedLink: 'messages', icon: 'all-inbox' },
{ route: 'msers/list', legacyPath: 'msers', label: 'captions.mainMenuAggregateReports', selectedLink: 'msers' },
{ route: 'persons/list',legacyPath: 'persons', label: 'captions.mainMenuPersons', selectedLink: 'persons', icon: 'person' },
{ route: 'cases/list', legacyPath: 'cases', label: 'captions.mainMenuCases', selectedLink: 'cases', icon: 'recent-patient' },
{ route: 'contacts/list', legacyPath: 'contacts', label: 'captions.mainMenuContacts', selectedLink: 'contacts', icon: 'handshake' },
{ route: 'events/list', legacyPath: 'events', label: 'captions.mainMenuEvents', selectedLink: 'events', icon: 'phone' },
{ route: 'samples/list',legacyPath: 'samples', label: 'captions.mainMenuSamples', selectedLink: 'samples' },
{ route: 'entries/list',legacyPath: 'entries', label: 'captions.mainMenuEntries', selectedLink: 'entries' },
{ route: 'immunizations/list',legacyPath: 'immunizations', label: 'captions.mainMenuImmunizations', selectedLink: 'immunizations' },
{ route: 'shares/list', legacyPath: 'shares', label: 'captions.mainMenuShareRequests', selectedLink: 'shares', icon: 'share' },
{ route: 'stats', legacyPath: 'stats', label: 'captions.mainMenuStatistics', selectedLink: 'stats', icon: 'grouped-bar-chart' },
{ route: 'users/list', legacyPath: 'users', label: 'captions.mainMenuUsers', selectedLink: 'users' },
{ route: 'reports/list', legacyPath: 'reports', label: 'captions.mainMenuReports', selectedLink: 'reports' },
{ route: 'configuration', legacyPath: 'configuration', label: 'captions.mainMenuConfiguration', selectedLink: 'configuration', icon: 'settings' },
{ route: 'about', legacyPath: 'about', label: 'captions.mainMenuAbout', selectedLink: 'about', icon: 'info' },
];

export const userRoutesConfig: RouteItem[] = [
{ route: 'user-profile', legacyPath: '', label: 'mainMenuMyProfile', selectedLink: 'user-profile', icon: 'account_circle', },
{ route: 'logout', legacyPath: '', label: 'logout', selectedLink: 'logout', icon: 'logout', },
];

@Component({
selector: 'app-menu',
templateUrl: './side-menu.component.html',
styleUrls: ['./side-menu.component.scss']
})
export class SideMenuComponent implements OnInit {

routeConfig: RouteItem[] = routesConfig;
userRouteConfig: RouteItem[] = userRoutesConfig;
selectedRoute = '';
legacyUrl: string;

constructor(private helperService: HelperService) {
this.legacyUrl = helperService.getLegacyUrl();
}

ngOnInit(): void {
}

isAvailable(feature: string, userRight: string) : boolean {
// todo match against features and user rights retrieved from rest-api when the component is started
return true;
}

isSelectedLink(link: string): boolean {
const currentRoute = this.selectedRoute === '/' ? '/dashboard' : this.selectedRoute;
return currentRoute.startsWith(`/${link}`);
}

getLegacyLink(legacyPath: string) : string {
return this.legacyUrl + legacyPath;
}

useLegacyLink(legacyPath: string) : boolean {
return this.legacyUrl.length > 0 && legacyPath.length > 0;
}
}
2 changes: 1 addition & 1 deletion src/app/_constants/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const POPULATION_IMPORT_MODAL_WIDTH = '720px';

export const SMALL_NOTIFICATION_MODAL_WIDTH = 335;

export const HEADER_HEIGHT = 68;
export const HEADER_HEIGHT = 0; // 68;
export const HEADING_TABS_HEIGHT = 108;

// sidebar panels
Expand Down
9 changes: 9 additions & 0 deletions src/app/_services/helper.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import {
export class HelperService {
private apiUrl: string;
private domainSubfolder: string;
private legacyUrl: string;

constructor(@Inject(LOCALE_ID) protected localeId: string) {}

Expand All @@ -47,6 +48,14 @@ export class HelperService {
return `/assets/img/${imageName}`;
}

setLegacyUrl(legacyUrl: string): void {
this.legacyUrl = legacyUrl;
}

getLegacyUrl(): string {
return this.legacyUrl;
}

getRange(start: number, end: number, step = 1): number[] {
const output = [];
for (let i = start; i <= end; i += step) {
Expand Down
8 changes: 4 additions & 4 deletions src/app/app.component.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div [dir]="direction" class="main-wrapper">
<app-menu></app-menu>
<router-outlet></router-outlet>
</div>
<mat-sidenav-container [dir]="direction" class="main-wrapper" autosize="true">
<mat-sidenav mode="side" opened><app-menu></app-menu></mat-sidenav>
<mat-sidenav-content><router-outlet></router-outlet></mat-sidenav-content>
</mat-sidenav-container>
2 changes: 1 addition & 1 deletion src/app/app.component.scss
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.main-wrapper {
height: 100%;
padding-top: 68px;
//padding-top: 68px;
}
6 changes: 4 additions & 2 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@ import { ApiInterceptor } from './_interceptors/ApiInterceptor';
import { NotFoundComponent } from './_common-components/not-found/not-found.component';
import { HelperService } from './_services/helper.service';
import { ErrorInterceptor } from './_interceptors/error.interceptor.service';
import { SideMenuComponent } from './_common-components/side-menu/side-menu.component';
import {MatIconModule} from "@angular/material/icon";

export function HttpLoaderFactory(http: HttpClient): any {
return new TranslateHttpLoader(http, 'assets/i18n/');
}

@NgModule({
declarations: [AppComponent, MenuComponent, NotFoundComponent],
declarations: [AppComponent, MenuComponent, NotFoundComponent, SideMenuComponent],
imports: [
BrowserModule,
AppRoutingModule,
Expand All @@ -43,7 +45,7 @@ export function HttpLoaderFactory(http: HttpClient): any {
deps: [HttpClient],
},
}),
DateFnsModule.forRoot(),
DateFnsModule.forRoot()
],
providers: [
{ provide: ENV, useFactory: getEnv },
Expand Down
1 change: 1 addition & 0 deletions src/app/shared/auth/init-auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export function initializeAuth(
helperService.setDomainFolder(result.domainSubfolder);
}
helperService.setApiUrl(result.apiUrl);
helperService.setLegacyUrl(result.legacyUrl);
return resolve(
authService.init({
config: {
Expand Down
5 changes: 3 additions & 2 deletions src/assets/environment.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"keycloakRealm": "SORMAS",
"keycloakClientId": "sormas-angular",
"keycloakUrl": "https://test-de2.sormas.netzlink.com/keycloak/auth/",
"keycloakUrl": "http://localhost:7080/keycloak",
"apiUrl": "http://localhost:4201/sormas-rest",
"domainSubfolder": "/"
"domainSubfolder": "/",
"legacyUrl": "http://localhost:6080/sormas-ui/"
}
5 changes: 3 additions & 2 deletions src/assets/environment.json.dist
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"keycloakRealm": "SORMAS",
"keycloakClientId": "sormas-angular",
"keycloakUrl": "https://test-de2.sormas.netzlink.com/keycloak/auth/",
"keycloakUrl": "https://localhost:7080/keycloak/",
"apiUrl": "http://localhost:4201/sormas-rest",
"domainSubfolder": "/sormas-ui/"
"domainSubfolder": "/sormas-angular/",
"legacyUrl": "http://localhost:6080/sormas-ui/"
}