diff --git a/src/material-examples/table-http/table-http-example.html b/src/material-examples/table-http/table-http-example.html
index d9c7ce4a79ce..cf87ce11d616 100644
--- a/src/material-examples/table-http/table-http-example.html
+++ b/src/material-examples/table-http/table-http-example.html
@@ -8,39 +8,44 @@
+ mdSort mdSortActive="created_at" mdSortDisableClear mdSortDirection="asc">
- Number
- {{row.number}}
+ #
+ {{ row.number }}
- Title
- {{row.title}}
+ Title
+ {{ row.title }}
- State
- {{row.state}}
+ State
+ {{ row.state }}
-
- Created
- {{row.created.toDateString()}}
+
+
+ Created
+
+ {{ row.created_at | date }}
+
-
\ No newline at end of file
+
diff --git a/src/material-examples/table-http/table-http-example.ts b/src/material-examples/table-http/table-http-example.ts
index b4ac594db38b..0c5b43d66537 100644
--- a/src/material-examples/table-http/table-http-example.ts
+++ b/src/material-examples/table-http/table-http-example.ts
@@ -1,56 +1,60 @@
-import {Component, ViewChild} from '@angular/core';
-import {Http, Response} from '@angular/http';
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {Http} from '@angular/http';
import {DataSource} from '@angular/cdk/table';
import {MdPaginator, MdSort} from '@angular/material';
import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/operator/first';
-import 'rxjs/add/operator/startWith';
-import 'rxjs/add/operator/catch';
-import 'rxjs/add/operator/switchMap';
import 'rxjs/add/observable/merge';
import 'rxjs/add/observable/of';
-import 'rxjs/add/observable/interval';
+import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/operator/switchMap';
@Component({
selector: 'table-http-example',
styleUrls: ['table-http-example.css'],
templateUrl: 'table-http-example.html',
})
-export class TableHttpExample {
- displayedColumns = ['created', 'state', 'number', 'title'];
+export class TableHttpExample implements OnInit {
+ displayedColumns = ['created_at', 'state', 'number', 'title'];
exampleDatabase: ExampleHttpDao | null;
dataSource: ExampleDataSource | null;
@ViewChild(MdPaginator) paginator: MdPaginator;
@ViewChild(MdSort) sort: MdSort;
- constructor(http: Http) {
- this.exampleDatabase = new ExampleHttpDao(http);
- }
+ constructor(private http: Http) {}
ngOnInit() {
- this.dataSource = new ExampleDataSource(this.exampleDatabase!,
- this.sort, this.paginator);
+ this.exampleDatabase = new ExampleHttpDao(this.http);
+ this.dataSource = new ExampleDataSource(
+ this.exampleDatabase!, this.paginator, this.sort);
}
}
+export interface GithubApi {
+ items: GithubIssue[];
+ total_count: number;
+}
+
export interface GithubIssue {
+ created_at: string;
number: string;
state: string;
title: string;
- created: Date;
}
/** An example database that the data source uses to retrieve data for the table. */
export class ExampleHttpDao {
constructor(private http: Http) {}
- getRepoIssues(sort: string, order: string, page: number): Observable {
+ getRepoIssues(sort: string, order: string, page: number): Observable {
const href = 'https://api.github.com/search/issues';
const requestUrl =
- `${href}?q=repo:angular/material2&sort=${sort}&order=${order}&page=${page + 1}`;
- return this.http.get(requestUrl);
+ `${href}?q=repo:angular/material2&sort=${sort}&order=${order}&page=${page + 1}`;
+
+ return this.http.get(requestUrl)
+ .map(response => response.json() as GithubApi);
}
}
@@ -63,67 +67,48 @@ export class ExampleHttpDao {
*/
export class ExampleDataSource extends DataSource {
// The number of issues returned by github matching the query.
- resultsLength: number = 0;
+ resultsLength = 0;
isLoadingResults: boolean;
isRateLimitReached: boolean;
- constructor(private _exampleDatabase: ExampleHttpDao,
- private _sort: MdSort,
- private _paginator: MdPaginator) {
+ constructor(private exampleDatabase: ExampleHttpDao,
+ private paginator: MdPaginator,
+ private sort: MdSort) {
super();
}
/** Connect function called by the table to retrieve one stream containing the data to render. */
connect(): Observable {
const displayDataChanges = [
- this._sort.mdSortChange,
- this._paginator.page,
+ this.sort.mdSortChange,
+ this.paginator.page
];
// If the user changes the sort order, reset back to the first page.
- this._sort.mdSortChange.subscribe(() => {
- this._paginator.pageIndex = 0;
- });
+ this.sort.mdSortChange.subscribe(() => this.paginator.pageIndex = 0);
return Observable.merge(...displayDataChanges)
- .startWith(null)
- .switchMap(() => {
- this.isLoadingResults = true;
- return this._exampleDatabase.getRepoIssues(
- this._sort.active, this._sort.direction, this._paginator.pageIndex);
- })
- .catch(() => {
- // Catch if the GitHub API has reached its rate limit. Return empty result.
- this.isRateLimitReached = true;
- return Observable.of(null);
- })
- .map(result => {
- // Flip flag to show that loading has finished.
- this.isLoadingResults = false;
- return result;
- })
- .map(result => {
- if (!result) { return []; }
-
- this.isRateLimitReached = false;
- this.resultsLength = result.json().total_count;
-
- return this.readGithubResult(result);
- });
-
-
+ .startWith(null)
+ .switchMap(() => {
+ this.isLoadingResults = true;
+ return this.exampleDatabase.getRepoIssues(
+ this.sort.active, this.sort.direction, this.paginator.pageIndex);
+ })
+ .map(data => {
+ // Flip flag to show that loading has finished.
+ this.isLoadingResults = false;
+ this.isRateLimitReached = false;
+ this.resultsLength = data.total_count;
+
+ return data.items;
+ })
+ .catch(() => {
+ this.isLoadingResults = false;
+ // Catch if the GitHub API has reached its rate limit. Return empty data.
+ this.isRateLimitReached = true;
+ return Observable.of(null);
+ });
}
disconnect() {}
-
- private readGithubResult(result: Response): GithubIssue[] {
- return result.json().items.map(issue => {
- return {
- number: issue.number,
- created: new Date(issue.created_at),
- state: issue.state,
- title: issue.title,
- };
- });
- }
}