diff --git a/packages/twenty-front/src/pages/settings/developers/webhooks/SettingsDevelopersWebhooksNew.tsx b/packages/twenty-front/src/pages/settings/developers/webhooks/SettingsDevelopersWebhooksNew.tsx index 4de247f31e0a..822ebf75bc8c 100644 --- a/packages/twenty-front/src/pages/settings/developers/webhooks/SettingsDevelopersWebhooksNew.tsx +++ b/packages/twenty-front/src/pages/settings/developers/webhooks/SettingsDevelopersWebhooksNew.tsx @@ -13,6 +13,7 @@ import { TextInput } from '@/ui/input/components/TextInput'; import { SubMenuTopBarContainer } from '@/ui/layout/page/SubMenuTopBarContainer'; import { Section } from '@/ui/layout/section/components/Section'; import { Breadcrumb } from '@/ui/navigation/bread-crumb/components/Breadcrumb'; +import { isURL } from '~/utils/is-url'; export const SettingsDevelopersWebhooksNew = () => { const navigate = useNavigate(); @@ -23,11 +24,20 @@ export const SettingsDevelopersWebhooksNew = () => { targetUrl: '', operation: '*.*', }); + const [errorMessage, setErrorMessage] = useState(); const { createOneRecord: createOneWebhook } = useCreateOneRecord({ objectNameSingular: CoreObjectNameSingular.Webhook, }); const handleSave = async () => { + setErrorMessage(undefined); + + if (!isURL(formValues.targetUrl)) { + setErrorMessage('Invalid webhook URL'); + return; + } + const newWebhook = await createOneWebhook?.(formValues); + if (!newWebhook) { return; } @@ -66,6 +76,7 @@ export const SettingsDevelopersWebhooksNew = () => { targetUrl: value, })); }} + error={errorMessage} fullWidth />