import { zodResolver } from '@hookform/resolvers/zod'; import { Trans, useLingui } from '@lingui/react/macro'; import { FormProvider, useForm } from 'react-hook-form'; import { H2Title, Section } from 'twenty-ui'; import { z } from 'zod'; import { useCreateOneObjectMetadataItem } from '@/object-metadata/hooks/useCreateOneObjectMetadataItem'; 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 { 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'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; const newObjectFormSchema = settingsDataModelObjectAboutFormSchema; type SettingsDataModelNewObjectFormValues = z.infer; export const SettingsNewObject = () => { const navigate = useNavigateSettings(); const { t } = useLingui(); const { enqueueSnackBar } = useSnackBar(); const methods = useForm({ defaultValues: {}, resolver: zodResolver(newObjectFormSchema), }); const { handleSubmit } = methods; const { createOneObjectMetadataItem } = useCreateOneObjectMetadataItem(); const onSubmit = async (data: SettingsDataModelNewObjectFormValues) => { try { const createObjectInput = settingsCreateObjectInputSchema.parse(data); await createOneObjectMetadataItem(createObjectInput); enqueueSnackBar(t`Object created successfully`, { variant: SnackBarVariant.Success, }); navigate(SettingsPath.Objects); } catch (error) { if (error instanceof z.ZodError) { enqueueSnackBar(t`Invalid object data`, { variant: SnackBarVariant.Error, }); } else { enqueueSnackBar(t`Failed to create object`, { variant: SnackBarVariant.Error, }); } } }; return ( <> Workspace, href: getSettingsPath(SettingsPath.Workspace), }, { children: Objects, href: getSettingsPath(SettingsPath.Objects), }, { children: New }, ]} > {/* eslint-disable-next-line react/jsx-props-no-spreading */}
navigate(SettingsPath.Objects)} />
); };