import React, { useCallback } from 'react'
import { makeStyles } from '@material-ui/core/styles'
import {
TextInput,
BooleanInput,
DateField,
PasswordInput,
Edit,
required,
email,
SimpleForm,
useTranslate,
Toolbar,
SaveButton,
useMutation,
useNotify,
useRedirect,
useRefresh,
FormDataConsumer,
usePermissions,
} from 'react-admin'
import { Title } from '../common'
import DeleteUserButton from './DeleteUserButton'
const useStyles = makeStyles({
toolbar: {
display: 'flex',
justifyContent: 'space-between',
},
})
const UserTitle = ({ record }) => {
const translate = useTranslate()
const resourceName = translate('resources.user.name', { smart_count: 1 })
return
}
const UserToolbar = ({ showDelete, ...props }) => (
{showDelete && }
)
const CurrentPasswordInput = ({ formData, isMyself, ...rest }) => {
const { permissions } = usePermissions()
return formData.changePassword && (isMyself || permissions !== 'admin') ? (
) : null
}
const NewPasswordInput = ({ formData, ...rest }) => {
const translate = useTranslate()
return formData.changePassword ? (
) : null
}
const UserEdit = (props) => {
const { permissions } = props
const translate = useTranslate()
const [mutate] = useMutation()
const notify = useNotify()
const redirect = useRedirect()
const refresh = useRefresh()
const isMyself = props.id === localStorage.getItem('userId')
const getNameHelperText = () =>
isMyself && {
helperText: translate('resources.user.helperTexts.name'),
}
const canDelete = permissions === 'admin' && !isMyself
const save = useCallback(
async (values) => {
try {
await mutate(
{
type: 'update',
resource: 'user',
payload: { id: values.id, data: values },
},
{ returnPromise: true }
)
notify('resources.user.notifications.updated', 'info', {
smart_count: 1,
})
permissions === 'admin' ? redirect('/user') : refresh()
} catch (error) {
if (error.body.errors) {
return error.body.errors
}
}
},
[mutate, notify, permissions, redirect, refresh]
)
return (
} undoable={false} {...props}>
}
save={save}
>
{permissions === 'admin' && (
)}
{(formDataProps) => (
)}
{(formDataProps) => }
{permissions === 'admin' && (
)}
{/**/}
)
}
export default UserEdit