import { zodResolver } from '@hookform/resolvers/zod'; import { FormProvider, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; import { H2Title, Section } from 'twenty-ui'; import { z } from 'zod'; import { useCreateOneObjectMetadataItem } from '@/object-metadata/hooks/useCreateOneObjectMetadataItem'; import { getObjectSlug } from '@/object-metadata/utils/getObjectSlug'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsDataModelObjectAboutForm, settingsDataModelObjectAboutFormSchema, } from '@/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm'; import { settingsCreateObjectInputSchema } from '@/settings/data-model/validation-schemas/settingsCreateObjectInputSchema'; import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { SettingsPath } from '@/types/SettingsPath'; import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; const newObjectFormSchema = settingsDataModelObjectAboutFormSchema; type SettingsDataModelNewObjectFormValues = z.infer; export const SettingsNewObject = () => { const navigate = useNavigate(); const { enqueueSnackBar } = useSnackBar(); const { createOneObjectMetadataItem, findManyRecordsCache } = useCreateOneObjectMetadataItem(); const settingsObjectsPagePath = getSettingsPagePath(SettingsPath.Objects); const formConfig = useForm({ mode: 'onTouched', resolver: zodResolver(newObjectFormSchema), }); const { isValid, isSubmitting } = formConfig.formState; const canSave = isValid && !isSubmitting; const handleSave = async ( formValues: SettingsDataModelNewObjectFormValues, ) => { try { const { data: response } = await createOneObjectMetadataItem( settingsCreateObjectInputSchema.parse(formValues), ); navigate( response ? `${settingsObjectsPagePath}/${getObjectSlug( response.createOneObject, )}` : settingsObjectsPagePath, ); await findManyRecordsCache(); } catch (error) { enqueueSnackBar((error as Error).message, { variant: SnackBarVariant.Error, }); } }; return ( // eslint-disable-next-line react/jsx-props-no-spreading navigate(settingsObjectsPagePath)} onSave={formConfig.handleSubmit(handleSave)} /> } >
); };