Skip to content

Commit 9764978

Browse files
committed
feat: project member list.
1 parent 20c4ef6 commit 9764978

File tree

12 files changed

+95
-20
lines changed

12 files changed

+95
-20
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "coding-plugin",
33
"description": "Coding plugin for VS Code.",
44
"version": "1.0.0",
5-
"publisher": "alcheung",
5+
"publisher": "coding",
66
"license": "MIT",
77
"engines": {
88
"vscode": "^1.47.0"

src/codingServer.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
ICreateMRBody,
1515
ICreateMRResp,
1616
IBranchListResp,
17+
IMemberListResp,
1718
} from 'src/typings/respResult';
1819
import { PromiseAdapter, promiseFromEvent, parseQuery, parseCloneUrl } from 'src/common/utils';
1920
import { GitService } from 'src/common/gitService';
@@ -25,7 +26,7 @@ const AUTH_SERVER = `https://x5p7m.csb.app`;
2526
const ClientId = `ff768664c96d04235b1cc4af1e3b37a8`;
2627
const ClientSecret = `d29ebb32cab8b5f0a643b5da7dcad8d1469312c7`;
2728

28-
export const ScopeList = [`user`, `user:email`, `project`, `project:depot`];
29+
export const ScopeList = [`user`, `user:email`, `project`, `project:depot`, `project:members`];
2930
const SCOPES = ScopeList.join(`,`);
3031
const NETWORK_ERROR = 'network error';
3132

@@ -591,6 +592,28 @@ export class CodingServer {
591592
}
592593
}
593594

595+
public async getProjectMembers() {
596+
try {
597+
const { projectApiPrefix } = await this.getApiPrefix();
598+
const resp: IMemberListResp = await got
599+
.get(`${projectApiPrefix}/members`, {
600+
searchParams: {
601+
pageSize: 9999,
602+
access_token: this._session?.accessToken,
603+
},
604+
})
605+
.json();
606+
607+
if (resp.code) {
608+
return Promise.reject(resp);
609+
}
610+
611+
return resp;
612+
} catch (err) {
613+
return Promise.reject(err);
614+
}
615+
}
616+
594617
get loggedIn() {
595618
return this._loggedIn;
596619
}

src/extension.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,6 @@ export async function activate(context: vscode.ExtensionContext) {
200200
);
201201
}),
202202
);
203-
context.subscriptions.push(
204-
vscode.commands.registerCommand(`codingPlugin.mr.addReviewer`, async (file: IFileNode) => {}),
205-
);
206203

207204
if (vscode.window.registerWebviewPanelSerializer) {
208205
// Make sure we register a serializer in activation event

src/panel.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,26 @@ export class Panel {
122122
const getActivitiesRes = await this._codingSrv.getMRActivities(args);
123123
this.replyMessage(message, getActivitiesRes.data);
124124
break;
125+
case 'mr.update.addReviewer': {
126+
try {
127+
const {
128+
data: { list: memberList },
129+
} = await codingSrv.getProjectMembers();
130+
const list = memberList.map((i) => ({
131+
label: i.user.name,
132+
description: i.user.global_key,
133+
}));
134+
const selection = await vscode.window.showQuickPick(list, {
135+
canPickMany: true,
136+
});
137+
if (!selection) {
138+
return;
139+
}
140+
} catch (err) {}
141+
break;
142+
}
143+
default:
144+
break;
125145
}
126146
} catch (err) {
127147
this.throwError(message, err.msg);

src/typings/commonTypes.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IMRDetail, UserResponse } from './respResult';
1+
import { IMRDetail, IUserItem } from './respResult';
22

