import React, { useCallback, useState } from 'react'
import PropTypes from 'prop-types'
import {
Edit,
FormWithRedirect,
TextInput,
BooleanInput,
Confirm,
required,
SaveButton,
useTranslate,
useMutation,
useNotify,
useRedirect,
Toolbar,
} from 'react-admin'
import { Typography, Box } from '@material-ui/core'
import { makeStyles } from '@material-ui/core/styles'
import DeleteLibraryButton from './DeleteLibraryButton'
import {
ReadOnlyDateField,
ReadOnlyDurationField,
ReadOnlyNumberField,
ReadOnlySizeField,
Title,
} from '../common'
import config from '../config'
import { PIDInputs } from './PIDInput'
import { pidConfigChanged } from './pidPresets'
const useStyles = makeStyles({
toolbar: {
display: 'flex',
justifyContent: 'space-between',
},
})
const readOnlyProps = { resource: 'library', fullWidth: true }
const LibraryTitle = ({ record }) => {
const translate = useTranslate()
const resourceName = translate('resources.library.name', { smart_count: 1 })
return (
)
}
const CustomToolbar = ({ showDelete, ...props }) => (
{showDelete && (
)}
)
export const LibraryEditForm = ({ formProps, canEditPath, canDelete }) => {
const translate = useTranslate()
const [confirmOpen, setConfirmOpen] = useState(false)
// Every submit path (Save button and Enter key) goes through here, so a PID change always asks first
const submit = () => {
if (
pidConfigChanged(
formProps.form.getState().values,
formProps.record,
config,
)
) {
setConfirmOpen(true)
return
}
formProps.handleSubmit()
}
const handleConfirm = () => {
setConfirmOpen(false)
formProps.handleSubmit()
}
return (
)
}
LibraryEditForm.propTypes = {
formProps: PropTypes.object.isRequired,
canEditPath: PropTypes.bool,
canDelete: PropTypes.bool,
}
const LibraryEdit = (props) => {
const [mutate] = useMutation()
const notify = useNotify()
const redirect = useRedirect()
// Library ID 1 is protected (main library)
const canDelete = props.id !== '1'
const canEditPath = props.id !== '1'
const save = useCallback(
async (values) => {
try {
await mutate(
{
type: 'update',
resource: 'library',
payload: { id: values.id, data: values },
},
{ returnPromise: true },
)
notify('resources.library.notifications.updated', 'info', {
smart_count: 1,
})
redirect('/library')
} catch (error) {
if (error.body && error.body.errors) {
return error.body.errors
}
}
},
[mutate, notify, redirect],
)
return (
} undoable={false} {...props}>
(
)}
/>
)
}
export default LibraryEdit