Skip to content

Commit 9415d77

Browse files
Feature optimize approval center (#27)
* feat: approval optimize
1 parent 48e09e2 commit 9415d77

File tree

21 files changed

+727
-414
lines changed

21 files changed

+727
-414
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,5 @@
109109
"resolutions": {
110110
"@types/react": "17.0.43"
111111
},
112-
"proxy": "https://featureprobe.io/"
112+
"proxy": "http://featureprobe-df.intra.xiaojukeji.com/"
113113
}

src/interfaces/approval.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ export interface IApproval {
1414
toggleKey: string;
1515
toggleName: string;
1616
comment?: string;
17-
approvalTime?: string;
18-
sketchTime?: string;
1917
locked?: boolean;
2018
lockedTime?: string;
19+
modifiedTime?: string;
20+
canceled: boolean;
21+
cancelReason?: string;
2122
}
2223

2324
export interface IApprovalList {
@@ -38,7 +39,7 @@ export interface IApprovalParams {
3839
pageIndex?: number;
3940
pageSize?: number;
4041
keyword?: string;
41-
status: string;
42+
status: string[];
4243
type: string;
4344
}
4445

src/interfaces/project.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface IEnvironment {
1111
clientSdkKey: string;
1212
serverSdkKey: string;
1313
archived?: boolean;
14+
enableApproval?: boolean;
1415
}
1516

1617
export interface IEnvironmentParams {

src/interfaces/toggle.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export interface IToggle {
2828
locked?: boolean;
2929
lockedBy?: string;
3030
lockedTime?: string;
31+
releaseStatus: string;
3132
}
3233

3334
export interface IEditToggleParams {

src/layout/hooks.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { useState } from 'react';
12
import { createContainer } from 'unstated-next';
23
import { useLocalStorage } from 'utils/hooks';
3-
import { useState } from 'react';
44

55
export const usePutaway = () => {
66
const [ isPutAway, setIsputAway ] = useLocalStorage('sidebarIsPutAway', false);
@@ -15,12 +15,15 @@ export const useUserInfo = () => {
1515
const [ userInfo, saveUserInfo ] = useState({
1616
account: '',
1717
role: '',
18-
approvalCount: 0,
1918
});
2019

20+
const [ approvalCount, saveApprovalCount ] = useState<number>(0);
21+
2122
return {
2223
userInfo,
24+
approvalCount,
2325
saveUserInfo,
26+
saveApprovalCount,
2427
};
2528
};
2629

src/layout/pageHeader.tsx

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SyntheticEvent, useCallback, useEffect, useState } from 'react';
1+
import { SyntheticEvent, useCallback, useEffect, useRef, useState } from 'react';
22
import { useHistory, useLocation } from 'react-router-dom';
33
import { Popup } from 'semantic-ui-react';
44
import classNames from 'classnames';
@@ -9,14 +9,14 @@ import { PROJECT_PATH } from 'router/routes';
99
import { getUserInfo } from 'services/user';
1010
import { getApprovalList } from 'services/approval';
1111
import { IUser } from 'interfaces/member';
12+
import { IApprovalList } from 'interfaces/approval';
1213
import { I18NContainer } from 'hooks';
1314
import { APPROVAL_ROUTE_LIST, PROJECT_ROUTE_LIST, SETTING_ROUTE_LIST } from 'constants/pathname';
1415
import logo from 'images/logo.svg';
1516
import logoWhite from 'images/logo-white.svg';
1617
import { HeaderContainer } from './hooks';
1718
import { EventTrack } from 'utils/track';
1819
import styles from './pageHeader.module.scss';
19-
import { IApprovalList } from 'interfaces/approval';
2020

2121
const PROJECT_NAV = 'projects';
2222
const SETTING_NAV = 'settings';
@@ -27,7 +27,7 @@ const PageHeader = () => {
2727
const history = useHistory();
2828
const location = useLocation();
2929
const intl = useIntl();
30-
const { userInfo, saveUserInfo } = HeaderContainer.useContainer();
30+
const { approvalCount, saveUserInfo, saveApprovalCount } = HeaderContainer.useContainer();
3131

3232
const [ selectedNav, setSelectedNav ] = useState<string>('');
3333
const [ account, setAccount ] = useState<string>('');
@@ -40,6 +40,8 @@ const PageHeader = () => {
4040
setI18n
4141
} = I18NContainer.useContainer();
4242

43+
const timer: { current: NodeJS.Timeout | null } = useRef(null);
44+
4345
const headerCls = classNames(
4446
styles['header'],
4547
{
@@ -85,43 +87,48 @@ const PageHeader = () => {
8587
return () => window.removeEventListener('click', handler);
8688
}, [menuOpen, helpMenuOpen, i18nMenuOpen]);
8789

88-
useEffect(() => {
89-
let result: IUser;
9090

91+
useEffect(() => {
9192
getUserInfo<IUser>().then(res => {
9293
const { success } = res;
9394
if (success) {
94-
const { data } = res;
95-
if (data) {
96-
setAccount(data?.account);
97-
saveUserInfo({
98-
...data,
99-
approvalCount: userInfo.approvalCount,
100-
});
101-
EventTrack.setUserId(data.account);
102-
result = data;
95+
if (res.data) {
96+
setAccount(res.data.account);
97+
saveUserInfo(res.data);
98+
EventTrack.setUserId(res.data.account);
10399
}
104100
} else {
105101
message.error(intl.formatMessage({id: 'header.getuser.error.text'}));
106102
}
107103
});
104+
}, [intl, saveUserInfo]);
108105

106+
const initApprovalList = useCallback(() => {
109107
getApprovalList<IApprovalList>({
110108
pageIndex: 0,
111-
status: 'PENDING',
109+
status: ['PENDING'],
112110
type: 'APPROVAL',
113111
keyword: '',
114112
}).then(res => {
115113
const { success, data } = res;
116114
if (success && data) {
117115
const { totalElements } = data;
118-
saveUserInfo({
119-
...result,
120-
approvalCount: totalElements,
121-
});
116+
saveApprovalCount(totalElements);
122117
}
123118
});
124-
}, [intl, userInfo.approvalCount, saveUserInfo]);
119+
}, [saveApprovalCount]);
120+
121+
useEffect(() => {
122+
if (timer.current) {
123+
clearInterval(timer.current);
124+
}
125+
initApprovalList();
126+
timer.current = setInterval(initApprovalList, 5000);
127+
128+
return () => {
129+
clearInterval(timer.current as NodeJS.Timeout);
130+
};
131+
}, [initApprovalList]);
125132

126133
useEffect(() => {
127134
const reg = new RegExp('[^/]+$');
@@ -192,7 +199,7 @@ const PageHeader = () => {
192199

193200
<div className={approvalCls} onClick={handleGotoApproval}>
194201
<FormattedMessage id='approvals.center' />
195-
{ userInfo.approvalCount !== 0 && <span className={styles.count}>{userInfo.approvalCount > 99 ? '99+' : userInfo.approvalCount}</span> }
202+
{ approvalCount !== 0 && <span className={styles.count}>{approvalCount > 99 ? '99+' : approvalCount}</span> }
196203
</div>
197204
</div>
198205
<div className={'user'}>

src/locales/en-US.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@
195195
"toggles.filter.status": "Status",
196196
"toggles.filter.search.placeholder": "Search for name, key or description",
197197
"toggles.table.brief": "Brief",
198+
"toggles.table.publishing.status": "Publishing Status",
198199
"toggles.table.status": "Status",
199200
"toggles.table.evaluation": "Evaluation",
200201
"toggles.table.lastmodified": "Template Modified",
@@ -288,7 +289,7 @@
288289
"targeting.view.more": "Load more",
289290

290291
"targeting.approval.tips": "Owner can set approval reviewers for this environment.",
291-
"targeting.approval.operation.skip.approval": "Skip Approval",
292+
"targeting.approval.operation.skip.approval": "Skip Approval and Publish",
292293
"targeting.approval.operation.view.changes": "Show Changes",
293294
"targeting.approval.operation.publish": "Publish",
294295
"targeting.approval.operation.discard": "Discard",
@@ -307,8 +308,8 @@
307308
"targeting.approval.pass.error": "Error acceptting",
308309
"targeting.approval.reject.success": "Successfully declined ",
309310
"targeting.approval.reject.error": "Error declining",
310-
"targeting.approval.cancel.success": "Successfully cancelled",
311-
"targeting.approval.cancel.error": "Error cancelling",
311+
"targeting.approval.cancel.success": "Successfully abandoned",
312+
"targeting.approval.cancel.error": "Error abandoning",
312313
"targeting.approval.operate.success": "Successfully updated",
313314
"targeting.approval.operate.error": "Error operating",
314315
"targeting.approval.request.success": "Successfully requested",
@@ -395,22 +396,23 @@
395396
"approvals.lists": "Approval list",
396397
"approvals.application.lists": "Application list",
397398
"approvals.status.pending": "Pending review",
398-
"approvals.status.passed": "Accepted",
399+
"approvals.status.accepted": "Accepted",
399400
"approvals.status.declined": "Declined",
400401
"approvals.status.skipped": "Skipped",
401402
"approvals.status.withdrawn": "Withdrawn",
402403
"approvals.status.published": "Published",
403404
"approvals.status.cancelled": "Cancelled",
404405
"approvals.status.unpublished": "Pending publish",
405406
"approvals.table.header.title": "Title",
406-
"approvals.table.header.request": "Requested",
407+
"approvals.table.header.request": "Requested by/at",
407408
"approvals.table.header.status": "Status",
408-
"approvals.table.header.review": "Reviewed",
409+
"approvals.table.header.review": "Operated by/at",
409410
"approvals.table.header.comment": "Comment",
410411
"approvals.table.header.published.time": "Pulished time",
411412
"approvals.table.header.cancelled.time": "Cancelled time",
412413
"approvals.table.header.skipped.time": "Skipped time",
413414
"approvals.table.header.withdrawn.time": "Withdrawn time",
415+
"approvals.table.header.abandoned": "Changes are abandoned",
414416
"approvals.search.placeholder": "Please input keywords",
415417
"approvals.total": " approvals in total",
416418
"approvals.lists.error": "Error getting approval lists",

src/locales/zh-CN.json

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@
195195
"toggles.filter.status": "状态",
196196
"toggles.filter.search.placeholder": "搜索名称、标识或描述",
197197
"toggles.table.brief": "简介",
198+
"toggles.table.publishing.status": "发布状态",
198199
"toggles.table.status": "状态",
199200
"toggles.table.evaluation": "访问",
200201
"toggles.table.lastmodified": "模板更新",
@@ -288,7 +289,7 @@
288289
"targeting.view.more": "查看更多",
289290

290291
"targeting.approval.tips": "支持为该项目统一设置审批人",
291-
"targeting.approval.operation.skip.approval": "跳过审批",
292+
"targeting.approval.operation.skip.approval": "跳过审批并发布",
292293
"targeting.approval.operation.view.changes": "查看变更",
293294
"targeting.approval.operation.publish": "发布",
294295
"targeting.approval.operation.discard": "取消发布",
@@ -307,8 +308,8 @@
307308
"targeting.approval.pass.error": "同意审批失败",
308309
"targeting.approval.reject.success": "拒绝审批成功",
309310
"targeting.approval.reject.error": "拒绝审批失败",
310-
"targeting.approval.cancel.success": "取消发布成功",
311-
"targeting.approval.cancel.error": "取消发布失败",
311+
"targeting.approval.cancel.success": "放弃变更成功",
312+
"targeting.approval.cancel.error": "放弃变更失败",
312313
"targeting.approval.operate.success": "操作成功",
313314
"targeting.approval.operate.error": "操作失败",
314315
"targeting.approval.request.success": "发起审批成功",
@@ -395,22 +396,23 @@
395396
"approvals.lists": "审批列表",
396397
"approvals.application.lists": "申请列表",
397398
"approvals.status.pending": "待审批",
398-
"approvals.status.passed": "已通过",
399+
"approvals.status.accepted": "已通过",
399400
"approvals.status.declined": "已拒绝",
400401
"approvals.status.skipped": "已跳过",
401402
"approvals.status.withdrawn": "已撤回",
402403
"approvals.status.published": "已发布",
403404
"approvals.status.cancelled": "已取消",
404405
"approvals.status.unpublished": "待发布",
405406
"approvals.table.header.title": "标题",
406-
"approvals.table.header.request": "申请",
407-
"approvals.table.header.status": "发布状态",
408-
"approvals.table.header.review": "审批",
407+
"approvals.table.header.request": "申请人/时间",
408+
"approvals.table.header.status": "状态",
409+
"approvals.table.header.review": "操作人/时间",
409410
"approvals.table.header.comment": "原因",
410411
"approvals.table.header.published.time": "发布时间",
411412
"approvals.table.header.cancelled.time": "取消时间",
412413
"approvals.table.header.skipped.time": "跳过时间",
413414
"approvals.table.header.withdrawn.time": "撤回时间",
415+
"approvals.table.header.abandoned": "变更已放弃",
414416
"approvals.search.placeholder": "搜索变更说明",
415417
"approvals.total": "审批总量",
416418
"approvals.lists.error": "获取审批列表失败",

0 commit comments

Comments
 (0)