diff --git a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningFindingsTable.tsx b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningFindingsTable.tsx index d2160f8f6..105db9f31 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningFindingsTable.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningFindingsTable.tsx @@ -168,6 +168,13 @@ export const SecretScanningFindingsTable = ({ findings }: Props) => { setPage }); + const currentPageData = useMemo( + () => filteredFindings.slice(offset, perPage * page), + [filteredFindings, offset, perPage, page] + ); + + const currentPageDataIds = useMemo(() => currentPageData.map((f) => f.id), [currentPageData]); + const handleSort = (column: FindingsOrderBy) => { if (column === orderBy) { toggleOrderDirection(); @@ -288,12 +295,29 @@ export const SecretScanningFindingsTable = ({ findings }: Props) => { - setSelectedRows((sr) => - sr.length === filteredFindings.length ? [] : filteredFindings.map((f) => f.id) - ) + isChecked={ + currentPageDataIds.length > 0 && + currentPageDataIds.every((id) => selectedRows.includes(id)) } + onCheckedChange={() => { + const allCurrentlySelectedOnPage = + currentPageDataIds.length > 0 && + currentPageDataIds.every((id) => selectedRows.includes(id)); + + if (allCurrentlySelectedOnPage) { + // Deselect all on current page + setSelectedRows((prev) => + prev.filter((rowId) => !currentPageDataIds.includes(rowId)) + ); + } else { + // Select all on current page + setSelectedRows((prev) => { + const newSelectedRows = new Set(prev); + currentPageDataIds.forEach((id) => newSelectedRows.add(id)); + return Array.from(newSelectedRows); + }); + } + }} onClick={(e) => { e.stopPropagation(); }} @@ -356,7 +380,7 @@ export const SecretScanningFindingsTable = ({ findings }: Props) => { - {filteredFindings.slice(offset, perPage * page).map((finding) => ( + {currentPageData.map((finding) => ( diff --git a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx index c4e04df91..0a91d7355 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx @@ -144,8 +144,11 @@ export const SecretScanningUpdateFindingModal = ({ findings, isOpen, onOpenChang return ( - - onOpenChange(false)} /> + + onOpenChange(false)} /> );