Skip to content

Commit ddd812e

Browse files
Add a refresh button to the table views (#287)
Co-authored-by: braginini <[email protected]>
1 parent 2d55d07 commit ddd812e

File tree

8 files changed

+405
-49
lines changed

8 files changed

+405
-49
lines changed

src/views/AccessControl.tsx

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
Tooltip,
2222
Typography,
2323
} from "antd";
24+
import { ReloadOutlined } from "@ant-design/icons";
2425
import { Container } from "../components/Container";
2526
import { useDispatch, useSelector } from "react-redux";
2627
import { storeFilterState, getFilterState } from "../utils/filterState";
@@ -72,7 +73,7 @@ export const AccessControl = () => {
7273
const { onChangePageSize, pageSizeOptions, pageSize } = usePageSizeHelpers();
7374
const { getTokenSilently } = useGetTokenSilently();
7475
const dispatch = useDispatch();
75-
76+
7677
const policies = useSelector((state: RootState) => state.policy.data);
7778
const failed = useSelector((state: RootState) => state.policy.failed);
7879
const loading = useSelector((state: RootState) => state.policy.loading);
@@ -84,6 +85,7 @@ export const AccessControl = () => {
8485
);
8586

8687
const [showTutorial, setShowTutorial] = useState(true);
88+
const [isRefreshButtonDisabled, setIsRefreshButtonDisabled] = useState(false);
8789
const [textToSearch, setTextToSearch] = useState("");
8890
const [optionAllEnable, setOptionAllEnable] = useState("all");
8991
const [currentPage, setCurrentPage] = useState(1);
@@ -184,6 +186,26 @@ export const AccessControl = () => {
184186
);
185187
}, []);
186188

