Skip to content

Commit ee08f9c

Browse files
author
Matthias Rütten
authored
Merge pull request #71 from codecentric/resolved-and-open-notes
show the open AND resolved user notes
2 parents 41a1e01 + 99b8173 commit ee08f9c

File tree

6 files changed

+48
-9
lines changed

6 files changed

+48
-9
lines changed

src/renderer/components/merge-requests/MergeRequestsPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const renderMergeRequest = (mergeRequest: MergeRequest) => {
1717
const time = moment(mergeRequest.updated_at).format('DD.MM. HH:mm')
1818
const assignee = mergeRequest.assignee ? ` — ${mergeRequest.assignee.name}` : ''
1919
const secondaryText = `${time} ${assignee}`
20+
const commentCount = mergeRequest.user_notes.all ? `${mergeRequest.user_notes.resolved}/${mergeRequest.user_notes.all}` : undefined
2021

2122
return (
2223
<MergeRequestItem
@@ -27,7 +28,7 @@ const renderMergeRequest = (mergeRequest: MergeRequest) => {
2728
stats={{
2829
downVotes: mergeRequest.downvotes,
2930
upVotes: mergeRequest.upvotes,
30-
commentCount: mergeRequest.user_notes_count,
31+
commentCount,
3132
pipelineStatus: mergeRequest.pipeline_status,
3233
}}
3334
onClick={openMergeRequest(mergeRequest.web_url)}

src/renderer/components/merge-requests/list/MergeRequestItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Stats } from './Stats'
77
interface MergeRequestItemStats {
88
upVotes: number
99
downVotes: number
10-
commentCount: number
10+
commentCount?: string
1111
pipelineStatus?: PipelineStatus
1212
}
1313

src/renderer/components/merge-requests/list/Stats.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { PipelineStatusIndicator } from './PipelineStatusIndicator'
1111
export interface StatsProps {
1212
upVotes: number
1313
downVotes: number
14-
commentCount: number
14+
commentCount?: string
1515
pipelineStatus?: PipelineStatus
1616
}
1717

@@ -21,7 +21,7 @@ export const Stats: React.FunctionComponent<StatsProps> = ({ upVotes, downVotes,
2121
{ count: downVotes, Icon: ThumbDownIcon },
2222
{ count: commentCount, Icon: CommentIcon },
2323
]
24-
.filter(({ count }) => count > 0)
24+
.filter(({ count }) => count)
2525
.map(({ count, Icon }) => (
2626
<>
2727
<Icon style={{ fontSize: '0.6rem', verticalAlign: 'middle' }} fontSize='small' />

src/renderer/hooks/merge-requests/loadData.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as request from 'superagent'
22

33
import { Config } from '../config'
4-
import { Group, GroupedMergeRequest, MergeRequest, MergeRequestWithProject, PipelineStatus, Project } from './types'
4+
import { Group, GroupedMergeRequest, MergeRequest, MergeRequestWithProject, Note, PipelineStatus, Project, UserNotesStatus } from './types'
55
import sleep from '../../util/sleep'
66

77
const projectCache: { [id: number]: Project } = {}
@@ -96,6 +96,7 @@ const loadMergeRequests = async (config: Config): Promise<MergeRequest[]> => {
9696
return {
9797
...mergeRequest,
9898
pipeline_status: await loadPipelineStatus(config, mergeRequest.project_id, mergeRequest.iid),
99+
user_notes: await loadUserNotes(config, mergeRequest.project_id, mergeRequest.iid),
99100
}
100101
}),
101102
)
@@ -104,6 +105,24 @@ const loadMergeRequests = async (config: Config): Promise<MergeRequest[]> => {
104105
)
105106
}
106107

108+
const loadUserNotes = async (config: Config, projectId: number, mergeRequestIid: number): Promise<UserNotesStatus> => {
109+
const apiUrl = `${config.url}/api/v4/projects/${projectId}/merge_requests/${mergeRequestIid}/notes`
110+
111+
const notes = await request
112+
.get(apiUrl)
113+
.set('Private-Token', config.token)
114+
.timeout(4000)
115+
.then(res => res.body as Note[])
116+
117+
const all = notes.filter(note => note.resolvable).length
118+
const resolved = notes.filter(note => note.resolved).length
119+
120+
return {
121+
all,
122+
resolved,
123+
}
124+
}
125+
107126
const loadPipelineStatus = async (config: Config, projectId: number, mergeRequestIid: number): Promise<PipelineStatus | undefined> => {
108127
const apiUrl = `${config.url}/api/v4/projects/${projectId}/merge_requests/${mergeRequestIid}/pipelines`
109128

src/renderer/hooks/merge-requests/testData.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ const users: User[] = [
88
id: 1,
99
name: 'Matthias',
1010
username: 'ruettenm',
11-
avatar_url: require('../../images/matthias.jpg'),
11+
avatar_url: require('../../images/matthias.jpg').default,
1212
},
1313
{
1414
id: 2,
1515
name: 'Julian',
1616
username: 'jukempff',
17-
avatar_url: require('../../images/julian.jpg'),
17+
avatar_url: require('../../images/julian.jpg').default,
1818
},
1919
]
2020

@@ -39,7 +39,10 @@ const createMr = (title: string, projectId: number): MergeRequest => {
3939
assignee: randomArrayEntry(users),
4040
source_project_id: projectId,
4141
work_in_progress: false,
42-
user_notes_count: randomArrayEntry([0, 0, 0, 0, 0, 1, 3, 5]),
42+
user_notes: {
43+
all: randomArrayEntry([3, 5]),
44+
resolved: randomArrayEntry([1, 2, 3]),
45+
},
4346
web_url: `https://www.google.de?q=mr-${mrId}`,
4447
pipeline_status: randomArrayEntry(['running', 'pending', 'success', 'failed']),
4548
}

src/renderer/hooks/merge-requests/types.d.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ export interface User {
1616

1717
export type PipelineStatus = 'running' | 'pending' | 'success' | 'failed'
1818

19+
export interface UserNotesStatus {
20+
all: number
21+
resolved: number
22+
}
23+
1924
export interface Group {
2025
id: number
2126
name: string
@@ -24,6 +29,17 @@ export interface Group {
2429
visibility: 'private' | 'internal' | 'public'
2530
}
2631

32+
export interface Note {
33+
id: number
34+
noteable_id: number
35+
noteable_iid: number
36+
type: null
37+
author: User
38+
resolvable: boolean
39+
resolved?: boolean
40+
resolved_by?: User
41+
}
42+
2743
export interface MergeRequest {
2844
id: number
2945
iid: number
@@ -40,8 +56,8 @@ export interface MergeRequest {
4056
assignee?: User
4157
source_project_id: number
4258
work_in_progress: boolean
43-
user_notes_count: number
4459
web_url: string
60+
user_notes: UserNotesStatus
4561
pipeline_status?: PipelineStatus
4662
}
4763

0 commit comments

Comments
 (0)