Skip to content

Commit 54e8171

Browse files
committed
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

+7-2
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

+2-1
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

+7-1
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

+1-1
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

+30-10
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

+2-2
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

+7
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)