diff --git a/app/(prowler)/providers/page.tsx b/app/(prowler)/providers/page.tsx index a234ffaa8c..0d86b9ff2f 100644 --- a/app/(prowler)/providers/page.tsx +++ b/app/(prowler)/providers/page.tsx @@ -2,6 +2,7 @@ import { Spacer } from "@nextui-org/react"; import { Suspense } from "react"; import { getProvider } from "@/actions"; +import { FilterControls } from "@/components/filters"; import { AddProviderModal, ColumnsProvider, @@ -22,6 +23,8 @@ export default async function Providers({ <>
+ +
diff --git a/components/filters/CustomDatePicker.tsx b/components/filters/CustomDatePicker.tsx index 667078bc8f..5bc7a7d6d5 100644 --- a/components/filters/CustomDatePicker.tsx +++ b/components/filters/CustomDatePicker.tsx @@ -7,21 +7,41 @@ import { today, } from "@internationalized/date"; import { Button, ButtonGroup, DatePicker } from "@nextui-org/react"; -import { useDateFormatter, useLocale } from "@react-aria/i18n"; -import React from "react"; +import { useLocale } from "@react-aria/i18n"; +import { useRouter, useSearchParams } from "next/navigation"; +import React, { useCallback } from "react"; export const CustomDatePicker = () => { + const router = useRouter(); + const searchParams = useSearchParams(); const defaultDate = today(getLocalTimeZone()); const [value, setValue] = React.useState(defaultDate); const { locale } = useLocale(); - const formatter = useDateFormatter({ dateStyle: "full" }); const now = today(getLocalTimeZone()); const nextWeek = startOfWeek(now.add({ weeks: 1 }), locale); const nextMonth = startOfMonth(now.add({ months: 1 })); + const applyDateFilter = useCallback( + (date: any) => { + const params = new URLSearchParams(searchParams.toString()); + if (date) { + params.set("filter[updated_at__lte]", date.toString()); + } else { + params.delete("filter[updated_at__lte]"); + } + router.push(`?${params.toString()}`, { scroll: false }); + }, + [router, searchParams], + ); + + const handleDateChange = (newValue: any) => { + setValue(newValue); + applyDateFilter(newValue); + }; + return (
{ size="sm" variant="bordered" > - - - + + + } calendarProps={{ @@ -50,15 +74,11 @@ export const CustomDatePicker = () => { }, }} value={value} - onChange={setValue} + onChange={handleDateChange} label="Scan date" size="sm" variant="flat" /> -

- Selected date:{" "} - {value ? formatter.format(value.toDate(getLocalTimeZone())) : "--"} -

); }; diff --git a/components/filters/CustomProviderInputs.tsx b/components/filters/CustomProviderInputs.tsx index d97b03b842..373b6255b1 100644 --- a/components/filters/CustomProviderInputs.tsx +++ b/components/filters/CustomProviderInputs.tsx @@ -4,12 +4,13 @@ import { AWSProviderBadge, AzureProviderBadge, GCPProviderBadge, + KS8ProviderBadge, } from "../icons/providers-badge"; export const CustomProviderInputAWS = () => { return (
- +

Amazon Web Services

); @@ -18,7 +19,7 @@ export const CustomProviderInputAWS = () => { export const CustomProviderInputAzure = () => { return (
- +

Azure

); @@ -27,8 +28,17 @@ export const CustomProviderInputAzure = () => { export const CustomProviderInputGCP = () => { return (
- +

Google Cloud Platform

); }; + +export const CustomProviderInputKubernetes = () => { + return ( +
+ +

Kubernetes

+
+ ); +}; diff --git a/components/filters/CustomSelectProvider.tsx b/components/filters/CustomSelectProvider.tsx index 222793fdf8..dd4254fdd3 100644 --- a/components/filters/CustomSelectProvider.tsx +++ b/components/filters/CustomSelectProvider.tsx @@ -1,11 +1,14 @@ "use client"; import { Select, SelectItem } from "@nextui-org/react"; +import { useRouter, useSearchParams } from "next/navigation"; +import { useCallback, useEffect, useState } from "react"; import { CustomProviderInputAWS, CustomProviderInputAzure, CustomProviderInputGCP, + CustomProviderInputKubernetes, } from "./CustomProviderInputs"; const dataInputsProvider = [ @@ -27,11 +30,33 @@ const dataInputsProvider = [ { key: "kubernetes", label: "Kubernetes", - value: , + value: , }, ]; export const CustomSelectProvider = () => { + const router = useRouter(); + const searchParams = useSearchParams(); + const [selectedProvider, setSelectedProvider] = useState(""); + + const applyProviderFilter = useCallback( + (value: string) => { + const params = new URLSearchParams(searchParams.toString()); + if (value) { + params.set("filter[provider]", value); + } else { + params.delete("filter[provider]"); + } + router.push(`?${params.toString()}`, { scroll: false }); + }, + [router, searchParams], + ); + + useEffect(() => { + const providerFromUrl = searchParams.get("filter[provider]") || ""; + setSelectedProvider(providerFromUrl); + }, [searchParams]); + return (