import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { H2Title, isDefined, Section } from 'twenty-ui'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { Webhook } from '@/settings/developers/types/webhook/Webhook'; import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { SettingsPath } from '@/types/SettingsPath'; import { TextInput } from '@/ui/input/components/TextInput'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { isValidUrl } from '~/utils/url/isValidUrl'; export const SettingsDevelopersWebhooksNew = () => { const navigate = useNavigate(); const [formValues, setFormValues] = useState<{ targetUrl: string; operations: string[]; }>({ targetUrl: '', operations: ['*.*'], }); const [isTargetUrlValid, setIsTargetUrlValid] = useState(true); const { createOneRecord: createOneWebhook } = useCreateOneRecord({ objectNameSingular: CoreObjectNameSingular.Webhook, }); const handleValidate = async (value: string) => { const trimmedUrl = value.trim(); setIsTargetUrlValid(isValidUrl(trimmedUrl)); }; const handleSave = async () => { const newWebhook = await createOneWebhook?.(formValues); if (!newWebhook) { return; } navigate(`/settings/developers/webhooks/${newWebhook.id}`); }; const canSave = !!formValues.targetUrl && isTargetUrlValid && isDefined(createOneWebhook); // TODO: refactor use useScopedHotkeys const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && canSave) { handleSave(); } }; const handleChange = (value: string) => { setFormValues((prevState) => ({ ...prevState, targetUrl: value, })); handleValidate(value); }; return ( { navigate(getSettingsPagePath(SettingsPath.Developers)); }} onSave={handleSave} /> } >
); };