diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx
index 5028773992..0bcc1f099f 100644
--- a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx
+++ b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx
@@ -1,6 +1,11 @@
+import { upperCase } from 'lodash-es';
import { useMemo, useState } from 'react';
import { Listbox, ListboxOption } from 'ui-components';
+import {
+ UtilsReportFiltersNodeTypeEnum,
+ UtilsReportFiltersScanTypeEnum,
+} from '@/api/generated';
import { SearchableCloudAccountsList } from '@/components/forms/SearchableCloudAccountsList';
import { SearchableClusterList } from '@/components/forms/SearchableClusterList';
import { SearchableContainerList } from '@/components/forms/SearchableContainerList';
@@ -30,11 +35,11 @@ const getNodeTypeByProviderName = (providerName: string): string | undefined =>
const API_SCAN_TYPE_MAP: {
[key: string]: ScanTypeEnum;
} = {
- Vulnerability: ScanTypeEnum.VulnerabilityScan,
- Secret: ScanTypeEnum.SecretScan,
- Malware: ScanTypeEnum.MalwareScan,
- Compliance: ScanTypeEnum.ComplianceScan,
- CloudCompliance: ScanTypeEnum.CloudComplianceScan,
+ [UtilsReportFiltersScanTypeEnum.Vulnerability]: ScanTypeEnum.VulnerabilityScan,
+ [UtilsReportFiltersScanTypeEnum.Secret]: ScanTypeEnum.SecretScan,
+ [UtilsReportFiltersScanTypeEnum.Malware]: ScanTypeEnum.MalwareScan,
+ [UtilsReportFiltersScanTypeEnum.Compliance]: ScanTypeEnum.ComplianceScan,
+ [UtilsReportFiltersScanTypeEnum.CloudCompliance]: ScanTypeEnum.CloudComplianceScan,
};
export const AdvancedFilter = ({
@@ -50,6 +55,7 @@ export const AdvancedFilter = ({
const [maskedType, setMaskedType] = useState([]);
const [status, setStatus] = useState([]);
+
const nodeType = useMemo(
() => getNodeTypeByProviderName(provider.toLowerCase()),
[provider],
@@ -71,7 +77,7 @@ export const AdvancedFilter = ({
{isCloudNode(nodeType) && (
)}
- {nodeType === 'host' ? (
+ {nodeType === UtilsReportFiltersNodeTypeEnum.Host ? (
<>
) : null}
- {provider === 'ContainerImage' ? (
+ {provider === UtilsReportFiltersNodeTypeEnum.ContainerImage ? (
<>
) : null}
- {provider === 'Container' ? (
+ {provider === UtilsReportFiltersNodeTypeEnum.Container ? (
<>
) : null}
- {resourceType !== 'CloudCompliance' ? (
+ {resourceType !== UtilsReportFiltersScanTypeEnum.CloudCompliance ? (
<>
{
- return (
- ['Aws', 'Gcp', 'Azure'].find((_provider) => {
- return _provider === provider;
- }) ?? ''
- );
+ return upperCase(provider);
}}
placeholder="Select Provider"
>
- {['Aws', 'Gcp', 'Azure'].map((resource) => {
- return (
-
- {resource}
-
- );
- })}
+ {getReportNodeType(UtilsReportFiltersScanTypeEnum.CloudCompliance).map(
+ (resource) => {
+ return (
+
+ {upperCase(resource)}
+
+ );
+ },
+ )}
{provider && (
diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/CommonForm.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/CommonForm.tsx
index ae1d1b29e4..601f6d04cf 100644
--- a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/CommonForm.tsx
+++ b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/CommonForm.tsx
@@ -1,9 +1,17 @@
+import { upperFirst } from 'lodash-es';
import { useEffect, useMemo, useState } from 'react';
import { Listbox, ListboxOption } from 'ui-components';
+import { UtilsReportFiltersNodeTypeEnum } from '@/api/generated';
import { getReportNodeType } from '@/features/integrations/pages/DownloadReport';
const severities = ['Critical', 'High', 'Medium', 'Low'];
+const getDisplayNodeTypeValue = (nodeType: string) => {
+ if (nodeType === UtilsReportFiltersNodeTypeEnum.ContainerImage) {
+ return 'Container Image';
+ }
+ return upperFirst(nodeType);
+};
export const CommonForm = ({
setProvider,
resource,
@@ -21,7 +29,7 @@ export const CommonForm = ({
setSeverity([]);
}, [resource, provider]);
- const nodeType = useMemo(() => {
+ const nodeTypes = useMemo(() => {
return getReportNodeType(resource);
}, [resource]);
@@ -39,14 +47,14 @@ export const CommonForm = ({
}}
placeholder="Select node type"
getDisplayValue={() => {
- return provider;
+ return getDisplayNodeTypeValue(provider) ?? '';
}}
required
>
- {Object.keys(nodeType).map((resource) => {
+ {nodeTypes.map((type) => {
return (
-
- {resource}
+
+ {getDisplayNodeTypeValue(type)}
);
})}
diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/ComplianceForm.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/ComplianceForm.tsx
index 91b97f7785..cd5135547f 100644
--- a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/ComplianceForm.tsx
+++ b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/ComplianceForm.tsx
@@ -1,11 +1,20 @@
+import { upperCase, upperFirst } from 'lodash-es';
import { useEffect, useState } from 'react';
import { Listbox, ListboxOption } from 'ui-components';
+import { UtilsReportFiltersScanTypeEnum } from '@/api/generated';
import {
getReportBenchmarkList,
getReportNodeType,
} from '@/features/integrations/pages/DownloadReport';
+const getDisplayNodeTypeValue = (resource: string, nodeType: string) => {
+ if (resource === UtilsReportFiltersScanTypeEnum.CloudCompliance) {
+ return upperCase(nodeType);
+ }
+ return upperFirst(nodeType);
+};
+
export const ComplianceForm = ({
setProvider,
resource,
@@ -33,13 +42,13 @@ export const ComplianceForm = ({
}}
placeholder="Select node type"
getDisplayValue={() => {
- return provider;
+ return getDisplayNodeTypeValue(resource, provider) ?? '';
}}
>
- {Object.keys(getReportNodeType(resource)).map((resource) => {
+ {getReportNodeType(resource).map((resource) => {
return (
- {resource}
+ {getDisplayNodeTypeValue(resource, resource)}
);
})}
diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/pages/CreateReport.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/pages/CreateReport.tsx
index f61b84d2a2..d50326b5ca 100644
--- a/deepfence_frontend/apps/dashboard/src/features/integrations/pages/CreateReport.tsx
+++ b/deepfence_frontend/apps/dashboard/src/features/integrations/pages/CreateReport.tsx
@@ -1,3 +1,4 @@
+import { upperFirst } from 'lodash-es';
import { useState } from 'react';
import { ActionFunctionArgs, useFetcher } from 'react-router-dom';
import {
@@ -24,7 +25,6 @@ import { AdvancedFilter } from '@/features/integrations/components/report-form/A
import { CloudComplianceForm } from '@/features/integrations/components/report-form/CloudComplianceForm';
import { CommonForm } from '@/features/integrations/components/report-form/CommonForm';
import { ComplianceForm } from '@/features/integrations/components/report-form/ComplianceForm';
-import { NODE_TYPES } from '@/features/integrations/pages/DownloadReport';
import { ActionEnumType } from '@/features/integrations/pages/IntegrationAdd';
import { SuccessModalContent } from '@/features/settings/components/SuccessModalContent';
import { invalidateAllQueries } from '@/queries';
@@ -42,13 +42,13 @@ export const DURATION: { [k: string]: ModelGenerateReportReqDurationEnum } = {
'Last 180 Days': ModelGenerateReportReqDurationEnum.NUMBER_180,
'All Documents': 0 as ModelGenerateReportReqDurationEnum,
};
-const RESOURCES: { [k: string]: UtilsReportFiltersScanTypeEnum } = {
- Vulnerability: UtilsReportFiltersScanTypeEnum.Vulnerability,
- Secret: UtilsReportFiltersScanTypeEnum.Secret,
- Malware: UtilsReportFiltersScanTypeEnum.Malware,
- Compliance: UtilsReportFiltersScanTypeEnum.Compliance,
- 'Cloud Compliance': UtilsReportFiltersScanTypeEnum.CloudCompliance,
-};
+const RESOURCES = [
+ UtilsReportFiltersScanTypeEnum.Vulnerability,
+ UtilsReportFiltersScanTypeEnum.Secret,
+ UtilsReportFiltersScanTypeEnum.Malware,
+ UtilsReportFiltersScanTypeEnum.Compliance,
+ UtilsReportFiltersScanTypeEnum.CloudCompliance,
+];
const REPORT_TYPES: { [k: string]: ModelGenerateReportReqReportTypeEnum } = {
PDF: ModelGenerateReportReqReportTypeEnum.Pdf,
XLSX: ModelGenerateReportReqReportTypeEnum.Xlsx,
@@ -67,14 +67,10 @@ const action = async ({ request }: ActionFunctionArgs): Promise => {
const reportType = body.downloadType.toString();
const _reportType: ModelGenerateReportReqReportTypeEnum = REPORT_TYPES[reportType];
- const resource = body.resource.toString();
- const _resource: UtilsReportFiltersScanTypeEnum = RESOURCES[resource];
+ const _resource = body.resource as UtilsReportFiltersScanTypeEnum;
- let nodeType = body.nodeType.toString();
- if (nodeType.toString() === 'Kubernetes') {
- nodeType = 'Cluster';
- }
- const _nodeType: UtilsReportFiltersNodeTypeEnum = NODE_TYPES[nodeType];
+ const _nodeType: UtilsReportFiltersNodeTypeEnum =
+ body.nodeType as UtilsReportFiltersNodeTypeEnum;
const masked = formData.getAll('mask[]');
const status = formData.getAll('status[]');
@@ -226,6 +222,14 @@ const Header = () => {
);
};
+
+const getResourceDisplayValue = (resource: string) => {
+ if (resource === UtilsReportFiltersScanTypeEnum.CloudCompliance) {
+ return 'Cloud Compliance';
+ }
+ return resource;
+};
+
const ReportForm = () => {
const [resource, setResource] = useState('');
const [provider, setProvider] = useState('');
@@ -263,21 +267,21 @@ const ReportForm = () => {
setProvider('');
}}
getDisplayValue={(item) => {
- return Object.keys(RESOURCES).find((resource) => resource === item) ?? '';
+ return item ? upperFirst(getResourceDisplayValue(item)) : '';
}}
placeholder="Select resource"
required
>
- {Object.keys(RESOURCES).map((resource) => {
+ {RESOURCES.map((resource) => {
return (
- {resource}
+ {upperFirst(getResourceDisplayValue(resource))}
);
})}
- {resource === 'Compliance' ? (
+ {resource === UtilsReportFiltersScanTypeEnum.Compliance ? (
{
/>
) : null}
- {resource === 'CloudCompliance' ? (
+ {resource === UtilsReportFiltersScanTypeEnum.CloudCompliance ? (
) : null}
- {resource !== 'CloudCompliance' && resource !== 'Compliance' ? (
+ {resource !== UtilsReportFiltersScanTypeEnum.CloudCompliance &&
+ resource !== UtilsReportFiltersScanTypeEnum.Compliance ? (
{
setDownloadType(value);
}}
placeholder="Download type"
- getDisplayValue={(item) => {
+ getDisplayValue={() => {
return downloadType;
}}
required
diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/pages/DownloadReport.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/pages/DownloadReport.tsx
index d3e231ed67..8dde6db1b1 100644
--- a/deepfence_frontend/apps/dashboard/src/features/integrations/pages/DownloadReport.tsx
+++ b/deepfence_frontend/apps/dashboard/src/features/integrations/pages/DownloadReport.tsx
@@ -4,7 +4,10 @@ import { ActionFunctionArgs, Outlet, useFetcher } from 'react-router-dom';
import { Breadcrumb, BreadcrumbLink, Button, Modal, TableSkeleton } from 'ui-components';
import { getReportsApiClient } from '@/api/api';
-import { UtilsReportFiltersNodeTypeEnum } from '@/api/generated';
+import {
+ UtilsReportFiltersNodeTypeEnum,
+ UtilsReportFiltersScanTypeEnum,
+} from '@/api/generated';
import { ModelExportReport } from '@/api/generated/models/ModelExportReport';
import { DFLink } from '@/components/DFLink';
import { ErrorStandardLineIcon } from '@/components/icons/common/ErrorStandardLine';
@@ -27,48 +30,37 @@ export enum ActionEnumType {
}
export const getReportBenchmarkList = (nodeType: string) => {
switch (nodeType) {
- case 'Aws':
+ case UtilsReportFiltersNodeTypeEnum.Aws:
return complianceType.aws;
- case 'Gcp':
+ case UtilsReportFiltersNodeTypeEnum.Gcp:
return complianceType.gcp;
- case 'Azure':
+ case UtilsReportFiltersNodeTypeEnum.Azure:
return complianceType.azure;
- case 'Host':
+ case UtilsReportFiltersNodeTypeEnum.Host:
return complianceType.host;
- case 'Kubernetes':
+ case UtilsReportFiltersNodeTypeEnum.Cluster:
return complianceType.kubernetes_cluster;
default:
console.error('Provider type should be matched');
return [];
}
};
-export const NODE_TYPES: { [k: string]: UtilsReportFiltersNodeTypeEnum } = {
- AWS: UtilsReportFiltersNodeTypeEnum.Aws,
- AZURE: UtilsReportFiltersNodeTypeEnum.Azure,
- GCP: UtilsReportFiltersNodeTypeEnum.Gcp,
- Host: UtilsReportFiltersNodeTypeEnum.Host,
- Cluster: UtilsReportFiltersNodeTypeEnum.Cluster,
- 'Container Image': UtilsReportFiltersNodeTypeEnum.ContainerImage,
- Container: UtilsReportFiltersNodeTypeEnum.Container,
-};
+
export const getReportNodeType = (resourceType: string) => {
- if (resourceType === 'Cloud Compliance') {
- return {
- AWS: NODE_TYPES.AWS,
- AZURE: NODE_TYPES.AZURE,
- GCP: NODE_TYPES.GCP,
- };
- } else if (resourceType === 'Compliance') {
- return {
- Host: NODE_TYPES.Host,
- Kubernetes: NODE_TYPES.Cluster,
- };
+ if (resourceType === UtilsReportFiltersScanTypeEnum.CloudCompliance) {
+ return [
+ UtilsReportFiltersNodeTypeEnum.Aws,
+ UtilsReportFiltersNodeTypeEnum.Azure,
+ UtilsReportFiltersNodeTypeEnum.Gcp,
+ ];
+ } else if (resourceType === UtilsReportFiltersScanTypeEnum.Compliance) {
+ return [UtilsReportFiltersNodeTypeEnum.Host, UtilsReportFiltersNodeTypeEnum.Cluster];
}
- return {
- Host: NODE_TYPES.Host,
- Container: NODE_TYPES.Container,
- 'Container Image': NODE_TYPES['Container Image'],
- };
+ return [
+ UtilsReportFiltersNodeTypeEnum.Host,
+ UtilsReportFiltersNodeTypeEnum.Container,
+ UtilsReportFiltersNodeTypeEnum.ContainerImage,
+ ];
};
export const useGetReports = () => {
diff --git a/deepfence_frontend/packages/ui-components/src/components/select/Listbox.tsx b/deepfence_frontend/packages/ui-components/src/components/select/Listbox.tsx
index 24702952da..6a476564a6 100644
--- a/deepfence_frontend/packages/ui-components/src/components/select/Listbox.tsx
+++ b/deepfence_frontend/packages/ui-components/src/components/select/Listbox.tsx
@@ -259,20 +259,16 @@ export function Listbox({
-
+
@@ -299,7 +295,7 @@ export function Listbox({
onClick={() => {
onClearAll?.();
}}
- className="flex gap-1.5 dark:text-accent-accent items-center text-p6"
+ className="flex dark:text-accent-accent items-center text-p6"
>
{clearAll}