import React, { useCallback } from 'react'
import {
Create,
SimpleForm,
TextInput,
BooleanInput,
required,
useTranslate,
useMutation,
useNotify,
useRedirect,
} from 'react-admin'
import { Title } from '../common'
const LibraryCreate = (props) => {
const translate = useTranslate()
const [mutate] = useMutation()
const notify = useNotify()
const redirect = useRedirect()
const resourceName = translate('resources.library.name', { smart_count: 1 })
const title = translate('ra.page.create', {
name: `${resourceName}`,
})
const save = useCallback(
async (values) => {
try {
await mutate(
{
type: 'create',
resource: 'library',
payload: { data: values },
},
{ returnPromise: true },
)
notify('resources.library.notifications.created', 'info', {
smart_count: 1,
})
redirect('/library')
} catch (error) {
// Handle validation errors with proper field mapping
if (error.body && error.body.errors) {
return error.body.errors
}
// Handle other structured errors from the server
if (error.body && error.body.error) {
const errorMsg = error.body.error
// Handle database constraint violations
if (errorMsg.includes('UNIQUE constraint failed: library.name')) {
return { name: 'ra.validation.unique' }
}
if (errorMsg.includes('UNIQUE constraint failed: library.path')) {
return { path: 'ra.validation.unique' }
}
// Show a general notification for other server errors
notify(errorMsg, 'error')
return
}
// Fallback for unexpected error formats
const fallbackMessage =
error.message ||
(typeof error === 'string' ? error : 'An unexpected error occurred')
notify(fallbackMessage, 'error')
}
},
[mutate, notify, redirect],
)
return (
} {...props}>
)
}
export default LibraryCreate