Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9764978

Browse files
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 {ReactComponentasPlusIcon} from 'webviews/assets/plus.svg';
8-
import {ReactComponentasCheckIcon} from 'webviews/assets/check.svg';
9-
import {ReactComponentasDeleteIcon} 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+
<IconButtononClick={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)

AltStyle によって変換されたページ (->オリジナル) /