33
export interface IRepoInfo {
44
team: string;
@@ -13,7 +13,7 @@ export enum TokenType {
1313

1414
export interface ISessionData {
1515
id: string;
16-
user: UserResponse | null;
16+
user: IUserItem | null;
1717
accessToken: string;
1818
refreshToken: string;
1919
}
@@ -37,5 +37,5 @@ export interface IMRWebViewDetail {
3737
data: IMRDetail & {
3838
loading: boolean;
3939
};
40-
user: UserResponse;
40+
user: IUserItem;
4141
}

src/typings/respResult.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export interface AuthFailResult {
1515
};
1616
}
1717

18-
export interface UserResponse {
18+
export interface IUserItem {
1919
id: number;
2020
avatar: string;
2121
global_key: string;
@@ -30,8 +30,8 @@ export interface IMRData {
3030
title: string;
3131
merge_status: string;
3232
path: string;
33-
author: UserResponse;
34-
action_author: UserResponse;
33+
author: IUserItem;
34+
action_author: IUserItem;
3535
created_at: number;
3636
updated_at: number;
3737
}
@@ -42,6 +42,16 @@ export interface CodingResponse {
4242
msg?: string;
4343
}
4444

45+
export interface IListResponse<T> extends CodingResponse {
46+
data: {
47+
list: T[];
48+
page: number;
49+
pageSize: number;
50+
totalPage: number;
51+
totalRow: number;
52+
};
53+
}
54+
4555
export interface IRepoItem {
4656
id: number;
4757
name: string;
@@ -139,7 +149,7 @@ export interface IActivity {
139149
action: string;
140150
created_at: number;
141151
id: number;
142-
author: UserResponse;
152+
author: IUserItem;
143153
comment?: {
144154
commits: any[];
145155
};
@@ -150,7 +160,7 @@ export interface IMRActivitiesResponse extends CodingResponse {
150160
}
151161

152162
export interface IReviewer {
153-
reviewer: UserResponse;
163+
reviewer: IUserItem;
154164
value: number;
155165
volunteer: string;
156166
}
@@ -163,7 +173,7 @@ export interface IMRReviewersResponse extends CodingResponse {
163173
}
164174

165175
export interface IComment {
166-
author: UserResponse;
176+
author: IUserItem;
167177
childComments?: IComment[];
168178
content: string;
169179
created_at: number;
@@ -205,3 +215,17 @@ export interface IBranchItem {
205215
export interface IBranchListResp extends CodingResponse {
206216
data: IBranchItem[];
207217
}
218+
219+
export interface IMemberItem {
220+
id: number;
221+
project_id: number;
222+
user_id: number;
223+
type: number;
224+
alias: string;
225+
team_alias: string;
226+
created_at: number;
227+
last_visit_at: number;
228+
user: IUserItem;
229+
}
230+
231+
export interface IMemberListResp extends IListResponse<IMemberItem> {}

webviews/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function App() {
5555
return <EmptyWrapper>Please select an merge request first.</EmptyWrapper>;
5656
}
5757

58-
if (data.loading) {
58+
if (data?.loading) {
5959
return <EmptyWrapper>Loading...</EmptyWrapper>;
6060
}
6161

webviews/components/Reviewers.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { view } from '@risingstack/react-easy-state';
44

55
import appStore from 'webviews/store/appStore';
66
import { Avatar, AuthorLink } from 'webviews/components/User';
7-
import { ReactComponent as PlusIcon } from 'webviews/assets/plus.svg';
8-
import { ReactComponent as CheckIcon } from 'webviews/assets/check.svg';
9-
import { ReactComponent as DeleteIcon } from 'webviews/assets/delete.svg';
7+
import PlusIcon from 'webviews/assets/plus.svg';
8+
import CheckIcon from 'webviews/assets/check.svg';
9+
import DeleteIcon from 'webviews/assets/delete.svg';
1010

1111
const Title = styled.div`
1212
margin-top: 15px;
@@ -61,12 +61,13 @@ function Reviewers() {
6161
const { reviewers } = appStore;
6262
const { reviewers: rReviewers = [], volunteer_reviewers: volunteerReviewers = [] } = reviewers;
6363
const allReviewers = [...rReviewers, ...volunteerReviewers];
64+
const { addReviewers } = appStore;
6465

6566
return (
6667
<div>
6768
<Title>
6869
Reviewers
69-
<IconButton>
70+
<IconButton onClick={addReviewers}>
7071
<PlusIcon />
7172
</IconButton>
7273
</Title>

webviews/global.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ declare module '*.svg' {
55
import * as React from 'react';
66

77
export const ReactComponent: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
8+
9+
export default ReactComponent;
810
}

webviews/store/appStore.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ const appStore = store({
113113
appStore.comments.push([result] as any);
114114
return result;
115115
},
116+
async addReviewers() {
117+
const result = await vscode.postMessage({
118+
command: actions.MR_ADD_REVIEWER,
119+
args: {},
120+
});
121+
return result;
122+
},
116123
});
117124

118125
export const persistData = () =>

0 commit comments

Comments
 (0)