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 (