import { useCallback, useState } from 'react'; import { useForm, Controller, SubmitHandler } from 'react-hook-form'; import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; import { useMediaQuery } from 'usehooks-ts'; import { AuctionData } from 'gql-client'; import { ArrowRightCircleFilledIcon, LoadingIcon, } from 'components/shared/CustomIcon'; import { Heading } from '../../shared/Heading'; import { Button } from '../../shared/Button'; import { Select, SelectOption } from 'components/shared/Select'; import { Input } from 'components/shared/Input'; import { useToast } from 'components/shared/Toast'; import { useGQLClient } from '../../../context/GQLClientContext'; type ConfigureFormValues = { option: string; lrn?: string; numProviders?: number; maxPrice?: string; }; const Configure = () => { const [searchParams] = useSearchParams(); const templateId = searchParams.get('templateId'); const location = useLocation(); const { templateOwner, templateRepo, owner, name, isPrivate, orgSlug } = location.state || {}; const navigate = useNavigate(); const { toast, dismiss } = useToast(); const client = useGQLClient(); const [isLoading, setIsLoading] = useState(false); const { handleSubmit, control, watch } = useForm({ defaultValues: { option: 'LRN' }, }); const selectedOption = watch('option'); const isTabletView = useMediaQuery('(min-width: 720px)'); // md: const buttonSize = isTabletView ? { size: 'lg' as const } : {}; const onSubmit: SubmitHandler = useCallback( async (data) => { setIsLoading(true); try { const projectData: any = { templateOwner, templateRepo, owner, name, isPrivate }; let lrn: string | undefined; let auctionData: AuctionData | undefined; if (data.option === 'LRN') { lrn = data.lrn; } else if (data.option === 'Auction') { auctionData = { numProviders: Number(data.numProviders!), maxPrice: (data.maxPrice!).toString() }; } const { addProjectFromTemplate } = await client.addProjectFromTemplate( orgSlug, projectData, lrn, auctionData ); navigate(`/${orgSlug}/projects/create/template/deploy?projectId=${addProjectFromTemplate.id}&templateId=${templateId}`); } catch (error) { console.error('Error creating project:', error); toast({ id: 'error-creating-project', title: 'Error creating project', variant: 'error', onDismiss: dismiss, }); } finally { setIsLoading(false); } }, [client, isPrivate, templateId, navigate, dismiss, toast] ); return (
Configure deployment
Choose an option ( )} />
)} {selectedOption === 'Auction' && ( <>
Num Providers ( )} />
Max Price ( )} />
)}
); }; export default Configure;