diff --git a/client/src/app/components/TableControls/TableHeaderContentWithControls.tsx b/client/src/app/components/TableControls/TableHeaderContentWithControls.tsx index 0eb0a60bb..08becda3a 100644 --- a/client/src/app/components/TableControls/TableHeaderContentWithControls.tsx +++ b/client/src/app/components/TableControls/TableHeaderContentWithControls.tsx @@ -12,6 +12,7 @@ export const TableHeaderContentWithControls: React.FC< ITableHeaderContentWithControlsProps > = ({ numColumnsBeforeData, numColumnsAfterData, children }) => ( <> + {/* eslint-disable @eslint-react/no-array-index-key -- filler cells with no identity beyond position */} {Array(numColumnsBeforeData) .fill(null) .map((_, i) => ( @@ -23,5 +24,6 @@ export const TableHeaderContentWithControls: React.FC< .map((_, i) => ( ))} + {/* eslint-enable @eslint-react/no-array-index-key */} ); diff --git a/client/src/app/components/UploadFiles.tsx b/client/src/app/components/UploadFiles.tsx index d4f161456..972ab438e 100644 --- a/client/src/app/components/UploadFiles.tsx +++ b/client/src/app/components/UploadFiles.tsx @@ -118,13 +118,13 @@ export const UploadFiles: React.FC = ({ statusToggleText={`${successFileCount} of ${uploads.size} files uploaded`} statusToggleIcon={statusIcon} > - {Array.from(uploads.entries()).map(([file, upload], index) => ( + {Array.from(uploads.entries()).map(([file, upload]) => ( {}} fileIcon={} file={file} - key={`${file.name}-${index}`} + key={`${file.name}-${file.size}-${file.lastModified}`} onClearClick={() => removeFiles([file])} progressValue={upload.progress} progressVariant={ diff --git a/client/src/app/pages/advisory-details/components/csaf-vulnerabilities-tab/Remediations.tsx b/client/src/app/pages/advisory-details/components/csaf-vulnerabilities-tab/Remediations.tsx index c57c137b4..e5bf006d2 100644 --- a/client/src/app/pages/advisory-details/components/csaf-vulnerabilities-tab/Remediations.tsx +++ b/client/src/app/pages/advisory-details/components/csaf-vulnerabilities-tab/Remediations.tsx @@ -78,8 +78,8 @@ export const CsafRemediations: React.FC = ({ isIndented > - {sorted.map((rem, i) => ( - + {sorted.map((rem) => ( + = ({ )} {vulnerability.threats && vulnerability.threats.length > 0 && - vulnerability.threats.map((threat, i) => ( - + vulnerability.threats.map((threat) => ( + {capitalize(threat.category)} diff --git a/client/src/app/pages/advisory-details/helpers/csaf-utils.tsx b/client/src/app/pages/advisory-details/helpers/csaf-utils.tsx index 677a9675d..b9063a77a 100644 --- a/client/src/app/pages/advisory-details/helpers/csaf-utils.tsx +++ b/client/src/app/pages/advisory-details/helpers/csaf-utils.tsx @@ -188,6 +188,7 @@ export function linkifyDetails(text: string): React.ReactNode[] { const parts = text.split(URL_REGEX); return parts.map((part, i) => i % 2 === 1 ? ( + // eslint-disable-next-line @eslint-react/no-array-index-key -- index is the only identity for regex-split fragments {part} diff --git a/client/src/app/pages/package-list/package-table.tsx b/client/src/app/pages/package-list/package-table.tsx index e6323f9d5..4ac30c005 100644 --- a/client/src/app/pages/package-list/package-table.tsx +++ b/client/src/app/pages/package-list/package-table.tsx @@ -170,9 +170,9 @@ export const PackageTable: React.FC = () => {
{isCellExpanded(item, "licenses") ? ( - {pkg?.licenses?.map((license, idx) => ( + {pkg?.licenses?.map((license) => ( {license.license_name} diff --git a/client/src/app/pages/sbom-details/vulnerabilities-by-sbom.tsx b/client/src/app/pages/sbom-details/vulnerabilities-by-sbom.tsx index d88941f8d..4c103f419 100644 --- a/client/src/app/pages/sbom-details/vulnerabilities-by-sbom.tsx +++ b/client/src/app/pages/sbom-details/vulnerabilities-by-sbom.tsx @@ -352,58 +352,52 @@ export const VulnerabilitiesBySbom: React.FC = ({ - {Array.from(item.purls.values()).map( - (purl, index) => { - if (!purl.isOrphan) { - const decomposedPurl = decomposePurl( - purl.purlSummary.purl, - ); - return ( - - {decomposedPurl?.type} - {decomposedPurl?.namespace} - - - {decomposedPurl?.name} - - - {decomposedPurl?.version} - {decomposedPurl?.path} - - {decomposedPurl?.qualifiers && ( - + {Array.from(item.purls.values()).map((purl) => { + if (!purl.isOrphan) { + const decomposedPurl = decomposePurl( + purl.purlSummary.purl, + ); + return ( + + {decomposedPurl?.type} + {decomposedPurl?.namespace} + + - - ); - } else { - return ( - - - - {purl.parentName} - - - - - ); - } - }, - )} + > + {decomposedPurl?.name} + + + {decomposedPurl?.version} + {decomposedPurl?.path} + + {decomposedPurl?.qualifiers && ( + + )} + + + ); + } else { + return ( + + + + {purl.parentName} + + + + + ); + } + })} ) : null} diff --git a/client/src/app/pages/sbom-scan/components/UploadFileForAnalysis.tsx b/client/src/app/pages/sbom-scan/components/UploadFileForAnalysis.tsx index 948c5cb80..743e2e250 100644 --- a/client/src/app/pages/sbom-scan/components/UploadFileForAnalysis.tsx +++ b/client/src/app/pages/sbom-scan/components/UploadFileForAnalysis.tsx @@ -77,12 +77,12 @@ export const UploadFileForAnalysis: React.FC = ({ browseButtonText="Browse Files" /> ) : ( - Array.from(uploads.entries()).map(([file, upload], index) => { + Array.from(uploads.entries()).map(([file, upload]) => { if (upload.error) { if (upload.wasCancelled) { return ( = ({ return ( = ({ return (