diff options
author | 杨宇千 <crupest@outlook.com> | 2019-02-23 16:40:15 +0000 |
---|---|---|
committer | 杨宇千 <crupest@outlook.com> | 2019-02-23 16:40:15 +0000 |
commit | 5e3896fee6b0d376cb7c3f1927596a8ed00e40e4 (patch) | |
tree | 2c8bceaf67b0545ddb7fd5ee043e31a003f51e13 /Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts | |
parent | bb537be81802998820b9ee07d7d887d4bd5c0665 (diff) | |
parent | a28471352e577ebc03b47772a439d3a3eff005c6 (diff) | |
download | timeline-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.ts | 76 |
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() + ); + }) ); } } |