import React, { useCallback, useState } from 'react'; import { Box, Flex, Button, Modal, ModalOverlay, ModalContent, ModalHeader, ModalFooter, ModalBody, Input, Grid, useTheme, Card } from '@chakra-ui/react'; import { useSelectFile } from '@/hooks/useSelectFile'; import { useForm } from 'react-hook-form'; import { compressImg } from '@/utils/file'; import { getErrText } from '@/utils/tools'; import { useToast } from '@/hooks/useToast'; import { postCreateApp } from '@/api/app'; import { useRouter } from 'next/router'; import { appTemplates } from '@/constants/flow/ModuleTemplate'; import Avatar from '@/components/Avatar'; type FormType = { avatar: string; name: string; templateId: string; }; const CreateModal = ({ onClose, onSuccess }: { onClose: () => void; onSuccess: () => void }) => { const [refresh, setRefresh] = useState(false); const [creating, setCreating] = useState(false); const { toast } = useToast(); const router = useRouter(); const theme = useTheme(); const { register, setValue, getValues, handleSubmit } = useForm({ defaultValues: { avatar: '/icon/logo.png', name: '', templateId: appTemplates[0].id } }); const { File, onOpen: onOpenSelectFile } = useSelectFile({ fileType: '.jpg,.png', multiple: false }); const onSelectFile = useCallback( async (e: File[]) => { const file = e[0]; if (!file) return; try { const src = await compressImg({ file, maxW: 100, maxH: 100 }); setValue('avatar', src); setRefresh((state) => !state); } catch (err: any) { toast({ title: getErrText(err, '头像选择异常'), status: 'warning' }); } }, [setValue, toast] ); const onclickCreate = useCallback( async (data: FormType) => { setCreating(true); try { const id = await postCreateApp({ avatar: data.avatar, name: data.name, modules: appTemplates.find((item) => item.id === data.templateId)?.modules || [] }); toast({ title: '创建成功', status: 'success' }); router.push(`/app/detail?appId=${id}`); onClose(); onSuccess(); } catch (error) { toast({ title: getErrText(error, '创建应用异常'), status: 'error' }); } setCreating(false); }, [onClose, onSuccess, router, toast] ); return ( 开始创建你的 AI 应用 取个响亮的名字 从模板中选择 {appTemplates.map((item) => ( { setValue('templateId', item.id); setRefresh((state) => !state); }} > {item.name} {item.intro} ))} ); }; export default CreateModal;