diff --git a/actions/compliances/compliances.ts b/actions/compliances/compliances.ts
index 6b254acff0..e9c8814c31 100644
--- a/actions/compliances/compliances.ts
+++ b/actions/compliances/compliances.ts
@@ -6,15 +6,23 @@ import { parseStringify } from "@/lib";
export const getCompliancesOverview = async ({
scanId,
+ region,
}: {
scanId: string;
+ region?: string | string[];
}) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
- const url = new URL(
- `${keyServer}/compliance-overviews?filter[scan_id]=${scanId}`,
- );
+ const url = new URL(`${keyServer}/compliance-overviews`);
+
+ if (scanId) url.searchParams.append("filter[scan_id]", scanId);
+
+ if (region) {
+ const regionValue = Array.isArray(region) ? region.join(",") : region;
+ url.searchParams.append("filter[region__in]", regionValue);
+ }
+
try {
const compliances = await fetch(url.toString(), {
headers: {
@@ -24,6 +32,7 @@ export const getCompliancesOverview = async ({
});
const data = await compliances.json();
const parsedData = parseStringify(data);
+
revalidatePath("/compliance");
return parsedData;
} catch (error) {
diff --git a/app/(prowler)/compliance/page.tsx b/app/(prowler)/compliance/page.tsx
index 68a9a89dbe..08368c69da 100644
--- a/app/(prowler)/compliance/page.tsx
+++ b/app/(prowler)/compliance/page.tsx
@@ -8,7 +8,6 @@ import {
ComplianceSkeletonGrid,
} from "@/components/compliance";
import { DataCompliance } from "@/components/compliance/data-compliance";
-import { FilterControls } from "@/components/filters";
import { Header } from "@/components/ui";
import { ComplianceOverviewData, SearchParamsProps } from "@/types";
@@ -24,26 +23,53 @@ export default async function Compliance({
state: scan.attributes.state,
progress: scan.attributes.progress,
}));
+
const selectedScanId = searchParams.scanId || scanList[0]?.id;
+ // Fetch compliance data for regions
+ const compliancesData = await getCompliancesOverview({
+ scanId: selectedScanId,
+ });
+
+ // Extract unique regions
+ const regions = compliancesData?.data
+ ? Array.from(
+ new Set(
+ compliancesData.data.map(
+ (compliance: ComplianceOverviewData) =>
+ compliance.attributes.region as string,
+ ),
+ ),
+ )
+ : [];
+
return (
<>