import { Button } from '@mui/material'; import { type FormikValues, useFormikContext } from 'formik'; import { not } from 'ramda'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { makeStyles } from 'tss-react/mui'; import SaveButton from '../Button/Save'; import { getNormalizedId, useMemoComponent } from '../utils'; import { labelReset, labelSave, labelSaved, labelSaving } from './translatedLabels'; const useStyles = makeStyles()((theme) => ({ buttons: { alignItems: 'center', columnGap: theme.spacing(2), display: 'flex', flexDirection: 'row', justifyContent: 'flex-end' } })); const FormButtons = (): JSX.Element => { const { classes } = useStyles(); const { t } = useTranslation(); const [submitted, setSubmitted] = useState(false); const { isSubmitting, dirty, isValid, submitForm, resetForm } = useFormikContext(); const reset = (): void => { resetForm(); }; const submit = (): Promise => submitForm() .then(() => { setSubmitted(true); setTimeout(() => { setSubmitted(false); }, 700); }) .catch(() => undefined); const canSubmit = not(isSubmitting) && dirty && isValid && not(submitted); const canReset = not(isSubmitting) && dirty && not(submitted); return useMemoComponent({ Component: (
), memoProps: [canSubmit, canReset, isSubmitting, submitted, classes] }); }; export default FormButtons;