mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-01-25 02:08:11 +00:00
feat(ui): add resource group label formatter to resources view (#9820)
This commit is contained in:
@@ -6,6 +6,7 @@ All notable changes to the **Prowler UI** are documented in this file.
|
|||||||
|
|
||||||
### 🚀 Added
|
### 🚀 Added
|
||||||
|
|
||||||
|
- Resource group label filter to Resources page [(#9820)](https://github.com/prowler-cloud/prowler/pull/9820)
|
||||||
- Add search bar when adding a provider [(#9634)](https://github.com/prowler-cloud/prowler/pull/9634)
|
- Add search bar when adding a provider [(#9634)](https://github.com/prowler-cloud/prowler/pull/9634)
|
||||||
- New findings table UI with new design system components, improved filtering UX, and enhanced table interactions [(#9699)](https://github.com/prowler-cloud/prowler/pull/9699)
|
- New findings table UI with new design system components, improved filtering UX, and enhanced table interactions [(#9699)](https://github.com/prowler-cloud/prowler/pull/9699)
|
||||||
- Add gradient background to Risk Plot for visual risk context [(#9664)](https://github.com/prowler-cloud/prowler/pull/9664)
|
- Add gradient background to Risk Plot for visual risk context [(#9664)](https://github.com/prowler-cloud/prowler/pull/9664)
|
||||||
|
|||||||
@@ -8,10 +8,11 @@ import {
|
|||||||
getResources,
|
getResources,
|
||||||
} from "@/actions/resources";
|
} from "@/actions/resources";
|
||||||
import { FilterControls } from "@/components/filters";
|
import { FilterControls } from "@/components/filters";
|
||||||
|
import { ResourcesFilters } from "@/components/resources/resources-filters";
|
||||||
import { SkeletonTableResources } from "@/components/resources/skeleton/skeleton-table-resources";
|
import { SkeletonTableResources } from "@/components/resources/skeleton/skeleton-table-resources";
|
||||||
import { ColumnResources } from "@/components/resources/table/column-resources";
|
import { ColumnResources } from "@/components/resources/table/column-resources";
|
||||||
import { ContentLayout } from "@/components/ui";
|
import { ContentLayout } from "@/components/ui";
|
||||||
import { DataTable, DataTableFilterCustom } from "@/components/ui/table";
|
import { DataTable } from "@/components/ui/table";
|
||||||
import {
|
import {
|
||||||
createDict,
|
createDict,
|
||||||
extractFiltersAndQuery,
|
extractFiltersAndQuery,
|
||||||
@@ -63,30 +64,12 @@ export default async function Resources({
|
|||||||
<ContentLayout title="Resources" icon="lucide:warehouse">
|
<ContentLayout title="Resources" icon="lucide:warehouse">
|
||||||
<FilterControls search date />
|
<FilterControls search date />
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
<DataTableFilterCustom
|
<ResourcesFilters
|
||||||
filters={[
|
providerIds={providerIds}
|
||||||
{
|
providerDetails={providerDetails}
|
||||||
key: "provider__in",
|
uniqueRegions={uniqueRegions}
|
||||||
labelCheckboxGroup: "Provider",
|
uniqueServices={uniqueServices}
|
||||||
values: providerIds,
|
uniqueGroups={uniqueGroups}
|
||||||
valueLabelMapping: providerDetails,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "region__in",
|
|
||||||
labelCheckboxGroup: "Region",
|
|
||||||
values: uniqueRegions,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "service__in",
|
|
||||||
labelCheckboxGroup: "Service",
|
|
||||||
values: uniqueServices,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "groups__in",
|
|
||||||
labelCheckboxGroup: "Group",
|
|
||||||
values: uniqueGroups,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
/>
|
||||||
<Suspense key={searchParamsKey} fallback={<SkeletonTableResources />}>
|
<Suspense key={searchParamsKey} fallback={<SkeletonTableResources />}>
|
||||||
<SSRDataTable searchParams={resolvedSearchParams} />
|
<SSRDataTable searchParams={resolvedSearchParams} />
|
||||||
|
|||||||
50
ui/components/resources/resources-filters.tsx
Normal file
50
ui/components/resources/resources-filters.tsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { DataTableFilterCustom } from "@/components/ui/table";
|
||||||
|
import { getGroupLabel } from "@/lib/categories";
|
||||||
|
import { FilterEntity } from "@/types";
|
||||||
|
|
||||||
|
interface ResourcesFiltersProps {
|
||||||
|
providerIds: string[];
|
||||||
|
providerDetails: { [id: string]: FilterEntity }[];
|
||||||
|
uniqueRegions: string[];
|
||||||
|
uniqueServices: string[];
|
||||||
|
uniqueGroups: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ResourcesFilters = ({
|
||||||
|
providerIds,
|
||||||
|
providerDetails,
|
||||||
|
uniqueRegions,
|
||||||
|
uniqueServices,
|
||||||
|
uniqueGroups,
|
||||||
|
}: ResourcesFiltersProps) => {
|
||||||
|
return (
|
||||||
|
<DataTableFilterCustom
|
||||||
|
filters={[
|
||||||
|
{
|
||||||
|
key: "provider__in",
|
||||||
|
labelCheckboxGroup: "Provider",
|
||||||
|
values: providerIds,
|
||||||
|
valueLabelMapping: providerDetails,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "region__in",
|
||||||
|
labelCheckboxGroup: "Region",
|
||||||
|
values: uniqueRegions,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "service__in",
|
||||||
|
labelCheckboxGroup: "Service",
|
||||||
|
values: uniqueServices,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "groups__in",
|
||||||
|
labelCheckboxGroup: "Resource Group",
|
||||||
|
values: uniqueGroups,
|
||||||
|
labelFormatter: getGroupLabel,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user