import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { z } from "zod"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { useEffect } from "react"; import { api } from "@/utils/api"; import { toast } from "sonner"; const DockerProviderSchema = z.object({ dockerImage: z.string().min(1, { message: "Docker image is required", }), username: z.string().optional(), password: z.string().optional(), }); type DockerProvider = z.infer; interface Props { applicationId: string; } export const SaveDockerProvider = ({ applicationId }: Props) => { const { data, refetch } = api.application.one.useQuery({ applicationId }); const { mutateAsync } = api.application.saveDockerProvider.useMutation(); const form = useForm({ defaultValues: { dockerImage: "", password: "", username: "", }, resolver: zodResolver(DockerProviderSchema), }); useEffect(() => { if (data) { form.reset({ dockerImage: data.dockerImage || "", password: data.password || "", username: data.username || "", }); } }, [form.reset, data, form]); const onSubmit = async (values: DockerProvider) => { await mutateAsync({ dockerImage: values.dockerImage, password: values.password || null, applicationId, username: values.username || null, }) .then(async () => { toast.success("Docker Provider Saved"); await refetch(); }) .catch(() => { toast.error("Error to save the Docker provider"); }); }; return (
( Docker Image )} />
( Username )} />
( Password )} />
); };