aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts
diff options
context:
space:
mode:
author杨宇千 <crupest@outlook.com>2019-02-23 16:40:15 +0000
committer杨宇千 <crupest@outlook.com>2019-02-23 16:40:15 +0000
commit5e3896fee6b0d376cb7c3f1927596a8ed00e40e4 (patch)
tree2c8bceaf67b0545ddb7fd5ee043e31a003f51e13 /Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts
parentbb537be81802998820b9ee07d7d887d4bd5c0665 (diff)
parenta28471352e577ebc03b47772a439d3a3eff005c6 (diff)
downloadtimeline-5e3896fee6b0d376cb7c3f1927596a8ed00e40e4.tar.gz
timeline-5e3896fee6b0d376cb7c3f1927596a8ed00e40e4.tar.bz2
timeline-5e3896fee6b0d376cb7c3f1927596a8ed00e40e4.zip
Merged PR 8: Fix 7 bug!
Fixed! Related work items: #7
Diffstat (limited to 'Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts')
-rw-r--r--Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts76
1 files changed, 43 insertions, 33 deletions
diff --git a/Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts b/Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts
index 17ded67b..af3617fe 100644
--- a/Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts
+++ b/Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts
@@ -26,14 +26,14 @@ export interface WorkItemResult {
export interface WorkItemTypeResult {
icon: {
- url: string
+ url: string;
};
}
export interface WorkItem {
id: number;
title: string;
- closed: boolean;
+ isCompleted: boolean;
detailUrl: string;
iconUrl: string;
}
@@ -42,52 +42,62 @@ export interface WorkItem {
providedIn: 'root'
})
export class TodoListService {
-
public static titleFieldName = 'System.Title';
public static stateFieldName = 'System.State';
public static typeFieldName = 'System.WorkItemType';
- constructor(private client: HttpClient) { }
+ constructor(private client: HttpClient) {}
private getAzureDevOpsAccessInfo(): Observable<AzureDevOpsAccessInfo> {
return this.client.get<AzureDevOpsAccessInfo>('/api/TodoPage/AzureDevOpsAccessInfo');
}
private getItemIconUrl(baseUrl: string, headers: HttpHeaders, type: string): Observable<string> {
- return this.client.get<WorkItemTypeResult>(`${baseUrl}_apis/wit/workitemtypes/${encodeURIComponent(type)}?api-version=5.0`, {
- headers: headers
- }).pipe(
- map(result => result.icon.url)
- );
+ return this.client
+ .get<WorkItemTypeResult>(`${baseUrl}_apis/wit/workitemtypes/${encodeURIComponent(type)}?api-version=5.0`, {
+ headers: headers
+ })
+ .pipe(map(result => result.icon.url));
}
getWorkItemList(): Observable<WorkItem[]> {
return this.getAzureDevOpsAccessInfo().pipe(
- switchMap(
- accessInfo => {
- const baseUrl = `https://dev.azure.com/${accessInfo.organization}/${accessInfo.project}/`;
- const headers = new HttpHeaders({
- 'Accept': 'application/json',
- 'Authorization': `Basic ${btoa(accessInfo.username + ':' + accessInfo.personalAccessToken)}`
- });
- return this.client.post<WiqlResult>(
- `${baseUrl}_apis/wit/wiql?api-version=5.0`, {
+ switchMap(accessInfo => {
+ const baseUrl = `https://dev.azure.com/${accessInfo.organization}/${accessInfo.project}/`;
+ const headers = new HttpHeaders({
+ Accept: 'application/json',
+ Authorization: `Basic ${btoa(accessInfo.username + ':' + accessInfo.personalAccessToken)}`
+ });
+ return this.client
+ .post<WiqlResult>(
+ `${baseUrl}_apis/wit/wiql?api-version=5.0`,
+ {
query: 'SELECT [System.Id] FROM workitems WHERE [System.TeamProject] = @project'
- }, { headers: headers }).pipe(
- switchMap(result => result.workItems),
- concatMap(result => this.client.get<WorkItemResult>(result.url, { headers: headers })),
- concatMap(result => this.getItemIconUrl(baseUrl, headers, result.fields[TodoListService.typeFieldName]).pipe(
- map(iconResult => <WorkItem>{
- id: result.id,
- title: <string>result.fields[TodoListService.titleFieldName],
- closed: ((<string>result.fields[TodoListService.stateFieldName]).toLowerCase() === 'closed'),
- detailUrl: `${baseUrl}_workitems/edit/${result.id}/`,
- iconUrl: iconResult
- }))),
- toArray()
- );
- }
- )
+ },
+ { headers: headers }
+ )
+ .pipe(
+ switchMap(result => result.workItems),
+ concatMap(result => this.client.get<WorkItemResult>(result.url, { headers: headers })),
+ concatMap(result =>
+ this.getItemIconUrl(baseUrl, headers, result.fields[TodoListService.typeFieldName]).pipe(
+ map(
+ iconResult =>
+ <WorkItem>{
+ id: result.id,
+ title: <string>result.fields[TodoListService.titleFieldName],
+ isCompleted: (function(stateErasedCase: string): Boolean {
+ return stateErasedCase === 'closed' || stateErasedCase === 'resolved';
+ })((result.fields[TodoListService.stateFieldName] as string).toLowerCase()),
+ detailUrl: `${baseUrl}_workitems/edit/${result.id}/`,
+ iconUrl: iconResult
+ }
+ )
+ )
+ ),
+ toArray()
+ );
+ })
);
}
}