Brijesh619 commented on code in PR #708:
URL: https://github.com/apache/atlas/pull/708#discussion_r3736982136
##########
dashboard/src/views/Administrator/Audits/AuditResults.tsx:
##########
@@ -15,227 +15,730 @@
* limitations under the License.
*/
-import { Grid, Link, List, ListItem, ListItemText, Typography } from
"@mui/material";
-import { auditAction, category } from "@utils/Enum";
+import { Grid, Link, List, ListItem, ListItemText, Typography, Box, Drawer,
IconButton, Stack, Tooltip, TextField, InputAdornment, CircularProgress,
Pagination, PaginationItem, Skeleton } from "@mui/material";
+import KeyboardDoubleArrowLeftIcon from
"@mui/icons-material/KeyboardDoubleArrowLeft";
+import KeyboardDoubleArrowRightIcon from
"@mui/icons-material/KeyboardDoubleArrowRight";
+import ContentCopyIcon from "@mui/icons-material/ContentCopy";
+import SearchIcon from "@mui/icons-material/Search";
+import { auditAction, category, AuditOperation, PurgeActiveView } from
"@utils/Enum";
import { isEmpty, jsonParse } from "@utils/Utils";
+import { useVirtualization } from "@hooks/useVirtualization";
import CustomModal from "@components/Modal";
import TypeDefAuditDetailModal from "@components/TypeDefAuditDetailModal";
-import { useState } from "react";
-import { Item } from "@utils/Muiutils";
+import { useRef, useState, useEffect } from "react";
import AuditsTab from "@views/DetailPage/EntityDetailTabs/AuditsTab";
import ImportExportAudits from "./ImportExportAudits";
+import { LightTooltip } from "@components/muiComponents";
+import { fetchApi } from "@api/apiMethods/fetchApi";
+import "./AuditResults.scss";
+interface AuditEntry {
+ guid: string;
+ operation: string;
+ params?: string;
+ result?: string;
+ runId?: string;
+ [key: string]: unknown;
+}
-const AuditResults = ({ componentProps, row }: any) => {
+interface AuditResultsProps {
+ componentProps?: {
+ auditData?: AuditEntry[];
+ };
+ row: {
+ original: {
+ guid: string;
+ runId?: string;
+ [key: string]: unknown;
+ };
+ };
+}
+
+const AuditResults = ({ componentProps, row }: AuditResultsProps) => {
const { auditData } = componentProps || {};
const [openModal, setOpenModal] = useState<boolean>(false);
const [openPurgeModal, setOpenPurgeModal] = useState<boolean>(false);
- const [currentResultObj, setCurrentObj] = useState<any>({});
- const [currentPurgeResultObj, setCurrentPurgeResultObj] = useState<any>("");
+ const [currentResultObj, setCurrentObj] = useState<Record<string, unknown> |
undefined>();
+ // Stores the guid of the clicked purged entity
+ const [currentPurgeResultObj, setCurrentPurgeResultObj] = useState<string |
undefined>();
+ const [activePurgeView, setActivePurgeView] =
useState<PurgeActiveView>(PurgeActiveView.NONE);
+ const [drawerSearchText, setDrawerSearchText] = useState<string>('');
+ const [drawerPage, setDrawerPage] = useState<number>(1);
+ const [drawerPageSize, setDrawerPageSize] = useState<number>(25);
+ const [drawerPageSizeInput, setDrawerPageSizeInput] = useState<string>('25');
+ const [scrollTop, setScrollTop] = useState<number>(0);
+ const [copiedRunId, setCopiedRunId] = useState<boolean>(false);
+ const [purgedApiGuids, setPurgedApiGuids] = useState<string[]>([]);
+ const [loadingPurgedApi, setLoadingPurgedApi] = useState<boolean>(false);
+ const [purgedTotalCount, setPurgedTotalCount] = useState<number>(0);
+ const [summaryData, setSummaryData] = useState<Record<string, unknown> |
null>(null);
+ const [loadingSummary, setLoadingSummary] = useState<boolean>(false);
+ const drawerScrollTimerRef = useRef<ReturnType<typeof setTimeout> |
null>(null);
+
+
const handleCloseModal = () => {
setOpenModal(false);
};
const handleClosePurgeModal = () => {
setOpenPurgeModal(false);
};
- const auditObj = !isEmpty(auditData)
- ? auditData.find((obj: { guid: string }) => obj.guid == row.original.guid)
- : {};
- const { operation, params, result } = auditObj;
+ const auditObj: AuditEntry | undefined = !isEmpty(auditData)
+ ? (auditData as AuditEntry[]).find((obj) => obj.guid === row.original.guid)
+ : undefined;
+
+ const operation = auditObj?.operation ?? '';
+ const params = auditObj?.params;
+ const result = auditObj?.result;
+
+ let isPurgeOperation = operation === AuditOperation.PURGE || operation ===
AuditOperation.AUTO_PURGE;
+ const summaryGuid = auditObj?.guid ?? row.original.guid;
Review Comment:
I have added an AbortController and a cleanup return function to the
useEffect hook. This ensures that any pending fetch requests are properly
aborted and state updates are blocked if the component unmounts or the guid
dependency changes, preventing any stale state issues
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]