import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { useNavigate } from 'react-router-dom'; 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 { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { SettingsPath } from '@/types/SettingsPath'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useState } from 'react'; import { Key } from 'ts-key-enum'; import { useHotkeyScopeOnMount } from '~/hooks/useHotkeyScopeOnMount'; import { isDefined } from '~/utils/isDefined'; export const SettingsServerlessFunctionsNew = () => { const navigate = useNavigate(); 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( getSettingsPagePath(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(getSettingsPagePath(SettingsPath.ServerlessFunctions)); }, SettingsServerlessFunctionHotkeyScope.ServerlessFunctionNew, ); return ( { navigate('/settings/functions'); }} onSave={handleSave} /> } > ); }; export default SettingsServerlessFunctionsNew;