Skip to content

Commit a750582

Browse files
committed
feat(lib): added mode to sidenav and template navigation buttons + added pageChanged and done events
1 parent 5237ea8 commit a750582

File tree

3 files changed

+74
-21
lines changed

3 files changed

+74
-21
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<mat-sidenav-container>
2-
<mat-sidenav #start [mode]="'side'" opened="true"
2+
<mat-sidenav #sidenav [mode]="navMode" opened="true"
33
[fixedInViewport]="'false'" [fixedTopGap]="'false'" [fixedBottomGap]="'false'">
44

55
<mat-toolbar color="primary">
66
</mat-toolbar>
77

88
<mat-vertical-stepper [selectedIndex]="index" (selectionChange)="onStepSelectionChange($event)">
9-
<mat-step *ngFor="let page of pages;let i = index;">
9+
<mat-step *ngFor="let page of pages;let i = index;" [label]="page.pageOutlook.title">
1010
<ng-container [ngTemplateOutlet]="page.pageOutlook.content"></ng-container>
1111
</mat-step>
1212
</mat-vertical-stepper>
1313
</mat-sidenav>
1414

1515
<mat-sidenav-content>
1616
<mat-toolbar color="primary">
17-
<button mat-icon-button>
17+
<button mat-icon-button (click)="sidenav.toggle()">
1818
<mat-icon>menu</mat-icon>
1919
</button>
2020
ngx-material-pages
@@ -31,16 +31,24 @@
3131
</mat-tab-group>
3232

3333

34-
<div fxLayoutAlign="space-between" style="margin: 1rem">
35-
<button mat-fab color="primary" (click)="previous()">
34+
<div class="navigation-buttons">
35+
<button mat-fab color="primary" (click)="previous()" [disabled]="index == 0">
3636
<mat-icon>chevron_left</mat-icon>
3737
</button>
38-
<button mat-fab color="primary" (click)="next()">
39-
<mat-icon>chevron_right</mat-icon>
40-
</button>
38+
<div *ngIf="index == totalPages - 1;then finished else nextAvailable">
39+
</div>
40+
<ng-template #nextAvailable>
41+
<button mat-fab color="primary" (click)="next()">
42+
<mat-icon>chevron_right</mat-icon>
43+
</button>
44+
</ng-template>
45+
<ng-template #finished>
46+
<button mat-fab color="accent" (click)="done.next()">
47+
<mat-icon>done</mat-icon>
48+
</button>
49+
</ng-template>
4150
</div>
4251

43-
<!--<button mat-button (click)="start.toggle(undefined, 'mouse')">Toggle Start Side Sidenav</button>-->
4452
</div>
4553
</mat-sidenav-content>
4654
</mat-sidenav-container>
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
::ng-deep .mat-tab-label-container {
22
display: none !important;
33
}
4+
5+
.navigation-buttons {
6+
margin: 1rem;
7+
place-content: stretch space-between;
8+
align-items: stretch;
9+
flex-direction: row;
10+
box-sizing: border-box;
11+
display: flex;
12+
}

src/module/components/ngx-material-pages/ngx-material-pages.component.ts

+48-12
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,37 @@ import {
22
AfterContentInit,
33
ChangeDetectionStrategy,
44
Component,
5-
ContentChildren,
6-
forwardRef,
7-
OnInit,
8-
QueryList,
5+
ContentChildren, EventEmitter,
6+
forwardRef, HostListener,
7+
OnInit, Output,
8+
QueryList, ViewChild,
99
ViewEncapsulation
1010
} from '@angular/core';
1111
import {NgxMaterialPageLoaderComponent} from './ngx-material-page-loader/ngx-material-page-loader.component';
1212
import {StepperSelectionEvent} from '@angular/cdk/stepper';
13+
import {MatSidenav} from '@angular/material';
1314

1415
@Component({
1516
selector: 'ngx-material-pages',
1617
templateUrl: './ngx-material-pages.component.html',
17-
styleUrls: ['./ngx-material-pages.component.scss'],
18+
styleUrls: ['./ngx-material-pages.component.scss']
1819
})
1920
export class NgxMaterialPagesComponent implements OnInit, AfterContentInit {
2021

21-
@ContentChildren(NgxMaterialPageLoaderComponent) pages: QueryList<NgxMaterialPageLoaderComponent>;
22+
@ViewChild('sidenav')
23+
sidenav: MatSidenav;
24+
25+
@ContentChildren(NgxMaterialPageLoaderComponent)
26+
pages: QueryList<NgxMaterialPageLoaderComponent>;
27+
28+
@Output()
29+
done: EventEmitter<void> = new EventEmitter<void>();
30+
31+
@Output()
32+
pageChanged: EventEmitter<number> = new EventEmitter<number>();
33+
34+
// the mode of the sidenav
35+
navMode = 'side';
2236

2337
// current page
2438
index: number;
@@ -30,35 +44,57 @@ export class NgxMaterialPagesComponent implements OnInit, AfterContentInit {
3044
this.index = 0;
3145
}
3246

47+
private _initSidenavMode(): void {
48+
if (window.innerWidth < 768) {
49+
this.navMode = 'over';
50+
}
51+
}
52+
3353
ngOnInit() {
54+
this._initSidenavMode();
3455
}
3556

3657
ngAfterContentInit() {
37-
console.log('pagesOutlook', this.pages);
3858
this.totalPages = this.pages.length;
3959
}
4060

61+
@HostListener('window:resize', ['$event'])
62+
onResize(event: any) {
63+
if (event.target.innerWidth < 768) {
64+
this.navMode = 'over';
65+
this.sidenav.close();
66+
}
67+
if (event.target.innerWidth > 768) {
68+
this.navMode = 'side';
69+
this.sidenav.open();
70+
}
71+
}
72+
4173
/**
4274
* Go to the previous page if it exists
4375
*/
4476
previous() {
45-
console.log('index before', this.index);
4677
this.index = this.index === 0 ? 0 : --this.index;
47-
console.log('index after', this.index);
78+
this.pageChanged.emit(this.index);
4879
}
4980

5081
/**
5182
* Go to the next page if it exists
5283
*/
5384
next() {
54-
console.log('index before', this.index);
5585
this.index = this.index === this.totalPages - 1 ? this.totalPages - 1 : ++this.index;
56-
console.log('index after', this.index);
86+
this.pageChanged.emit(this.index);
5787
}
5888

89+
90+
/**
91+
* Update the value of the index when a step has been selected.
92+
* Emit this value for pagechanged's subscribers.
93+
*
94+
*/
5995
onStepSelectionChange(event: StepperSelectionEvent) {
60-
console.log('event = ', event);
6196
this.index = event.selectedIndex;
97+
this.pageChanged.emit(this.index);
6298
}
6399

64100
}

0 commit comments

Comments
 (0)