189+
const fetchData = async () => {
190+
setIsRefreshButtonDisabled(true);
191+
192+
dispatch(
193+
policyActions.getPolicies.request({
194+
getAccessTokenSilently: getTokenSilently,
195+
payload: null,
196+
})
197+
);
198+
dispatch(
199+
groupActions.getGroups.request({
200+
getAccessTokenSilently: getTokenSilently,
201+
payload: null,
202+
})
203+
);
204+
await new Promise((resolve) => setTimeout(resolve, 5000)).then(() =>
205+
setIsRefreshButtonDisabled(false)
206+
);
207+
};
208+
187209
useEffect(() => {
188210
if (failed) {
189211
setShowTutorial(false);
@@ -298,7 +320,11 @@ export const AccessControl = () => {
298320
setPolicyToAction(record as PolicyDataTable);
299321
confirm({
300322
icon: <ExclamationCircleOutlined />,
301-
title: <span data-testid="confirm-delete-modal-title" className="font-500">Delete rule {record.name}</span>,
323+
title: (
324+
<span data-testid="confirm-delete-modal-title" className="font-500">
325+
Delete rule {record.name}
326+
</span>
327+
),
302328
width: 500,
303329
content: (
304330
<Space direction="vertical" size="small">
@@ -420,7 +446,6 @@ export const AccessControl = () => {
420446
);
421447
};
422448

423-
424449
const toggleModalGroups = (
425450
title: string,
426451
groups: Group[] | string[] | null,
@@ -643,6 +668,7 @@ export const AccessControl = () => {
643668
disabled={showTutorial}
644669
/>
645670
<Select
671+
style={{ marginRight: "10px" }}
646672
value={pageSize.toString()}
647673
options={pageSizeOptions}
648674
onChange={(value) => {
@@ -652,6 +678,22 @@ export const AccessControl = () => {
652678
disabled={showTutorial}
653679
/>
654680
</Space>
681+
682+
<Tooltip
683+
title={
684+
isRefreshButtonDisabled
685+
? "You can refresh it again in 5 seconds"
686+
: "Refresh"
687+
}
688+
>
689+
<Button
690+
onClick={fetchData}
691+
disabled={isRefreshButtonDisabled}
692+
style={{ marginLeft: "5px", color: "#1890ff" }}
693+
>
694+
<ReloadOutlined />
695+
</Button>
696+
</Tooltip>
655697
</Col>
656698
{!showTutorial && (
657699
<Col

src/views/Activity.tsx

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
Space,
1515
Table,
1616
Typography,
17+
Tooltip,
1718
} from "antd";
1819
import { Event } from "../store/event/types";
1920
import { filter } from "lodash";
@@ -23,7 +24,7 @@ import { useOidcUser } from "@axa-fr/react-oidc";
2324
import { capitalize, formatDateTime } from "../utils/common";
2425
import { User } from "../store/user/types";
2526
import { usePageSizeHelpers } from "../utils/pageSize";
26-
import { QuestionCircleFilled } from "@ant-design/icons";
27+
import { ReloadOutlined } from "@ant-design/icons";
2728
import { storeFilterState, getFilterState } from "../utils/filterState";
2829

2930
const { Title, Paragraph, Text } = Typography;
@@ -44,6 +45,7 @@ export const Activity = () => {
4445
const setupKeys = useSelector((state: RootState) => state.setupKey.data);
4546

4647
const [textToSearch, setTextToSearch] = useState("");
48+
const [isRefreshButtonDisabled, setIsRefreshButtonDisabled] = useState(false);
4749
const [dataTable, setDataTable] = useState([] as EventDataTable[]);
4850

4951
const transformDataTable = (d: Event[]): EventDataTable[] => {
@@ -58,6 +60,21 @@ export const Activity = () => {
5860
})
5961
);
6062
}, []);
63+
64+
const fetchData = async() => {
65+
setIsRefreshButtonDisabled(true);
66+
67+
dispatch(
68+
eventActions.getEvents.request({
69+
getAccessTokenSilently: getTokenSilently,
70+
payload: null,
71+
})
72+
);
73+
74+
await new Promise((resolve) => setTimeout(resolve, 5000)).then(() =>
75+
setIsRefreshButtonDisabled(false)
76+
);
77+
};
6178
// useEffect(() => {
6279
// setDataTable(transformDataTable(events));
6380
// }, [events]);
@@ -427,6 +444,7 @@ export const Activity = () => {
427444
<Col xs={24} sm={24} md={11} lg={11} xl={11} xxl={11} span={11}>
428445
<Space size="middle">
429446
<Select
447+
style={{ marginRight: "10px" }}
430448
value={pageSize.toString()}
431449
options={pageSizeOptions}
432450
onChange={(value) => {
@@ -435,6 +453,22 @@ export const Activity = () => {
435453
className="select-rows-per-page-en"
436454
/>
437455
</Space>
456+
457+
<Tooltip
458+
title={
459+
isRefreshButtonDisabled
460+
? "You can refresh it again in 5 seconds"
461+
: "Refresh"
462+
}
463+
>
464+
<Button
465+
onClick={fetchData}
466+
disabled={isRefreshButtonDisabled}
467+
style={{ marginLeft: "5px", color: "#1890ff" }}
468+
>
469+
<ReloadOutlined />
470+
</Button>
471+
</Tooltip>
438472
</Col>
439473
</Row>
440474
{failed && (

src/views/Nameservers.tsx

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React, { useEffect, useState } from "react";
22
import { useDispatch, useSelector } from "react-redux";
33
import { RootState } from "typesafe-actions";
44
import { actions as nsGroupActions } from "../store/nameservers";
5-
import { Container } from "../components/Container";
65
import {
76
Alert,
87
Button,
@@ -21,8 +20,10 @@ import {
2120
Table,
2221
Tag,
2322
Typography,
23+
Tooltip,
2424
} from "antd";
2525
import { filter } from "lodash";
26+
import { ReloadOutlined } from "@ant-design/icons";
2627
import tableSpin from "../components/Spin";
2728
import { storeFilterState, getFilterState } from "../utils/filterState";
2829
import { useGetTokenSilently } from "../utils/token";
@@ -77,6 +78,7 @@ export const Nameservers = () => {
7778
);
7879

7980
const [textToSearch, setTextToSearch] = useState("");
81+
const [isRefreshButtonDisabled, setIsRefreshButtonDisabled] = useState(false);
8082
const [optionAllEnable, setOptionAllEnable] = useState("all");
8183
const [dataTable, setDataTable] = useState([] as NameserverGroupDataTable[]);
8284
const [showTutorial, setShowTutorial] = useState(false);
@@ -192,6 +194,26 @@ export const Nameservers = () => {
192194
);
193195
}, []);
194196

197+
const fetchData = async () => {
198+
setIsRefreshButtonDisabled(true);
199+
200+
dispatch(
201+
nsGroupActions.getNameServerGroups.request({
202+
getAccessTokenSilently: getTokenSilently,
203+
payload: null,
204+
})
205+
);
206+
dispatch(
207+
groupActions.getGroups.request({
208+
getAccessTokenSilently: getTokenSilently,
209+
payload: null,
210+
})
211+
);
212+
await new Promise((resolve) => setTimeout(resolve, 5000)).then(() =>
213+
setIsRefreshButtonDisabled(false)
214+
);
215+
};
216+
195217
const onChangeAllEnabled = ({ target: { value } }: RadioChangeEvent) => {
196218
setOptionAllEnable(value);
197219
storeFilterState("nameServerFilter", "quickFilter", value);
@@ -554,6 +576,22 @@ export const Nameservers = () => {
554576
className="select-rows-per-page-en"
555577
disabled={showTutorial}
556578
/>
579+
580+
<Tooltip
581+
title={
582+
isRefreshButtonDisabled
583+
? "You can refresh it again in 5 seconds"
584+
: "Refresh"
585+
}
586+
>
587+
<Button
588+
onClick={fetchData}
589+
disabled={isRefreshButtonDisabled}
590+
style={{ color: "#1890ff" }}
591+
>
592+
<ReloadOutlined />
593+
</Button>
594+
</Tooltip>
557595
</Space>
558596
</Col>
559597
<Col xs={24} sm={24} md={5} lg={5} xl={5} xxl={5} span={5}>

src/views/Peers.tsx

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export const Peers = () => {
9494
const [groupPopupVisible, setGroupPopupVisible] = useState("");
9595
const [showTutorial, setShowTutorial] = useState(false);
9696
const [hadFirstRun, setHadFirstRun] = useState(true);
97+
const [isRefreshButtonDisabled, setIsRefreshButtonDisabled] = useState(false);
9798
const [confirmModal, confirmModalContextHolder] = Modal.useModal();
9899

99100
const optionsOnOff = [
@@ -182,6 +183,33 @@ export const Peers = () => {
182183
);
183184
};
184185

186+
const fetchData = async () => {
187+
setIsRefreshButtonDisabled(true);
188+
189+
dispatch(
190+
userActions.getUsers.request({
191+
getAccessTokenSilently: getTokenSilently,
192+
payload: null,
193+
})
194+
);
195+
dispatch(
196+
peerActions.getPeers.request({
197+
getAccessTokenSilently: getTokenSilently,
198+
payload: null,
199+
})
200+
);
201+
dispatch(
202+
groupActions.getGroups.request({
203+
getAccessTokenSilently: getTokenSilently,
204+
payload: null,
205+
})
206+
);
207+
208+
await new Promise((resolve) => setTimeout(resolve, 5000)).then(() =>
209+
setIsRefreshButtonDisabled(false)
210+
);
211+
};
212+
185213
useEffect(() => {
186214
getLocalItem<boolean>(StorageKey.hadFirstRun).then((f) =>
187215
setHadFirstRun(f === null ? false : f)
@@ -694,7 +722,7 @@ export const Peers = () => {
694722
{isAdmin && (
695723
<Select
696724
mode="tags"
697-
style={{ marginRight: "15px" }}
725+
style={{ marginRight: "10px" }}
698726
placeholder="Filter by groups"
699727
tagRender={blueTagRender}
700728
// dropdownRender={dropDownRender}
@@ -715,10 +743,17 @@ export const Peers = () => {
715743
</Select>
716744
)}
717745

718-
<Tooltip title="Refersh">
746+
<Tooltip
747+
title={
748+
isRefreshButtonDisabled
749+
? "You can refresh it again in 5 seconds"
750+
: "Refresh"
751+
}
752+
>
719753
<Button
720-
onClick={refresh}
721-
style={{color: "#1890ff" }}
754+
onClick={fetchData}
755+
disabled={isRefreshButtonDisabled}
756+
style={{ marginLeft: "5px", color: "#1890ff" }}
722757
>
723758
<ReloadOutlined />
724759
</Button>

0 commit comments

Comments
 (0)