aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts')
-rw-r--r--Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts43
1 files changed, 43 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts b/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts
new file mode 100644
index 00000000..ed1f2cbe
--- /dev/null
+++ b/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts
@@ -0,0 +1,43 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Observable, from } from 'rxjs';
+import { switchMap, map, filter } from 'rxjs/operators';
+
+import { TodoItem } from '../todo-item';
+
+export interface IssueResponseItem {
+ number: number;
+ title: string;
+ state: string;
+ html_url: string;
+ pull_request?: any;
+}
+
+export type IssueResponse = IssueResponseItem[];
+
+@Injectable({
+ providedIn: 'root'
+})
+export class TodoService {
+
+ readonly baseUrl = 'https://api.github.com/repos/crupest/Timeline';
+
+ constructor(private client: HttpClient) { }
+
+ getWorkItemList(): Observable<TodoItem> {
+ return this.client.get<IssueResponse>(`${this.baseUrl}/issues`, {
+ params: {
+ state: 'all'
+ }
+ }).pipe(
+ switchMap(result => from(result)),
+ filter(result => result.pull_request === undefined), // filter out pull requests.
+ map(result => <TodoItem>{
+ number: result.number,
+ title: result.title,
+ isClosed: result.state === 'closed',
+ detailUrl: result.html_url
+ })
+ );
+ }
+}