"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { AnimatePresence, motion } from "framer-motion"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { scanOnDemand } from "@/actions/scans"; import { RocketIcon } from "@/components/icons"; import { CustomButton, CustomInput } from "@/components/ui/custom"; import { Form } from "@/components/ui/form"; import { toast } from "@/components/ui/toast"; import { onDemandScanFormSchema } from "@/types"; import { SelectScanProvider } from "./select-scan-provider"; type ProviderInfo = { providerId: string; alias: string; providerType: string; uid: string; connected: boolean; }; export const LaunchScanWorkflow = ({ providers, }: { providers: ProviderInfo[]; }) => { const formSchema = z.object({ ...onDemandScanFormSchema().shape, scanName: z .string() .min(3, "Must have at least 3 characters") .or(z.literal("")) .optional(), }); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { providerId: "", scanName: "", scannerArgs: undefined, }, }); const isLoading = form.formState.isSubmitting; const onSubmitClient = async (values: z.infer) => { const formValues = { ...values }; const formData = new FormData(); // Loop through form values and add to formData Object.entries(formValues).forEach( ([key, value]) => value !== undefined && formData.append( key, typeof value === "object" ? JSON.stringify(value) : value, ), ); const data = await scanOnDemand(formData); if (data?.errors && data.errors.length > 0) { const error = data.errors[0]; const errorMessage = `${error.detail}`; toast({ variant: "destructive", title: "Oops! Something went wrong", description: errorMessage, }); } else { toast({ title: "Success!", description: "The scan was launched successfully.", }); // Reset form after successful submission form.reset(); } }; return (
{form.watch("providerId") && ( <>
} > {isLoading ? <>Loading : Start now} form.reset()} className="w-fit border-gray-200 bg-transparent" ariaLabel="Clear form" variant="bordered" size="sm" radius="sm" > Cancel
)}
{/*
{form.watch("providerId") && ( )}
*/}
); };