import { FormEventHandler, Fragment, useEffect, useState } from "react"; import { Dialog, Transition } from "@headlessui/react"; import Button from "../buttons/Button"; import InputField from "../InputField"; type FormFields = { name: string; slug: string }; type Props = { isOpen?: boolean; isEditMode?: boolean; // on edit mode load up initial values initialValues?: FormFields; onClose: () => void; onCreateSubmit: (data: FormFields) => void; onEditSubmit: (data: FormFields) => void; }; // TODO: Migrate to better form management and validation. Preferable react-hook-form + yup /** * The dialog modal for when the user wants to create a new workspace * @param {*} param0 * @returns */ export const AddUpdateEnvironmentDialog = ({ isOpen, onClose, onCreateSubmit, onEditSubmit, initialValues, isEditMode, }: Props) => { const [formInput, setFormInput] = useState({ name: "", slug: "", }); // This use effect can be removed when the unmount is happening from outside the component // When unmount happens outside state gets unmounted also useEffect(() => { setFormInput(initialValues || { name: "", slug: "" }); }, [isOpen]); // REFACTOR: Move to react-hook-form with yup for better form management const onInputChange = (fieldName: string, fieldValue: string) => { setFormInput((state) => ({ ...state, [fieldName]: fieldValue })); }; const onFormSubmit: FormEventHandler = (e) => { e.preventDefault(); const data = { name: formInput.name, slug: formInput.slug.toLowerCase(), }; if (isEditMode) { onEditSubmit(data); return; } onCreateSubmit(data); }; return (
{isEditMode ? "Update environment" : "Create a new environment"}
onInputChange("name", val)} type='varName' value={formInput.name} placeholder='' isRequired // error={error.length > 0} // errorText={error} />
onInputChange("slug", val)} type='varName' value={formInput.slug} placeholder='' isRequired // error={error.length > 0} // errorText={error} />

Slugs are shorthands used in cli to access environment

); };