import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Input, Modal, ModalContent } from "@app/components/v2"; import { useProject } from "@app/context"; import { useUpdateWsEnvironment } from "@app/hooks/api"; import { UsePopUpState } from "@app/hooks/usePopUp"; import { slugSchema } from "@app/lib/schemas"; type Props = { popUp: UsePopUpState<["updateEnv"]>; handlePopUpClose: (popUpName: keyof UsePopUpState<["updateEnv"]>) => void; handlePopUpToggle: (popUpName: keyof UsePopUpState<["updateEnv"]>, state?: boolean) => void; }; const schema = z.object({ name: z.string(), slug: slugSchema({ min: 1, max: 64 }) }); export type FormData = z.infer; export const UpdateEnvironmentModal = ({ popUp, handlePopUpClose, handlePopUpToggle }: Props) => { const { currentProject } = useProject(); const { mutateAsync, isPending } = useUpdateWsEnvironment(); const { control, handleSubmit, reset } = useForm({ resolver: zodResolver(schema), values: popUp.updateEnv.data as FormData }); const oldEnvId = (popUp?.updateEnv?.data as { id: string })?.id; const onFormSubmit = async ({ name, slug }: FormData) => { try { if (!currentProject?.id) return; await mutateAsync({ projectId: currentProject.id, name, slug, id: oldEnvId }); createNotification({ text: "Successfully updated environment", type: "success" }); handlePopUpClose("updateEnv"); } catch (err) { console.error(err); createNotification({ text: "Failed to update environment", type: "error" }); } }; return ( { handlePopUpToggle("updateEnv", isOpen); reset(); }} >
( )} /> ( )} />
); };