Add basic side panel toggle for stats
							parent
							
								
									612c894e6a
								
							
						
					
					
						commit
						3672bfe112
					
				| 
						 | 
				
			
			@ -148,6 +148,7 @@ users.route('/:id')
 | 
			
		|||
             res.locals.items = item;
 | 
			
		||||
           } else {
 | 
			
		||||
             err.status = codes.wrongrequest;
 | 
			
		||||
             console.log(err);
 | 
			
		||||
             err.message += ' in fields: ' + Object.getOwnPropertyNames(err.errors);
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@
 | 
			
		|||
            <a [routerLink]="[config.publicPath,{outlets:{right:'ranks'}}]" class="link">Ränge</a>
 | 
			
		||||
          </li>
 | 
			
		||||
          <!--<li routerLinkActive="active">-->
 | 
			
		||||
            <!--<a [routerLink]="[config.publicPath,{outlets:{right:'decorations'}}]" class="link">Auszeichnungen</a>-->
 | 
			
		||||
          <!--<a [routerLink]="[config.publicPath,{outlets:{right:'decorations'}}]" class="link">Auszeichnungen</a>-->
 | 
			
		||||
          <!--</li>-->
 | 
			
		||||
          <li routerLinkActive="active">
 | 
			
		||||
            <a routerLink='{{config.statsPath}}' class="link">Statistiken</a>
 | 
			
		||||
| 
						 | 
				
			
			@ -92,20 +92,32 @@
 | 
			
		|||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </nav>
 | 
			
		||||
 | 
			
		||||
  <button (click)="scrollToTop()" *ngIf="scrollTopVisible" id="scrollTopBtn" title="Zum Seitenanfang">△</button>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div>
 | 
			
		||||
  <mat-spinner class="load-indicator" *ngIf="loading"></mat-spinner>
 | 
			
		||||
  <div id="left">
 | 
			
		||||
  <button mat-icon-button
 | 
			
		||||
          (click)="toggleSidebar()"
 | 
			
		||||
          *ngIf="router.url.includes('/stats')"
 | 
			
		||||
          style="background: linear-gradient(-90deg, #dadada,transparent);">
 | 
			
		||||
    <mat-icon svgIcon="chevron-left" *ngIf="sidebarOpen">
 | 
			
		||||
    </mat-icon>
 | 
			
		||||
    <mat-icon svgIcon="chevron-right" *ngIf="!sidebarOpen">
 | 
			
		||||
    </mat-icon>
 | 
			
		||||
  </button>
 | 
			
		||||
 | 
			
		||||
  <div id="left" *ngIf="sidebarOpen">
 | 
			
		||||
    <router-outlet></router-outlet>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div id="right">
 | 
			
		||||
    <router-outlet name="right"></router-outlet>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div id="footer">
 | 
			
		||||
    <router-outlet name="footer"></router-outlet>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<mat-spinner class="load-indicator" *ngIf="loading"></mat-spinner>
 | 
			
		||||
 | 
			
		||||
<button (click)="scrollToTop()" *ngIf="scrollTopVisible" id="scrollTopBtn" title="Zum Seitenanfang">△</button>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,8 @@ export class AppComponent implements OnInit {
 | 
			
		|||
 | 
			
		||||
  loading = false;
 | 
			
		||||
 | 
			
		||||
  sidebarOpen = true;
 | 
			
		||||
 | 
			
		||||
  scrollTopVisible = false;
 | 
			
		||||
 | 
			
		||||
  scrollBtnVisibleVal = 100;
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +46,10 @@ export class AppComponent implements OnInit {
 | 
			
		|||
      sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/twotone-delete-24px.svg'));
 | 
			
		||||
    this.iconRegistry.addSvgIcon('stats-detail',
 | 
			
		||||
      sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/round-assessment-24px.svg'));
 | 
			
		||||
    this.iconRegistry.addSvgIcon('chevron-left',
 | 
			
		||||
      sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/baseline-chevron_left-24px.svg'));
 | 
			
		||||
    this.iconRegistry.addSvgIcon('chevron-right',
 | 
			
		||||
      sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/baseline-chevron_right-24px.svg'));
 | 
			
		||||
 | 
			
		||||
    router.events.subscribe(event => {
 | 
			
		||||
      if (event instanceof NavigationStart) {
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +71,9 @@ export class AppComponent implements OnInit {
 | 
			
		|||
      || document.documentElement.scrollTop > this.scrollBtnVisibleVal;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  toggleSidebar() {
 | 
			
		||||
    this.sidebarOpen = !this.sidebarOpen;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
    if (this.loginService.hasPermission(2)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,54 +2,19 @@
 | 
			
		|||
 * Angular material imports
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import { NgModule } from '@angular/core';
 | 
			
		||||
import {
 | 
			
		||||
  MatSidenavModule,
 | 
			
		||||
  MatFormFieldModule,
 | 
			
		||||
  MatInputModule,
 | 
			
		||||
  MatButtonModule,
 | 
			
		||||
  MatCheckboxModule,
 | 
			
		||||
  MatTableModule,
 | 
			
		||||
  MatPaginatorModule,
 | 
			
		||||
  MatSortModule,
 | 
			
		||||
  MatIconModule,
 | 
			
		||||
  MatSnackBarModule,
 | 
			
		||||
  MatToolbarModule,
 | 
			
		||||
  MatExpansionModule,
 | 
			
		||||
  MatProgressSpinnerModule
 | 
			
		||||
} from '@angular/material';
 | 
			
		||||
import {NgModule} from '@angular/core';
 | 
			
		||||
import {MatProgressSpinnerModule, MatSnackBarModule} from '@angular/material';
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  imports: [
 | 
			
		||||
    // MatSidenavModule,
 | 
			
		||||
    // MatFormFieldModule,
 | 
			
		||||
    // MatInputModule,
 | 
			
		||||
    // MatButtonModule,
 | 
			
		||||
    // MatCheckboxModule,
 | 
			
		||||
    // MatTableModule,
 | 
			
		||||
    // MatPaginatorModule,
 | 
			
		||||
    // MatSortModule,
 | 
			
		||||
    // MatIconModule,
 | 
			
		||||
    MatSnackBarModule,
 | 
			
		||||
    MatProgressSpinnerModule,
 | 
			
		||||
    // MatToolbarModule,
 | 
			
		||||
    // MatExpansionModule
 | 
			
		||||
  ],
 | 
			
		||||
  exports: [
 | 
			
		||||
    // MatSidenavModule,
 | 
			
		||||
    // MatFormFieldModule,
 | 
			
		||||
    // MatInputModule,
 | 
			
		||||
    // MatButtonModule,
 | 
			
		||||
    // MatCheckboxModule,
 | 
			
		||||
    // MatTableModule,
 | 
			
		||||
    // MatPaginatorModule,
 | 
			
		||||
    // MatSortModule,
 | 
			
		||||
    // MatIconModule,
 | 
			
		||||
    MatSnackBarModule,
 | 
			
		||||
    MatProgressSpinnerModule,
 | 
			
		||||
    // MatToolbarModule,
 | 
			
		||||
    // MatExpansionModule
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
export class MaterialComponentsModule {}
 | 
			
		||||
export class MaterialComponentsModule {
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.load-indicator {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 50%;
 | 
			
		||||
  z-index: 1;
 | 
			
		||||
  z-index: 10000;
 | 
			
		||||
}
 | 
			
		||||
@media only screen and (max-width: 1199px) {
 | 
			
		||||
  .load-indicator {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,14 +106,14 @@ export class EditUserComponent implements OnInit {
 | 
			
		|||
      this.userService.submitUser(updateObject)
 | 
			
		||||
          .subscribe(user => {
 | 
			
		||||
              this.router.navigate(['..'], {relativeTo: this.route});
 | 
			
		||||
              this.snackBarService.showSuccess(Message.SUCCESS_SAVE);
 | 
			
		||||
              return true;
 | 
			
		||||
            },
 | 
			
		||||
            error => {
 | 
			
		||||
              // duplicated user error message
 | 
			
		||||
              if (error._body.includes('duplicate')) {
 | 
			
		||||
                this.snackBarService.showError(Message.DUPLICATED_NAME_ERR, 10000);
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
              const errorMessage = error._body.includes('duplicate') ? Message.DUPLICATED_NAME_ERR : error._body;
 | 
			
		||||
              this.snackBarService.showError(errorMessage, 10000);
 | 
			
		||||
            })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
 | 
			
		||||
    <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 195 B  | 
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
 | 
			
		||||
    <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 196 B  | 
| 
						 | 
				
			
			@ -45,7 +45,7 @@ form {
 | 
			
		|||
  min-width: 350px;
 | 
			
		||||
  max-width: 450px;
 | 
			
		||||
  float: left;
 | 
			
		||||
  background: #ececec;
 | 
			
		||||
  background: #f9f9f9;
 | 
			
		||||
  box-shadow: 2px 1px 5px grey;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -69,13 +69,13 @@ form {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
.custom-snack-bar > simple-snack-bar {
 | 
			
		||||
  display: block;
 | 
			
		||||
  display: flex;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.snack-bar-button button {
 | 
			
		||||
  color: white;
 | 
			
		||||
  border: 2px solid;
 | 
			
		||||
  padding: 3px 10px;
 | 
			
		||||
  color: #ffffff;
 | 
			
		||||
  border: 1px solid;
 | 
			
		||||
  margin-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Icon theme */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue