diff options
author | 杨宇千 <crupest@outlook.com> | 2019-02-23 15:56:23 +0000 |
---|---|---|
committer | 杨宇千 <crupest@outlook.com> | 2019-02-23 15:56:23 +0000 |
commit | 83b91e17b2d8eb7d05c6a07a43fe94b3bec18a5e (patch) | |
tree | 9ac93290917681265cfdcbd4886add430f140db7 /Timeline/ClientApp/src/app/todo-list-page/todo-list.service.ts | |
parent | fe5838a966a314b72ecb4d992f86f5fce635a96f (diff) | |
parent | e4b394dcfd727fd02c34de88261c813fbe24776f (diff) | |
download | timeline-83b91e17b2d8eb7d05c6a07a43fe94b3bec18a5e.tar.gz timeline-83b91e17b2d8eb7d05c6a07a43fe94b3bec18a5e.tar.bz2 timeline-83b91e17b2d8eb7d05c6a07a43fe94b3bec18a5e.zip |
Merged PR 6: Add icon of todo list and redesign it.
Related work items: #1, #3
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 | 23 |
1 files changed, 20 insertions, 3 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 ed28bc59..17ded67b 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 @@ -24,12 +24,18 @@ export interface WorkItemResult { fields: { [name: string]: any }; } +export interface WorkItemTypeResult { + icon: { + url: string + }; +} export interface WorkItem { id: number; title: string; closed: boolean; detailUrl: string; + iconUrl: string; } @Injectable({ @@ -39,6 +45,7 @@ export class TodoListService { public static titleFieldName = 'System.Title'; public static stateFieldName = 'System.State'; + public static typeFieldName = 'System.WorkItemType'; constructor(private client: HttpClient) { } @@ -46,6 +53,14 @@ export class TodoListService { 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) + ); + } + getWorkItemList(): Observable<WorkItem[]> { return this.getAzureDevOpsAccessInfo().pipe( switchMap( @@ -61,12 +76,14 @@ export class TodoListService { }, { headers: headers }).pipe( switchMap(result => result.workItems), concatMap(result => this.client.get<WorkItemResult>(result.url, { headers: headers })), - map(result => <WorkItem>{ + 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}/` - }), + detailUrl: `${baseUrl}_workitems/edit/${result.id}/`, + iconUrl: iconResult + }))), toArray() ); } |