diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 37734db1..0bde6e48 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -22,6 +22,7 @@ import {
MatCheckboxModule,
MatListModule,
MatExpansionModule,
+ MatSortModule,
} from '@angular/material';
import { D3Service } from 'd3-ng2-service';
@@ -108,6 +109,7 @@ Raven
AppRoutingModule,
FormsModule,
BrowserAnimationsModule,
+ CdkTableModule,
MatButtonModule,
MatMenuModule,
MatCardModule,
@@ -123,7 +125,7 @@ Raven
MatCheckboxModule,
MatListModule,
MatExpansionModule,
- CdkTableModule,
+ MatSortModule,
CartographyModule,
HotkeyModule.forRoot(),
PersistenceModule,
diff --git a/src/app/projects/projects.component.html b/src/app/projects/projects.component.html
index 79aa2d02..1912625e 100644
--- a/src/app/projects/projects.component.html
+++ b/src/app/projects/projects.component.html
@@ -5,7 +5,7 @@
-
+
Name
diff --git a/src/app/projects/projects.component.ts b/src/app/projects/projects.component.ts
index 65386b75..e55d8a43 100644
--- a/src/app/projects/projects.component.ts
+++ b/src/app/projects/projects.component.ts
@@ -1,5 +1,6 @@
-import { Component, OnInit } from '@angular/core';
+import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, ParamMap } from '@angular/router';
+import { MatSort, MatSortable } from "@angular/material";
import { Project } from "../shared/models/project";
import { ProjectService } from "../shared/services/project.service";
@@ -9,6 +10,7 @@ import { BehaviorSubject } from "rxjs/BehaviorSubject";
import { DataSource } from "@angular/cdk/collections";
import { Observable } from "rxjs/Observable";
+
@Component({
selector: 'app-projects',
templateUrl: './projects.component.html',
@@ -20,13 +22,23 @@ export class ProjectsComponent implements OnInit {
dataSource: ProjectDataSource;
displayedColumns = ['name', 'actions'];
+ @ViewChild(MatSort) sort: MatSort;
+
constructor(private route: ActivatedRoute,
private serverService: ServerService,
private projectService: ProjectService) {
- this.dataSource = new ProjectDataSource(this.projectDatabase);
+
}
ngOnInit() {
+ this.sort.sort({
+ id: 'name',
+ start: 'asc'
+ }
+ );
+
+ this.dataSource = new ProjectDataSource(this.projectDatabase, this.sort);
+
this.route.paramMap
.switchMap((params: ParamMap) => {
const server_id = parseInt(params.get('server_id'), 10);
@@ -47,7 +59,6 @@ export class ProjectsComponent implements OnInit {
this.projectDatabase.remove(project);
});
}
-
}
@@ -72,13 +83,31 @@ export class ProjectDatabase {
}
export class ProjectDataSource extends DataSource {
- constructor(private projectDatabase: ProjectDatabase) {
+
+ constructor(private projectDatabase: ProjectDatabase, private sort: MatSort) {
super();
}
connect(): Observable {
- return Observable.merge(this.projectDatabase.dataChange).map(() => {
- return this.projectDatabase.data;
+ const displayDataChanges = [
+ this.projectDatabase.dataChange,
+ this.sort.sortChange,
+ ];
+
+ return Observable.merge(...displayDataChanges).map(() => {
+ if (!this.sort.active || this.sort.direction === '') {
+ return this.projectDatabase.data;
+ }
+
+ return this.projectDatabase.data.sort((a, b) => {
+ const propertyA = a[this.sort.active];
+ const propertyB = b[this.sort.active];
+
+ const valueA = isNaN(+propertyA) ? propertyA : +propertyA;
+ const valueB = isNaN(+propertyB) ? propertyB : +propertyB;
+
+ return (valueA < valueB ? -1 : 1) * (this.sort.direction === 'asc' ? 1 : -1);
+ });
});
}