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.toLowerCase(), 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

); };