import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { SettingsServerlessFunctionNewForm } from '@/settings/serverless-functions/components/SettingsServerlessFunctionNewForm'; import { useCreateOneServerlessFunction } from '@/settings/serverless-functions/hooks/useCreateOneServerlessFunction'; import { ServerlessFunctionNewFormValues } from '@/settings/serverless-functions/hooks/useServerlessFunctionUpdateFormState'; import { SettingsServerlessFunctionHotkeyScope } from '@/settings/serverless-functions/types/SettingsServerlessFunctionHotKeyScope'; import { SettingsPath } from '@/types/SettingsPath'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useState } from 'react'; import { Key } from 'ts-key-enum'; import { isDefined } from 'twenty-shared'; import { useHotkeyScopeOnMount } from '~/hooks/useHotkeyScopeOnMount'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; export const SettingsServerlessFunctionsNew = () => { const navigate = useNavigateSettings(); const [formValues, setFormValues] = useState( { name: '', description: '', }, ); const { createOneServerlessFunction } = useCreateOneServerlessFunction(); const handleSave = async () => { const newServerlessFunction = await createOneServerlessFunction({ name: formValues.name, description: formValues.description, }); if (!isDefined(newServerlessFunction?.data)) { return; } navigate(SettingsPath.ServerlessFunctions, { id: newServerlessFunction.data.createOneServerlessFunction.id, }); }; const onChange = (key: string) => { return (value: string) => { setFormValues((prevState) => ({ ...prevState, [key]: value, })); }; }; const canSave = !!formValues.name && createOneServerlessFunction; useHotkeyScopeOnMount( SettingsServerlessFunctionHotkeyScope.ServerlessFunctionNew, ); useScopedHotkeys( [Key.Enter], () => { if (canSave !== false) { handleSave(); } }, SettingsServerlessFunctionHotkeyScope.ServerlessFunctionNew, [canSave], ); useScopedHotkeys( [Key.Escape], () => { navigate(SettingsPath.ServerlessFunctions); }, SettingsServerlessFunctionHotkeyScope.ServerlessFunctionNew, ); return ( { navigate(SettingsPath.ServerlessFunctions); }} onSave={handleSave} /> } > ); }; export default SettingsServerlessFunctionsNew;