import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { DateTime } from 'luxon'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsHeaderContainer } from '@/settings/components/SettingsHeaderContainer'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { ExpirationDates } from '@/settings/developers/constants/expirationDates'; import { useGeneratedApiKeys } from '@/settings/developers/hooks/useGeneratedApiKeys'; import { ApiKey } from '@/settings/developers/types/ApiKey'; import { IconSettings } from '@/ui/display/icon'; import { H2Title } from '@/ui/display/typography/components/H2Title'; import { Select } from '@/ui/input/components/Select'; 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 { useGenerateApiKeyTokenMutation } from '~/generated/graphql'; export const SettingsDevelopersApiKeysNew = () => { const [generateOneApiKeyToken] = useGenerateApiKeyTokenMutation(); const navigate = useNavigate(); const setGeneratedApi = useGeneratedApiKeys(); const [formValues, setFormValues] = useState<{ name: string; expirationDate: number | null; }>({ expirationDate: ExpirationDates[0].value, name: '', }); const { createOneRecord: createOneApiKey } = useCreateOneRecord({ objectNameSingular: 'apiKey', }); const onSave = async () => { const expiresAt = DateTime.now() .plus({ days: formValues.expirationDate ?? 30 }) .toString(); const newApiKey = await createOneApiKey?.({ name: formValues.name, expiresAt, }); if (!newApiKey) { return; } const tokenData = await generateOneApiKeyToken({ variables: { apiKeyId: newApiKey.id, expiresAt: expiresAt, }, }); if (tokenData.data?.generateApiKeyToken) { setGeneratedApi(newApiKey.id, tokenData.data.generateApiKeyToken.token); navigate(`/settings/developers/api-keys/${newApiKey.id}`); } }; const canSave = !!formValues.name && createOneApiKey; return ( { navigate('/settings/developers/api-keys'); }} onSave={onSave} />
{ setFormValues((prevState) => ({ ...prevState, name: value, })); }} fullWidth />