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 54e8171

Browse files
feat(mr): animation; reviewers filter.
1 parent 11f6716 commit 54e8171

File tree

7 files changed

+56
-17
lines changed

7 files changed

+56
-17
lines changed

‎src/panel.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,17 @@ export class Panel {
106106
break;
107107
case 'mr.update.reviewers': {
108108
try {
109-
const { iid, list: selected }: { iid: string; list: number[] } = args;
109+
const {
110+
iid,
111+
list: selected,
112+
author,
113+
}: { iid: string; list: number[]; author: string } = args;
110114
const {
111115
data: { list: memberList },
112116
} = await this._codingSrv.getProjectMembers();
117+
113118
const list = memberList
114-
.filter((i) => i.user.global_key !== this._codingSrv.session?.user?.global_key)
119+
.filter((i) => i.user.global_key !== author)
115120
.map((i) => ({
116121
label: i.user.name,
117122
description: i.user.global_key,

‎src/typings/commonTypes.ts

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

33
export interface IRepoInfo {
44
team: string;
@@ -37,6 +37,7 @@ export interface IMRWebViewDetail {
3737
data: IMRDetail & {
3838
loading: boolean;
3939
editingDesc: boolean;
40+
commit_statuses: IMRStatusItem[];
4041
};
4142
user: IUserItem;
4243
}

‎webviews/components/IconButton.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const rotate = keyframes`
2020
}
2121
`;
2222

23-
const Button = styled.button`
23+
const Button = styled(({ height, width, rotate, ...rest}: Props)=><button{...rest}/>)`
2424
border: unset;
2525
background: unset;
2626
width: 20px;
@@ -42,6 +42,12 @@ const Button = styled.button`
4242
width: ${(props: Props) => props.height || 16}px;
4343
height: ${(props: Props) => props.width || 16}px;
4444
overflow: hidden;
45+
animation: ${(props: Props) =>
46+
props.rotate
47+
? css`
48+
${rotate} 2s linear infinite
49+
`
50+
: css``};
4551
}
4652
4753
svg path {

‎webviews/components/mr/Reviewers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function Reviewers() {
3232

3333
const onUpdateReviewer = useCallback(() => {
3434
const list = allReviewers.map((i) => i.reviewer.id);
35-
updateReviewers(currentMR.iid, list);
35+
updateReviewers(currentMR.iid, list,currentMR.data.merge_request.author.global_key);
3636
}, [allReviewers]);
3737

3838
return (

‎webviews/components/mr/StatusCheck.tsx

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,35 @@
11
import React, { useState } from 'react';
2+
import styled from 'styled-components';
23

4+
import { sleep } from 'webviews/utils/helper';
35
import { IMRStatus } from 'src/typings/respResult';
46
import { SectionTitle } from 'webviews/app.styles';
57
import RefreshIcon from 'webviews/assets/refresh.svg';
68
import IconButton from 'webviews/components/IconButton';
79

810
interface Props {
911
data: IMRStatus | null;
10-
onRefresh: () => Promise<any>;
12+
onRefresh: (...args: any[]) => Promise<any>;
1113
}
1214

15+
const ListItem = styled.li`
16+
i {
17+
margin-left: 2ex;
18+
}
19+
`;
20+
1321
function StatusCheck(props: Props) {
22+
const { data } = props;
1423
const [refreshing, setRefreshing] = useState(false);
1524

1625
const onRefresh = async () => {
26+
if (refreshing) {
27+
return;
28+
}
29+
1730
setRefreshing(true);
18-
await Promise.allSettled([props.onRefresh]);
31+
// minimum 1s
32+
await Promise.allSettled([props.onRefresh, sleep(1000)]);
1933
setRefreshing(false);
2034
};
2135

@@ -33,14 +47,20 @@ function StatusCheck(props: Props) {
3347
</IconButton>
3448
</SectionTitle>
3549
<ul>
36-
{props.data?.statuses.map((i) => {
37-
return (
38-
<li key={i.context}>
39-
{i.context}
40-
<i>{i.description}</i>
41-
</li>
42-
);
43-
})}
50+
{data?.statuses ? (
51+
data?.statuses.map((i) => {
52+
return (
53+
<ListItem key={i.context}>
54+
{i.context}
55+
<i>
56+
<a href={i.target_url}>{i.description}</a>
57+
</i>
58+
</ListItem>
59+
);
60+
})
61+
) : (
62+
<li>No Job for now</li>
63+
)}
4464
</ul>
4565
</>
4666
);

‎webviews/store/appStore.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ const appStore = store({
106106
appStore.comments.push([result] as any);
107107
return result;
108108
},
109-
async updateReviewers(iid: string, list: number[]) {
109+
async updateReviewers(iid: string, list: number[],author: string) {
110110
const resp = await getMessageHandler(appStore.messageHandler)().postMessage({
111111
command: actions.MR_UPDATE_REVIEWERS,
112-
args: { iid, list },
112+
args: { iid, list, author },
113113
});
114114
appStore.reviewers = resp;
115115
appStore.refreshMRActivities();

‎webviews/utils/helper.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function sleep(timeout: number) {
2+
return new Promise((resolve) => {
3+
setTimeout(() => {
4+
resolve(true);
5+
}, timeout);
6+
});
7+
}

0 commit comments

Comments
(0)

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