import PropTypes from 'prop-types' import { useState, useEffect } from 'react' import axios from 'axios' import { useMediaQuery } from 'react-responsive' import { Form, Input, Button, Typography, Flex, Steps, Descriptions, Divider } from 'antd' import { useMessageContext } from '../../context/MessageContext' import config from '../../../../config' const { Title } = Typography const initialNewUserForm = { username: '', name: '', firstName: '', lastName: '', email: '' } const NewUser = ({ onOk, reset }) => { const { showError } = useMessageContext() const [newUserLoading, setNewUserLoading] = useState(false) const [currentStep, setCurrentStep] = useState(0) const [nextEnabled, setNextEnabled] = useState(false) const [newUserForm] = Form.useForm() const [newUserFormValues, setNewUserFormValues] = useState(initialNewUserForm) const isMobile = useMediaQuery({ maxWidth: 768 }) const newUserFormUpdateValues = Form.useWatch([], newUserForm) useEffect(() => { newUserForm .validateFields({ validateOnly: true }) .then(() => setNextEnabled(true)) .catch(() => setNextEnabled(false)) }, [newUserForm, newUserFormUpdateValues]) const summaryItems = [ { key: 'username', label: 'Username', children: newUserFormValues.username }, { key: 'name', label: 'Full Name', children: newUserFormValues.name || 'n/a' }, { key: 'firstName', label: 'First Name', children: newUserFormValues.firstName || 'n/a' }, { key: 'lastName', label: 'Last Name', children: newUserFormValues.lastName || 'n/a' }, { key: 'email', label: 'Email', children: newUserFormValues.email || 'n/a' } ] useEffect(() => { if (reset) { newUserForm.resetFields() } }, [reset, newUserForm]) const handleNewUser = async () => { setNewUserLoading(true) try { await axios.post(`${config.backendUrl}/users`, newUserFormValues, { withCredentials: true }) onOk() } catch (error) { showError('Error creating new user: ' + error.message) } finally { setNewUserLoading(false) } } const steps = [ { title: 'Details', key: 'details', content: ( <> ) }, { title: 'Summary', key: 'summary', content: } ] return ( {!isMobile && (
)} {!isMobile && } New User
setNewUserFormValues((prevValues) => ({ ...prevValues, ...changedValues })) } initialValues={initialNewUserForm} >
{steps[currentStep].content}
{currentStep < steps.length - 1 ? ( ) : ( )}
) } NewUser.propTypes = { onOk: PropTypes.func.isRequired, reset: PropTypes.bool } export default NewUser