mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-23 20:42:02 +00:00
4d5676f00e
Co-authored-by: Alan Buscaglia <alanbuscaglia@MacBook-Pro.local> Co-authored-by: alejandrobailo <alejandrobailo94@gmail.com> Co-authored-by: César Arroba <cesar@prowler.com> Co-authored-by: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com>
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
"use client";
|
|
|
|
import { Select, SelectItem } from "@heroui/select";
|
|
import { Control, FieldPath, FieldValues } from "react-hook-form";
|
|
|
|
import { EntityInfoShort } from "@/components/ui/entities";
|
|
import { FormControl, FormField, FormMessage } from "@/components/ui/form";
|
|
|
|
interface SelectScanProviderProps<
|
|
TFieldValues extends FieldValues = FieldValues,
|
|
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
> {
|
|
providers: {
|
|
providerId: string;
|
|
alias: string;
|
|
providerType: string;
|
|
uid: string;
|
|
connected: boolean;
|
|
}[];
|
|
control: Control<TFieldValues>;
|
|
name: TName;
|
|
}
|
|
|
|
export const SelectScanProvider = <
|
|
TFieldValues extends FieldValues = FieldValues,
|
|
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
>({
|
|
providers,
|
|
control,
|
|
name,
|
|
}: SelectScanProviderProps<TFieldValues, TName>) => {
|
|
return (
|
|
<FormField
|
|
control={control}
|
|
name={name}
|
|
render={({ field }) => (
|
|
<>
|
|
<FormControl>
|
|
<Select
|
|
aria-label="Select a cloud provider"
|
|
placeholder="Choose a cloud provider"
|
|
labelPlacement="outside"
|
|
classNames={{
|
|
selectorIcon: "right-2",
|
|
label:
|
|
"tracking-tight font-light !text-default-700 text-xs z-0!",
|
|
value: "text-default-500 text-small",
|
|
}}
|
|
label="Select a cloud provider to launch a scan"
|
|
size="lg"
|
|
selectedKeys={field.value ? new Set([field.value]) : new Set()}
|
|
onSelectionChange={(keys) => {
|
|
const selectedValue = Array.from(keys)[0]?.toString();
|
|
field.onChange(selectedValue);
|
|
}}
|
|
renderValue={() => {
|
|
const selectedItem = providers.find(
|
|
(item) => item.providerId === field.value,
|
|
);
|
|
return selectedItem ? (
|
|
<div className="flex items-center gap-2">
|
|
<EntityInfoShort
|
|
cloudProvider={
|
|
selectedItem.providerType as
|
|
| "aws"
|
|
| "azure"
|
|
| "gcp"
|
|
| "kubernetes"
|
|
}
|
|
entityAlias={selectedItem.alias}
|
|
entityId={selectedItem.uid}
|
|
hideCopyButton
|
|
/>
|
|
</div>
|
|
) : (
|
|
"Choose a cloud provider"
|
|
);
|
|
}}
|
|
>
|
|
{providers.map((item) => (
|
|
<SelectItem
|
|
key={item.providerId}
|
|
textValue={`${item.providerType} - ${item.alias || ""} ${item.uid}`}
|
|
aria-label={`${item.providerType} provider ${item.alias}`}
|
|
>
|
|
<div className="flex items-center gap-2">
|
|
<EntityInfoShort
|
|
cloudProvider={
|
|
item.providerType as
|
|
| "aws"
|
|
| "azure"
|
|
| "gcp"
|
|
| "kubernetes"
|
|
}
|
|
entityAlias={item.alias}
|
|
entityId={item.uid}
|
|
hideCopyButton
|
|
/>
|
|
</div>
|
|
</SelectItem>
|
|
))}
|
|
</Select>
|
|
</FormControl>
|
|
<FormMessage className="text-system-error dark:text-system-error" />
|
|
</>
|
|
)}
|
|
/>
|
|
);
|
|
};
|